【问题标题】:JSON parser in logstash ignoring data?logstash中的JSON解析器忽略数据?
【发布时间】:2016-01-11 02:28:14
【问题描述】:

我已经有一段时间了,我觉得 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"
}

所以我认为造成问题的部分是底部。我的 gork 东西应该都是正确的。当我运行此配置时,我看到 kibana 中的所有内容都正确显示,除了所有包含 JSON 代码的日志(并非所有日志都有 JSON)。当我在没有 JSON 过滤器的情况下再次运行它时,它会显示所有内容。 我尝试使用 IF 语句,以便它仅在包含 JSON 代码时运行 JSON 过滤器,但这并没有解决任何问题。

但是,当我添加一个 IF 语句以仅运行特定的 JSON 格式时(因此,如果 MSG_START = x、y 或 z 则 MSG_END 将具有不同的 json 格式。在这种情况下,假设我只解析 z格式),然后在 kibana 中我会看到所有包含 x 和 y JSON 格式的日志(虽然没有解析),但它不会显示 z。所以我确定这一定与我使用 JSON 过滤器的方式有关。

此外,每当我想使用新数据进行测试时,我都会开始清除 elasticsearch 中的旧数据,这样如果它有效,我就知道是我的 logstash 正在工作,而不仅仅是从 elasticsearch 运行内存。我已经使用XDELETE 'http://localhost:9200/logstash-*/' 完成了这项工作。但是除非我为 filebeat 提供新日志,否则 logstash 不会在 elasticsearch 中创建新索引。我不知道这是否是另一个问题,只是觉得我应该提一下。

我希望一切都有意义。

编辑:我只是检查了 logstash.stdout 文件,结果发现它正在解析 json,但它只在 kibana 中显示带有“_jsonparsefailure”的东西,所以 Elastisearch 一定有问题。也许。我不知道,只是头脑风暴:)

示例日志:

1452470936.88 1448975468.00 1 7 mfd_status 000E91DCB5A2 负载 {"up":[38,1.66,0.40,0.13],"mem":[967364,584900,3596,116772],"cpu":[1,299,812,17 3157,480,144],"cpu_dvfs":[996,1589,792,871,396,1320],"cpu_op":[996,50]}

MSG_START 是加载,MSG_END 是上面示例中的所有内容,因此 MSG_END 是我要解析的有效 JSON。

下面的日志中没有 JSON,但我的 logstash 会尝试解析“Inf:”之后的所有内容并发送“_jsonparsefailure”。

1452470931.56 1448975463.00 1 6 rc.app 02:11:03.301 Inf:NOSApp:UpdateSplashScreen 未在此平台上实现

这也是我在 logstash 中的输出,因为我现在觉得这很重要:

elasticsearch 
{ 
    hosts => ["localhost:9200"] 
    document_id => "%{fingerprint}"
}
stdout { codec => rubydebug }

【问题讨论】:

  • 您能否提供一些通过 Logstash 的示例日志行?
  • 是的。我刚刚编辑了这个问题有几个。

标签: elasticsearch logstash kibana elastic-stack logstash-forwarder


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我问了这个问题:Logstash output from json parser not being sent to elasticsearch 稍后,它有更多相关信息,如果有人遇到与我类似的问题,也许是一个更好的答案,您可以查看该链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-29
      相关资源
      最近更新 更多