我已经做了一段时间了,我觉得logstash中的JSON过滤器正在为我删除数据
https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elk-stack-on-ubuntu-14-04
我做了一些改变,但大部分都是一样的。我的grok过滤器看起来像这样:
uuid #uuid and fingerprint to avoid duplicates
{
target => "@uuid"
overwrite => true
}
fingerprint
{
key => "78787878"
concatenate_sources => true
}
grok #Get device name from the name of the log
{
match => { "source" => "%{GREEDYDATA}%{IPV4:DEVICENAME}%{GREEDYDATA}" }
}
grok #get all the other data from the log
{
match => { "message" => "%{NUMBER:unixTime}..." }
}
date #Set the unix times to proper times.
{
match => [ "unixTime","UNIX" ]
target => "TIMESTAMP"
}
grok #Split up the message if it can
{
match => { "MSG_FULL" => "%{WORD:MSG_START}%{SPACE}%{GREEDYDATA:MSG_END}" }
}
json
{
source => "MSG_END"
target => "JSON"
}
所以,我认为,造成问题的一点是底部。我的高尔克球应该都是正确的。当我运行这个配置时,我看到kibana中的所有内容都显示正确,除了所有日志中都有JSON代码(并非所有日志都有JSON)。当我在没有JSON过滤器的情况下再次运行它时,它会显示所有内容。
我尝试使用IF语句,以便它只在包含JSON代码时运行JSON过滤器,但这没有解决任何问题。
然而,当我添加了一个IF语句以只运行特定的JSON格式时(因此,如果MSG_START=x、y或z,那么MSG_END将具有不同的JSON格式。在这种情况下,假设我只解析z格式),那么在kibana中,我会看到所有包含x和y JSON格式的日志(虽然没有解析),但它不会显示z。所以我确信这一定与我如何使用JSON过滤器有关。
此外,每当我想用新数据进行测试时,我就开始在弹性搜索中清除旧数据,这样如果它有效,我就知道是我的日志库在起作用,而不仅仅是弹性搜索中的内存。我使用了
XDELETE 'http://localhost:9200/logstash-*/'
但是,除非我为filebeat提供新的日志,否则logstash不会在弹性搜索中创建新的索引。我不知道这是不是另一个问题,只是觉得我应该提一下。
我希望这一切都有意义。
编辑:我只是查看日志。stdout文件,结果是它正在解析json,但它只显示了kibana中带有“_jsonparsefailure”的内容,所以Elastisearch一定出了问题。大概我不知道,只是头脑风暴:)
示例日志:
1452470936.88 1448975468.00 1 7 mfd_status 000E91DCB5A2加载{“向上”:[38,1.66,0.40,0.13],“内存”:[9673645849003596116772],“cpu”:[129981217913157480144],“cpu_dvfs”:[99615897928713961320],“cpu”:[996,50]}
MSG_START是加载的,MSG_END是上面示例中的所有内容,所以MSG_END是我要解析的有效JSON。
下面的日志中没有JSON,但我的日志将尝试解析“Inf:”之后的所有内容,并发出“_jsonparsefailure”。
1452470931.56 1448975463.00 1 6钢筋混凝土。app 02:11:03.301 Inf:NOSApp:UpdateSplashScreen未在此平台上实现
这也是我在logstash中的输出,因为我现在觉得这很重要:
elasticsearch
{
hosts => ["localhost:9200"]
document_id => "%{fingerprint}"
}
stdout { codec => rubydebug }