如何在Splunk中从访问日志提取uri并统计各API调用次数
问题原因
你原有查询语句的正则规则存在两个缺陷:
- 正则写死了匹配
/api/v1/hello前缀,无法匹配其他路径的接口 - 没有明确匹配边界,导致提取的内容截断或者带多余字符
正确的Splunk查询语句
(index=dummy OR index=dummy1) source=*dummy-service* logger=reactor.netty.http.server.AccessLog | rex field=message "uri=(?<api_path>[^,]+)" | chart count as 调用次数 by api_path | sort - 调用次数
正则规则说明
uri=(?<api_path>[^,]+)的匹配逻辑:
- 先定位到日志message字段里的
uri=字符串 - 捕获组
api_path匹配所有不是逗号的字符,也就是从uri=后面开始直到下一个逗号之前的所有内容,刚好是完整的接口路径 - 如果接口路径带query参数,想要只保留路径部分,可以调整正则为
uri=(?<api_path>[^?,]+),自动截断问号后的参数内容 - 如果只需要统计
/api/v1前缀的接口,可以调整正则为uri=(?<api_path>\/api\/v1\/[^,]+),过滤其他前缀的路径
扩展统计用法(可选)
如果需要区分请求方法、状态码做多维度统计,可以扩展提取字段:
(index=dummy OR index=dummy1) source=*dummy-service* logger=reactor.netty.http.server.AccessLog | rex field=message "method=(?<method>[^,]+), uri=(?<api_path>[^,]+), status=(?<status>\d+)" | chart count as 调用次数 by method, api_path, status
内容的提问来源于stack exchange,提问作者Tapesh Gupta
相关产品推荐
相关产品推荐

