本文介绍新版内容模板的变量以及引用方式。
引用方式
引用变量时,变量名称必须完全匹配。
对于不存在的变量或者不合法的引用,系统默认替换为空字符串。
如果引用的值为对象类型,则会转换为JSON字符串。
模板的变量名称规则:大小写字母、数字、下划线,且不以数字开头。
如果模板变量名称符合标准规则,则可以通过
{{alert.xxx}}获取值。如果模板变量名称不符合标准规则,例如变量名称为
__tag__:__namespace__,获取值的方法为{{alert.annotations["__tag__:__namespace__"] }}。
配置行动策略时必须选择内容模板,内容模板定义具体的发送内容和主题。您可以在发送内容和主题/标题中,通过{{ alert.xxx }}方式引用模板变量。日志服务发送告警通知时,会将发送内容和主题/标题中的模板变量替换为真实值,例如{{ alert.project }}替换为告警规则所属的Project名称。

除了直接引用变量外,您还可以通过控制流以及内置函数对变量进行操作和处理。具体的模板语法和内置函数请参见内容模板语法(新版)、内置模板函数。
告警属性
变量  | 说明  | 数据类型  | 取值示例  | 引用示例  | 
aliuid  | Project所属的阿里云账号ID。  | string  | 117918634953****  | 
  | 
alert_instance_id  | 告警触发的实例的ID。  | string  | ee16a8f435485f3f-5be6b81edc520-3d6****  | 实例ID为  | 
alert_id  | 告警规则ID,Project内唯一。  | string  | alert-12345  | 告警规则ID是  | 
alert_name  | 告警规则名称。  | string  | 测试告警规则  | 告警规则  | 
alert_type  | 告警类型。 
  | string  | sls_alert  | 告警类型是  | 
region  | 地域。  | string  | cn-hangzhou  | 告警触发的地域为  | 
project  | 告警规则所属Project。  | string  | my-project  | 
  | 
next_eval_interval  | 下一次评估间隔,单位为秒。  | int  | 300  | 下一次评估时间为  | 
alert_time  | 本次评估时间。  | int  | 1616744734  | 本次评估告警的时间为  | 
fire_time  | 首次触发时间。  | int  | 1616059834  | 告警首次触发时间为  | 
status  | 告警状态。 
  | string  | firing  | 告警状态为  | 
resolve_time  | 告警恢复时间。 
  | int  | 0  | 告警恢复的时间为  | 
severity  | 告警严重度。 
  | int  | 10  | 告警严重度为  | 
labels  | 标签列表。  | map  | {"env":"test"}  | 告警标签为  | 
annotations  | 标注列表。  | map  | { "title": "告警标题","desc": "告警描述" }  | 告警标注为  | 
results  | 查询参数和中间结果,数组类型。变量取值说明,请参见QueryData结构。  | array  | 参见本文末尾附录。  | 第一个查询的开始时间为  | 
fire_results  | 触发告警的数据,即集合操作后的数据,最多100条。 fire_results变量值超过2KB,并且查询结果字段内容的长度超过1KB时,超出部分会被截断。数据被截断处理方式请参见触发告警的日志太多,在告警通知中展示不完全时,如何处理?  | array  | 参见本文末尾附录。  | 告警触发时产生的数据为  | 
fire_results_count  | 触发告警的数据的总条数,可能多于100,例如笛卡尔积操作后的总条数。  | int  | 3  | 告警触发时产生的总数据条数为  | 
condition  | 触发告警的评估表达式。其中,以触发告警的值替换您所配置的变量,并使用中括号([ ])包裹。格式为  | string  | 
  | 告警评估表达式为  | 
raw_condition  | 原始的评估表达式,即变量未被替换为真实值的原始表达式。格式为  | string  | 
  | 原始评估表达式为  | 
policy  | 告警策略或者行动策略。变量取值说明,请参见Policy结构。  | map  | 参见本文末尾附录。  | 告警策略ID为  | 
dashboard  | 告警关联的仪表盘名称。  | string  | mydashboard  | 告警关联的仪表盘名称为  | 
alert_url  | 告警的详细URL地址。  | string  | https://sls.console.aliyun.com/lognext/project/test-xxxx/alert/alert-1617164106-940166  | 告警URL为  | 
query_url  | 查询统计中第一个查询页面的URL地址。  | string  | https://sls.console.aliyun.com/lognext/project/test-xxx/logsearch/test-alert-access?encode=base64&endTime=1617175989&queryString=KiB8IHNlbGVjdCBjb3VudCgxKSBhcyBjbn****&queryTimeType=99&startTime=1617175089  | 查询统计中第一个查询页面的URL地址为  | 
alert_history_dashboard_url  | 告警历史统计报表的URL地址。  | string  | https://sls.console.aliyun.com/lognext/project/test-xx/dashboard/internal-alert-analysis  | 告警历史统计报表的URL地址为  | 
dashboard_url  | 告警关联的仪表盘地址。  | string  | https://sls.console.aliyun.com/next/project/myproject/dashboard/mydashboard  | 告警关联的仪表盘地址为  | 
fingerprint  | 告警指纹。更多信息,请参见基于告警指纹去重。  | string  | 478325709134bc5c  | 告警指纹为  | 
signin_url  | 免登录控制台即可查看告警详情。更多信息,请参见免登录查看告警详情。  | string  | https://sls.console.aliyun.com/console/AlertAjax/slsSignIn.json?token=xxxx  | 
  | 
Policy结构
policy变量中可引用的变量说明如下表所示。
变量  | 说明  | 数据类型  | 取值示例  | 
alert_policy_id  | 告警策略ID。  | string  | sls.test-alert  | 
action_policy_id  | 告警监控规则指定的行动策略ID,仅在告警策略使用动态行动策略时有用。  | string  | sls.test-action  | 
repeat_interval  | 重复等待时间,仅在告警策略使用动态行动策略时有用。  | string  | 4h  | 
QueryData结构
results变量中可引用的变量说明如下表所示。
变量  | 说明  | 数据类型  | 取值示例  | 
store_type  | 存储类型。 
  | string  | log  | 
region  | 查询统计目标库所在地域。 存储类型为资源数据时,该变量值为空。  | string  | cn-hangzhou  | 
project  | 查询统计目标库所在Project。 存储类型为资源数据时,该变量值为空。  | string  | sls-test-alert  | 
store  | 查询统计中的目标库名称。  | string  | test-logstore  | 
query  | 查询分析语句。  | string  | error | select count(1) as cnt  | 
start_time  | 查询开始时间。 存储类型为资源数据时,该变量值为空。  | int  | 1616741485  | 
end_time  | 查询结束时间。 存储类型为资源数据时,该变量值为空。  | int  | 1616745085  | 
raw_results  | 实际查询内容,数组格式,最多100行。 raw_results变量值超过2KB,并且查询结果字段内容的长度超过1KB时,超出部分会被截断。  | array  |  | 
raw_results_count  | 实际查询数据的总条数,可能多于100。  | int  | 20  | 
fire_result  | 告警触发内容中的第一条数据。告警触发结果集可能包含多条数据,该参数只返回第一条数据。  | map  |  | 
query_url  | 查询的URL地址。 存储类型为资源数据时,该变量值为空。  | string  | https://sls.console.aliyun.com/lognext/project/test-xxx/logsearch/test-alert-access?encode=base64&endTime=1617175989&queryString=KiB8IHNlbGVjdCBjb3VudCgxKSBhcy*******&queryTimeType=99&startTime=1617175089  | 
dashboard_url  | 查询关联的仪表盘地址。  | string  | https://sls.console.aliyun.com/next/project/myproject/dashboard/mydashboard  | 
role_arn  | 使用服务角色的ARN。  | string  | acs:ram::117918634953****:role/aliyunslsalertmonitorrole  | 
常见问题
附录
results结构[{ "store_type": "log", "region": "cn-hangzhou", "project": "sls-alert-test", "store": "test", "query": "* | select count(1) as cnt", "start_time": 1616741485, "end_time": 1616745085, "dashboard_id": "mydashboard", "raw_results": [{ "cnt": "4" }], "raw_result_count": 1, "fire_result": { "cnt": "4" }, "truncated": false, "role_arn": "" }]fire_results结构[{ "host": "example.com", "host__1": "example.com", "pv": "836", "slbid": "slb-02", "status": "200" }, { "host": "example.com", "host__1": "example.com", "pv": "836", "slbid": "slb-02", "status": "200" }]policy结构{ "alert_policy_id": "sls.test-alert", "action_policy_id": "sls.test-action", "repeat_interval": "5m0s" }
示例
通过新版内容模板定义通知内容的示例如下:
告警内容
{ "alert_id": "test-alert", "alert_name": "PV/UV Alert", "project": "project-1", "status": "firing", "severity": 6, "labels": { "app": "nginx", "host": "host-1" }, "results": [ { "project": "project-1", "logstore": "logstore-1", "query": "* | select count(*) as pv" }, { "project": "project-2", "logstore": "logstore-2", "query": "* | select count(distinct user_id) as uv" } ] }内容模板配置
- Alert ID: {{ alert.alert_id }} - Alert Name: {{ alert.alert_name }} - Project: {{ alert.project }} - Status: {% if alert.status == "firing" %}FIRING{% else %}RESOLVED{% endif %} - Labels: {%- for key, val in alert.labels.items() %} - {{ key }}: {{ val }} {%- endfor %} - Query: {{ alert.results[0].query }}输出结果
- Alert ID: test-alert - Alert Name: PV/UV Alert - Project: project-1 - Status: FIRING - Labels: - app: nginx - host: host-1 - Query: * | select count(*) as pv