如何自定义Splunk错误告警Webhook Payload以发送至Slack?
怎么修改Splunk告警Webhook的Payload,加更多信息?
答案是肯定的,完全可以自定义Payload内容,添加告警说明、自定义消息、额外元数据这些信息,主要有下面几种实现方式:
方法1:用Splunk告警的自定义Webhook配置(最推荐)
配置告警的Webhook动作时,别用默认的Payload,自己写包含自定义字段的JSON结构就行,还能利用Splunk内置的告警令牌动态填充数据:
自定义Payload示例
{ "alert_title": "MongoDB错误计数告警", "alert_description": "检测到mongod数据源下有8条错误记录,触发阈值告警了", "result": { "sourcetype": "$result.sourcetype$", "count": "$result.count$" }, "sid": "$sid$", "results_link": "$results_link$", "search_name": "$search_name$", "owner": "$owner$", "app": "$app$", "alert_time": "$alert_time$", "trigger_condition": "错误计数≥5", "severity": "WARNING" }
常用的告警令牌
$alert_time$:告警触发的时间$search_name$:告警对应的搜索名称(之前显示null的话,给搜索起个名字就行)$result.<字段名>$:搜索结果里的具体字段值,比如$result.count$$trigger_reason$:告警触发的原因描述$owner$:告警的所有者$app$:告警所属的Splunk应用
方法2:写自定义脚本触发告警(进阶)
如果需要更灵活的逻辑,比如根据错误数量自动调整告警级别,可以写个Python脚本当告警动作,在脚本里构造Payload再发去Slack:
简单脚本示例
import json import sys import requests from datetime import datetime # 读取Splunk传过来的告警数据 alert_data = json.loads(sys.argv[1]) sid = alert_data['sid'] results_link = alert_data['results_link'] sourcetype = alert_data['result']['sourcetype'] count = int(alert_data['result']['count']) # 动态判断告警级别 severity = "CRITICAL" if count >= 10 else "WARNING" # 构造符合Slack格式的Payload custom_payload = { "text": f"⚠️ MongoDB错误告警\n- 数据源类型: {sourcetype}\n- 错误数量: {count}\n- 查看详情: {results_link}", "attachments": [ { "title": "告警详情", "fields": [ {"title": "SID", "value": sid, "short": True}, {"title": "告警时间", "value": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), "short": True}, {"title": "严重级别", "value": severity, "short": True} ] } ] } # 发送到Slack Webhook slack_webhook_url = "你的Slack Webhook地址" requests.post(slack_webhook_url, json=custom_payload)
把脚本存成.py文件,传到Splunk的$SPLUNK_HOME/etc/apps/search/bin/目录,然后在告警动作里选“运行脚本”,指定这个脚本就好。
方法3:修改全局Webhook模板(影响所有告警)
要是想统一改所有Webhook的默认Payload,可以编辑Splunk的模板文件:
- 找到
$SPLUNK_HOME/etc/apps/search/default/data/ui/alerts/webhook.xml - 修改里面的
payload部分,添加自定义字段和令牌 - 重启Splunk生效
注意:这种方法会影响所有用Webhook的告警,改之前记得备份原文件。
几个要注意的点
- 用告警令牌的时候,名字要写对,别拼错
- 之前
search_name是null,给对应的搜索起个名字,$search_name$就能拿到值了 - Slack的Webhook有特定格式要求,比如要用
text或者attachments字段,按规范写才能正常显示消息
内容的提问来源于stack exchange,提问作者Mr H
相关产品推荐
相关产品推荐

