Splunk查询求助:按appID统计服务访问次数
问题描述
我有一段单字符串格式的应用日志,示例如下:
BookData, { id: 12312 }, appID : 'APP1', Relation_ID : asdas-12312 host = aws@asd. sourcetype=service_name
我需要创建表格,按appID分组统计服务被访问的次数,期望结果如下:
appID Count APP1 23 APP2 25 APP3 100
我尝试了以下查询,但返回0条记录:
index=my_index sourcetype=service_name * | table appID Count | addColTotals labelfield=appID label="appID" count
我认为问题在于appID不是已提取的字段,请问如何编写正确的查询实现需求?
解决方案
你的判断正确,核心问题是appID未被自动提取为可统计字段,需要先手动提取该字段,再执行分组统计。
正确查询语句
index=my_index sourcetype=service_name | rex field=_raw "appID\s*:\s*'(?<appID>[^']+)'" | stats count as Count by appID | addcoltotals labelfield=appID label="总计"
语句说明
- 提取appID字段:通过
rex命令从原始日志(_raw字段)中匹配appID : 'XXX'格式内容,将单引号内的字符串捕获为appID字段。正则表达式appID\s*:\s*'(?<appID>[^']+)'的作用:appID\s*:\s*:匹配appID后跟随的任意空格、冒号、任意空格部分(?<appID>[^']+):捕获单引号内所有非单引号字符,命名为appID字段
- 分组统计次数:用
stats count as Count by appID按appID分组,统计每组的事件数量并将结果命名为Count - 添加总计行:通过
addcoltotals添加总计行,将总计行的appID列显示为“总计”
适配调整
如果日志中appID的格式有变化(比如无单引号包裹,如appID : APP1),需要修改正则表达式为appID\s*:\s*(?<appID>\S+)。
内容的提问来源于stack exchange,提问作者kselvan9000
相关产品推荐
相关产品推荐

