本文介绍新版内容模板的变量以及引用方式。
引用方式
- 引用变量时,变量名称必须完全匹配。 - 对于不存在的变量或者不合法的引用,系统默认替换为空字符串。 
- 如果引用的值为对象类型,则会转换为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