从访问中提取 Url 登录 Splunk

Extract Url from access Log in Splunk

这是 Splunk ui 中出现的示例 accessLog。

  1. {"timestamp":"2021-10-17T15:03:56,763Z","level":"INFO","thread":"reactor-http-epolpl-20","message":"method=GET, uri=/api/v1/hello1, status=200, duration=1, "logger":"reactor.netty.http.server.AccessLog"}

  2. {"timestamp":"2021-10-17T15:03:56,763Z","level":"INFO","thread":"reactor-http-epolpl-20","message":"method=GET, uri=/api/v1/dummy1, status=200, duration=1, "logger":"reactor.netty.http.server.AccessLog"}

我想提取 url 并对所有 API 进行计数,例如从 uri 部分命中 API 的次数(uri=/api/v1/dummy1)

(index=dummy OR index=dummy1) source=*dummy-service*  logger=reactor.netty.http.server.AccessLog 
| rex field=message "(?<url>uri.[\/api\/v1\/hello]+)" 
| chart count by url

但它没有以正确的格式给出 URL。我尝试了各种正则表达式,但无法获得正确的 URL 计数。

我想使用此查询在 Splunk 仪表板中显示 API 计数。

问题似乎与 rex 命令中的正则表达式有关。正则表达式中的方括号 ([]) 表示任何字符都可以以任何顺序匹配的集合。示例正则表达式应匹配“/api/v1/hello”,但也会匹配“iap/1v/ohell”、“philo”以及这些字符的任何其他排列。但是,它不会匹配“/api/v1/dummy1”。

试试这个查询。这里的 rex 命令将 "uri=" 和后面的逗号之间的所有内容作为 url.

index=dummy OR index=dummy1  source=*dummy-service*  logger=reactor.netty.http.server.AccessLog 
| rex field=message "uri=(?<url>[^,]+)" 
| chart count by url