【问题标题】:Present average processing time in Kibana目前 Kibana 中的平均处理时间
【发布时间】:2015-09-21 09:45:45
【问题描述】:

我的应用程序日志来自 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”),我怎样才能得到平均值?有什么想法吗?

【问题讨论】:

  • 您是否尝试过针对不同的消息匹配过滤器并为 3 条不同的消息添加标签或类型?然后你可以按时间过滤

标签: logstash kibana logstash-grok elastic-stack


【解决方案1】:

您需要使用 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

【讨论】:

    猜你喜欢
    • 2020-11-24
    • 1970-01-01
    • 2021-02-02
    • 2019-04-22
    • 2016-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    相关资源
    最近更新 更多