【发布时间】:2019-01-20 03:19:54
【问题描述】:
我想知道我的旧 PHP Web 应用程序中的不同操作需要多长时间。有一个日志文件在动作开始和结束时写出消息。看起来像这样。
日志文件
2018-08-13 13:05:07,217 [30813] ControllerA: actionA start
2018-08-13 13:05:07,280 [30813] ControllerA: actionA end
2018-08-13 13:05:08,928 [30813] ControllerB: actionA start
2018-08-13 13:05:08,942 [30813] ControllerB: actionA end
2018-08-13 13:05:09,035 [17685] ControllerC: actionA start
2018-08-13 13:05:09,049 [17685] ControllerC: actionA end
2018-08-13 13:05:09,115 [8885] ControllerB: actionB start
2018-08-13 13:05:09,128 [8885] ControllerB: actionB end
我使用 logstash 和 grok 过滤器解析日志,以获得 ElasticSearch 可以理解的 JSON 格式。
LOGSTASH 过滤器
grok {
match => { "message" => "%{EXIM_DATE:timestamp} \[%{NUMBER:pid}\] %{WORD:controller}: %{WORD:action} %{WORD:status}" }
}
然后由 ElasticSearch 对结果进行索引,但我不知道如何找出每个 Action 需要多长时间。根据 pid、控制器的名称和操作的名称以及开始/结束状态,我拥有了解操作需要多长时间所需的所有信息。 我想在 Kibana 中显示每个操作的持续时间,但我首先尝试通过查询从索引中获取数据。我read about aggregations 并认为他们可能适合这种任务。
我创建了以下查询:
ES 查询
{
"aggs":{
"group_by_pid": {
"terms": {
"field": "pid"
}
},
"aggs": {
"group_by_controller": {
"terms": {
"field": "controller"
}
}
"aggs": {
"group_by_action": {
"terms":{
"field": "action"
}
}
}
}
}
}
但是响应总是空的。我目前不确定是否可以在每个开始和结束操作之间进行计算,或者我是否必须更新完整的日志记录并计算 PHP 中的持续时间。
欢迎提出任何建议!
【问题讨论】:
-
这个答案应该会有所帮助:stackoverflow.com/questions/37353365/…
标签: elasticsearch logstash elasticsearch-aggregation