在告警通知中引用日志内容

您可以在内容模板中选择合适的变量(labels、annotations、fire_results或results),用于在告警通知中引用日志内容。

日志服务支持在告警通知中展示触发告警的详细信息,帮助您在接收到告警通知后,了解告警详情。针对该功能,需要您在创建告警监控规则时,配置合理的参数,并在内容模板中添加labels、annotations、fire_results或results等变量。更多信息,请参见内容模板变量说明(新版)

  • labels:告警标签。

  • annotations:告警标注。

  • fire_results:触发告警的数据。

  • results:查询参数和中间结果。

例如在监控Nginx访问时,您可以使用如下查询和分析语句获取状态码、报错机器的IP地址、错误次数等信息,然后针对该结果创建告警监控规则,并在内容模板中引用该结果。当访问出错(status >=400)时,日志服务会给您发送告警通知,并在告警通知中展示状态码、报错机器的IP地址、错误次数等信息。

  • 查询和分析语句

    status >=400 | SELECT status, __source__ AS ip, count(*) AS cnt GROUP BY status,ip
  • 查询和分析结果查询和分析结果

使用labels变量

您可以在内容模板中使用labels变量,用于在告警通知中引用日志内容。

  • 告警监控规则

    您可以在配置告警规则时添加标签或者设置分组评估。触发告警后,告警消息中将生成labels信息。

    • 分组评估:设置分组评估后,分组评估的字段会自动添加到labels信息中。更多信息,请参见设置分组评估

      重要

      选择分组评估字段时,请选择具备标识监控实体特征的字段,字段的值可枚举。例如设置分组评估字段为status,则出现错误日志时,不同的状态码会触发不同的告警。请勿选择不具备区分监控实体特征的字段。使用这些字段会产生很多分组,每个分组对应一个告警,造成告警风暴,导致错过重要的告警信息。

    • 添加标签:标签是标识性属性。更多信息,请参见标签

    例如您要在告警消息中添加日志来源、所属环境、状态码等信息,则您可以添加标签app:nginxenv:prod以及设置分组评估字段为status

    image

  • 告警消息

    触发告警后,将生成如下告警消息。

    {
        "labels": {
            "app": "nginx",
            "env": "prod",
            "status": "404"
        }
    }
  • 内容模板

    您可以在内容模板中添加labels变量,则告警通知中将引用您所设置的日志内容。如何设置内容模板,请参见创建内容模板

    内容模板

使用annotations变量

您可以在内容模板中使用annotations变量,用于在告警通知中引用日志内容。

  • 告警监控规则

    您可以在配置告警规则时手动添加标注信息或使用自动添加标注功能。触发告警后,告警消息中将生成annotations信息。更多信息,请参见标注

    说明

    日志服务默认提供两个标注。

    例如您要在告警消息中添加状态码、机器IP地址、错误次数等信息,则您可以添加status:${status}ip:${ip}cnt:${cnt}等标注信息。

    • 手动添加标注

      image

    • 使用自动添加标注功能

      image

  • 告警消息

    触发告警后,将生成如下告警消息。

    {
        "annotations": {
            "title": "Nginx访问错误告警触发",
            "desc": "状态码400错误发生了15次"
            "status": "400"
            "ip": "127.0.0.1"
            "cnt": "15"
            "__count__": "1"
        }
    }
  • 内容模板

    您可以在内容模板中添加annotations变量,则告警通知中将引用您所设置的日志内容。如何设置内容模板,请参见创建内容模板

    内容模板

使用fire_results变量

您可以在内容模板中使用fire_results变量,用于在告警通知中引用日志内容。

  • 告警监控规则

    日志服务会根据您设置的监控规则,生成告警消息。

    image

  • 告警消息

    触发告警后,将生成如下告警消息。包括状态码、机器IP地址,发生的错误数。

    {
        "fire_results": [
            { "status": "401", "ip": "127.0.0.1", "cnt": "3" },
            { "status": "400", "ip": "127.0.0.1", "cnt": "7" },
            { "status": "501", "ip": "127.0.0.1", "cnt": "4" },
            { "status": "404", "ip": "127.0.0.1", "cnt": "4" },
            { "status": "402", "ip": "127.0.0.1", "cnt": "6" },
            { "status": "403", "ip": "127.0.0.1", "cnt": "8" }
        ]
    }
  • 内容模板

    您可以在内容模板中添加fire_results变量,则告警通知中将引用您所设置的日志内容。如何设置内容模板,请参见创建内容模板

    内容模板

使用results变量

您可以在内容模板中使用results变量,用于在告警通知中引用日志内容。

  • 告警监控规则

    日志服务会根据您设置的监控规则,生成告警消息。

    image

  • 告警消息

    触发告警后,将生成如下告警消息。包括状态码、机器IP地址,发生的错误数。

    说明

    如果一个告警监控规则中有多个查询统计,那么results数组将包含多项,每项对应一个查询统计。

    {
        "results": [{
            "store_type": "log",
            "region": "cn-hangzhou",
            "project": "test-alert",
            "store": "nginx-access-log",
            "query": "status >= 400 | select status, __source__ as ip, count(*) as cnt group by status, ip",
            "start_time": 1640006894,
            "end_time": 1640007014,
            "dashboard_id": "",
            "raw_results": [
                { "status": "401", "ip": "127.0.0.1", "cnt": "3" },
                { "status": "400", "ip": "127.0.0.1", "cnt": "7" },
                { "status": "501", "ip": "127.0.0.1", "cnt": "4" },
                { "status": "404", "ip": "127.0.0.1", "cnt": "4" },
                { "status": "402", "ip": "127.0.0.1", "cnt": "6" },
                { "status": "403", "ip": "127.0.0.1", "cnt": "8" }
            ],
            "raw_result_count": 6,
            "fire_result": {
                "status": "401",
                "ip": "127.0.0.1",
                "cnt": "3"
            },
            "has_sql": true,
            "truncated": false,
            "role_arn": ""
        }]
    }
  • 内容模板

    您可以在内容模板中添加results变量,则告警通知中将引用您所设置的日志内容。如何设置内容模板,请参见创建内容模板

    内容模板

模板变量说明

当您引用的变量内容为JSON格式(例如{{ alert.results[0].raw_results | to_json }})时,告警通知中的内容将以JSON字符串形式展示。为了展示效果更友好,您可以在内容模板中使用循环方式,即一行行展示通知内容。更多信息,请参见内容模板语法(新版)。示例如下:

{%- for result in alert.fire_results %}
- status: {{ result.status }}, count: {{ result.cnt }}
{%- endfor %}

日志服务还支持通过内置函数格式化通知内容。更多信息,请参见内容模板语法(新版)内置模板函数