0

我有来自 logstash 的应用程序日志,格式如下。

{
"Timestamp": "2015-09-09T10:54:57.4562725+00:00",
"Message": "Started processing",
"MessageId": "b80fb2aa-4b7b-4f49-9e60-865c6afa688e",
"ClientName": "TestClient"

}

{
"Timestamp": "2015-09-09T10:55:57.4562725+00:00",
"Message": "Done processing",
"MessageId": "b80fb2aa-4b7b-4f49-9e60-865c6afa688e",
"ClientName": "TestClient"

}

{
"Timestamp": "2015-09-09T10:55:57.4562727+00:00",
"Message": "Time Elapsed: 561 ms",
"MessageId": "b80fb2aa-4b7b-4f49-9e60-865c6afa688e",
"ClientName": "TestClient"

}

我想要实现的是获得平均处理时间(使用相同 MessageId 完成的所有日志记录都是一个处理周期的一部分)。

每个事务的最后一次登录都有处理时间(如上图:“Message”:“Time Elapsed: 561 ms”),我怎样才能得到平均值?有任何想法吗?

4

1 回答 1

0

您需要使用 grok 过滤器提取带有“已用时间”的消息中的毫秒数,然后将其传递给指标过滤器。您将获得一个%{processingTime.mean}可在过滤器或输出中使用的变量。就像是:

filter {
  grok {
    match => { "Message" => "Time Elapsed: %{INT:processingTime} ms" }
    add_tag => [ "has_processingTime" ]
  }
  if "has_processingTime" in [tags] {
    metrics {
      timer => [ "processingTime", "%processingTime" ]
      add_tag => "metric"
    }
  }
}

此外,您还将获得其他有趣的指标,例如最小值、最大值、百分位数和比率。请参阅https://www.elastic.co/guide/en/logstash/current/plugins-filters-metrics.html

于 2015-09-25T22:05:34.047 回答