从访问中提取 Url 登录 Splunk
Extract Url from access Log in Splunk
这是 Splunk ui 中出现的示例 accessLog。
{"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"}
{"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
这是 Splunk ui 中出现的示例 accessLog。
{"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"}
{"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