用于收集指标数据的 Logstash grok 过滤器
Logstash grok filter for collectd metrics data
我正在处理一些指标数据并将它们存储到 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 过滤器来帮助我实现这一目标吗?
提前致谢!!
我终于通过使用另一个过滤器解决了这个问题。 grok 不适用于此用例。
filter {
json {
source => "message"
}
}
json 过滤器从消息数组中准确提取每个数据作为键值对的 json。这样就解决了问题。
我正在处理一些指标数据并将它们存储到 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 过滤器来帮助我实现这一目标吗?
提前致谢!!
我终于通过使用另一个过滤器解决了这个问题。 grok 不适用于此用例。
filter {
json {
source => "message"
}
}
json 过滤器从消息数组中准确提取每个数据作为键值对的 json。这样就解决了问题。