代码之家  ›  专栏  ›  技术社区  ›  Swikrit

logstash中的JSON解析器忽略数据?

  •  0
  • Swikrit  · 技术社区  · 8 年前

    我已经做了一段时间了,我觉得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 }
    
    2 回复  |  直到 8 年前
        1
  •  1
  •   Tom    6 年前

    我遇到了类似的问题,发现我的一些日志使用了UTC时间/日期戳,而其他日志则没有。 修正了使用UTC的代码,并为我解决了问题。

        2
  •  0
  •   Community Egal    7 年前

    我问了这个问题: Logstash output from json parser not being sent to elasticsearch 稍后,它会有更多相关信息,如果有人有类似的问题,你可以查看该链接。