【发布时间】:2023-09-11 20:51:01
【问题描述】:
我们使用 AKS 并将容器日志写入 Log Analytics。我们有一个应用程序,它在每个请求的容器日志中发出多个打印语句,我们希望将所有这些事件/日志行分组为聚合事件,每个传入请求一个事件,因此我们更容易找到感兴趣的行.因此,例如,如果请求以“GET /my/app”行开始,然后应用程序打印了有关访问检查的内容,我们希望能够在所有日志行中搜索该请求 类似| where LogEntry contains "GET /my/app" and LogEntry contains "access_check"。
我习惯于使用 Splunk 进行查询。在那里,使用transaction command 处理这种类型的查询将是轻而易举的事:
但是,对于 Log Analytics,似乎需要多个命令才能完成此任务。似乎我需要使用extend 和row_window_session 以便为所有相关的日志行提供一个公共时间戳,然后使用summarize 和make_list 将日志输出的行组合成一个JSON blob,然后最后@ 987654330@ 和 strcat_array 将这些行组合成一个换行符分隔的字符串。
类似这样的:
ContainerLog
| sort by TimeGenerated asc
| extend RequestStarted= row_window_session(TimeGenerated, 30s, 2s, ContainerID != prev(ContainerID))
| summarize logLines = make_list(LogEntry) by RequestStarted
| extend parsedLogLines = strcat_array(parse_json(logLines), "\n")
| where parsedLogLines contains "GET /my/app" and parsedLogLines contains "access_check"
| project Timestamp=RequestStarted, LogEntry=parsedLogLines
是否有更好/更快/更直接的方法可以将同一请求的多行组合到一个事件中,然后对该事件的内容执行搜索?
【问题讨论】:
标签: azure splunk azure-log-analytics