You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Splunk查询识别近90天无活动当日活跃的国家

Splunk 90天沉寂后当日活跃国家识别查询实现方案

核心实现逻辑

整个查询用Splunk内置命令即可完成,逻辑分四步:

  • 拉取搜索当日往前推91天的全量活动日志,覆盖「前90天验证窗口+当日判定窗口」,时间范围拉取不足会直接导致结果错误
  • 按「自然天+国家」维度做聚合,得到每个国家在每一天的活动计数,没有活动的日期补0,避免空值漏判
  • 按国家维度归并数据,分别计算每个国家当日的总活动量、前90天的总活动量
  • 过滤出「当日活动量>0、前90天总活动量=0」的国家,整理成结构化统计表格输出

用到的核心Splunk命令

  • timechart:对时间字段按天切分,自动按国家维度拆分列,快速生成每个国家每日的活动统计值
  • fillnull:把没有活动记录的日期对应的空值填充为0,避免统计时把空值误判为有活动
  • eval+case:对日期打标,区分当日数据和前90天的历史数据
  • stats:跨天聚合每个国家的窗口活动指标,完成最终的维度归并
  • where:按规则过滤符合条件的国家
  • relative_time():动态计算时间窗口边界,不用每次手动修改查询的日期参数

可直接复用的SPL代码

# 替换下面的索引名为你实际存储活动日志的索引
index=user_activity_log earliest=-91d@d latest=now()
# 替换country为你数据中存储国家信息的实际字段名,统计事件数直接用count即可
| timechart span=1d count as daily_event_count by country
| fillnull value=0
| eval time_window = case(
    _time >= relative_time(now(), "@d"), "current_day",
    _time >= relative_time(now(), "-90d@d"), "prev_90days",
    1=1, "unused"
)
| stats
    sum(eval(if(time_window="current_day", daily_event_count, 0))) as 当日活动事件数,
    sum(eval(if(time_window="prev_90days", daily_event_count, 0))) as 前90天活动事件数
    by country
| where 当日活动事件数 > 0 AND 前90天活动事件数 = 0
| rename country as 国家
| table 国家 当日活动事件数 前90天活动事件数

适配调整提示

  • 如果你的环境配置了活动相关的加速数据模型,开头的全量扫描可以替换为tstats查询,大数据量下查询速度能提升数倍:
    | tstats count as daily_event_count from datamodel=Activity_Log by _time span=1d src_country
    
  • 如果不需要按自然天对齐,要按搜索执行时刻往前推满90*24小时算沉寂窗口,把代码里所有@d的时间修饰符去掉即可
  • 如果需要额外展示国家对应的首次回归活动时间、活跃用户数之类的指标,直接在stats块里加对应的聚合计算就行

内容的提问来源于stack exchange,提问作者Off Grid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 10:01:52