用于收集指标数据的Logstash grok过滤器

时间:2016-11-19 09:18:09

标签: logstash-grok grok

我正在处理一些指标数据并将其存储到Elasticsearch中。现在我想从Elasticsearch获取这些数据并对它们应用过滤器,目标是在logstash过滤后获得更多相关字段。为此,我计划使用grok过滤器。但我不是一个grok专家,我从来没有解析过这种数据。

这是来自Elasticsearch的示例数据:

{
      "_index" : "metrics",
      "_type" : "metrics",
      "_id" : "AVh4R8n3cN8PY7B3sFIM",
      "_score" : 1.0,
      "_source" : {
        "event_time" : "2016-11-18T16:31:59.769Z",
        "message" : "[{\"values\":[0.04,0.18,0.17],\"dstypes\":[\"gauge\",\"gauge\",\"gauge\"],\"dsnames\":[\"shortterm\",\"midterm\",\"longterm\"],\"time\":1479486719.645,\"interval\":10.000,\"host\":\"test-host\",\"plugin\":\"load\",\"plugin_instance\":\"\",\"type\":\"load\",\"type_instance\":\"\"}]",
        "version" : "1",
        "tags" : [ ]
      }
}

在logstash过滤后我希望有这个:

{
      "_index" : "metrics",
      "_type" : "metrics",
      "_id" : "AVh4R8n3cN8PY7B3sFIM",
      "_score" : 1.0,
      "_source" : {
        "event_time" : "2016-11-18T16:31:59.769Z",
        "values" : [0.04,0.18,0.17],
        "dstypes" : ["gauge","gauge","gauge"],
        "dsnames": ["shortterm","midterm","longterm"],
        "time" : 1479486719.645,
        "interval" : 10.000,
        "host" : "test-host",
        "plugin" : "load",
        "plugin_instance" : "",
        "type" : "load",
        "type_instance" : ""
      }
}

有人可以通过提供建议或示例grok过滤器来帮助我实现这一目标吗?

提前谢谢!!

1 个答案:

答案 0 :(得分:0)

我最后通过使用另一个过滤器解决了这个问题。 grok不适合这个用例。

filter {
    json {
        source => "message"
    }
}

json过滤器将消息数组中的每个数据精确地提取为键值对的json。并解决了这个问题。