如何让Logstash消耗自己的日志
基本上,我希望LogStash使用自己的日志并填充字段,如如何让Logstash消耗自己的日志,logstash,logstash-grok,Logstash,Logstash Grok,基本上,我希望LogStash使用自己的日志并填充字段,如@timestamp,level,以便在Kibana中使用 我当前的配置如下所示: input { file { path => "/path/to/logstash/logs/*.log" type => "logstash" } } 这似乎很难做到——如果不重新编写Grok过滤器的话。LogStash真的不能使用自己的日志吗?(很难用谷歌搜索,我什么也找不到。) 或者这是一开始的错误方法 LogS
@timestamp
,level
,以便在Kibana中使用
我当前的配置如下所示:
input {
file {
path => "/path/to/logstash/logs/*.log"
type => "logstash"
}
}
这似乎很难做到——如果不重新编写Grok过滤器的话。LogStash真的不能使用自己的日志吗?(很难用谷歌搜索,我什么也找不到。)
或者这是一开始的错误方法
LogStash的日志输出示例:
{
:timestamp=>"2014-09-02T10:38:08.798000+0200",
:message=>"Using milestone 2 input plugin 'file'. This plugin should be stable, but if you see strange behavior, please let us know! For more information on plugin milestones, see http://logstash.net/docs/1.4.2/plugin-milestones",
:level=>:warn
}
是的,你可以这样做。 请将日志存储控制台日志保存到文件中。 然后,您可以使用
ruby-filter
或grok-filter
解析信息
以下是一个例子:
input {
file {
path => "/path/to/logstash/logs/*.log"
}
}
filter {
ruby {
code => "
mes = event['message'];
startPos = mes.index('level=>');
endPos = mes.length;
event[':level'] = mes[startPos+7..endPos-2];
"
}
}
output {
stdout {
codec => "rubydebug"
}
}
您必须使用
grok
,因为logstash无法将rubydebug
用作输入编解码器
日志的格式是固定的,因此执行此操作的grok
是直接的。然后,我们使用日期
替换@时间戳
filter {
grok {
match => ["message", '{:timestamp=>"(?<timestamp>.*)", :message=>"(?<msg>.*)", :level=>:(?<level>.*)}']
}
mutate {
replace => ["message", "%{msg}" ]
remove_field => msg
}
date {
match => [ "timestamp", "ISO8601" ]
remove_field => 'timestamp'
}
}
过滤器{
格罗克{
match=>[“message”,“{:timestamp=>”(?*),:message=>“(?*”,:level=>:(?*)}']
}
变异{
替换=>[“消息”,“%{msg}”]
删除\u字段=>msg
}
日期{
匹配=>[“时间戳”,“ISO8601”]
删除\u字段=>“时间戳”
}
}
需要
mutate
步骤,因为如果您将
放入匹配项中,它会将消息
变成一个数组,并将提取的消息添加到其中,因此捕获为不同的名称,然后替换消息。但这真的是唯一的方法吗?对不起,这似乎是对LogStash应该直接支持的东西的攻击。无法读取自己日志的日志框架???:-)