背景介绍
Grafana是监控运维场景下常用的开源系统,它丰富易用的可视化界面极大的方便了开发运维的工作。但是另一方面,Grafana自带的告警功能较为简单,不能很好的满足日常需求。新版SLS告警提供了丰富易用的告警功能,能够很好的补足Grafana的告警功能,并且支持通过包括短信、电话、微信、钉钉、邮箱在内的10多种通知渠道发送给用户。
Grafana接入SLS
要将Grafana的告警消息接入SLS,主要分为两个步骤:在SLS中创建开放告警应用;将Grafana的通知渠道配置为SLS。创建开放告警应用的具体步骤,可以参考文章SLS开放告警简介。下面介绍下如何将Grafana的告警消息接入到SLS中。
获取回调地址
在创建开放告警应用之后,通过点击接口按钮,打开如下图所示的回调地址查看窗口。
回调地址由两部分构成:域名部分和子路径部分。其中域名部分属于SLS的接入地址,和地域相关,每个地域都有各自不同的接入地址;子路径部分包括用于发送消息的Access Key Id和开放告警应用。如下所示为一个完整的SLS回调地址:
cn-heyuan-intranet.log.aliyuncs.com/event/webhook/RAMAK_{ACCESS_KEY_ID}/a123_asdad
其中"cn-heyuan-intranet.log.aliyuncs.com"为域名部分,属于SLS通用的接入地址(endpoint);event/webhook/RAMAK_{ACCESS_KEY_ID}/a123_asdad 则为子路径部分。需要注意的是,用户需要将子路径部分中的{ACCESS_KEY_ID}替换为具体阿里云RAM账户的Access Key Id,并且将权限策略AliyunLogOpenEventWrite赋予该账户;a123_asdad则为该开放告警应用的id,用于唯一区别不同的开放告警应用。
创建通知渠道
Grafana通过通知渠道(Notification Channel)向外部发送告警消息,所以只需要将SLS开放告警应用配置为Grafana新的通知渠道,即可接入到SLS。
选择渠道类型
Grafana自身支持十几种内置的通知渠道,接入SLS开放告警使用的是webhook渠道。
填入回调地址
在Url一栏中填入SLS开放告警提供的回调地址。如果是内网用户,可以使用局域网/VPC接口地址;如果是外网用户,则需要填入公网接口地址。此时需要注意替换占位符{ACCESS_KEY_ID},以及回调地址要以"http://"开头。
配置可选参数
用户需要配置可选参数Http Method为POST,其余两项留空即可。
告警配置
用户如果想要快捷简便的将Grafana告警消息全部接入到SLS中,可以将SLS开放告警配置为默认通知渠道。这样Grafana会自动将SLS开放告警通知渠道加入到现有的告警规则中去。
另外请不要勾选"Disable Resolve Message",这样Grafana会发送告警恢复消息,从而使用户更好的了解当前告警状态。
映射规则
Grafana告警消息内容示例如下,SLS开放告警会通过内置的规则,将该消息转为SLS内部的告警消息。
{ "dashboardId": 1, "evalMatches": [ { "value": 173.14285714285714, "metric": "go_gc_duration_seconds_count{instance=\"localhost: 9090\", job=\"prometheus\"}", "tags": { "__name__": "go_gc_duration_seconds_count", "instance": "localhost:9090", "job": "prometheus" } } ], "message": "sadfasdf", "orgId": 1, "panelId": 4, "ruleId": 2, "ruleName": "fuxasdfasd", "ruleUrl": "http://localhost:3000/d/biSKHC8Mz/new-dashboard-copy?tab=alert&viewPanel=4&orgId=1", "state": "alerting", "tags": { "severity" : "crit", "xasdfasdf": "mveonasdf" }, "title": "[Alerting] fuxasdfasd" }
告警严重程度
如果在Grafana告警消息的tags中包含severity字段,开放告警会将该字段映射为告警消息的严重程度。目前开放告警支持多种告警消息严重程度,用户可以根据自己的需要进行配置。如果没有配置,严重程度将默认配置为中等。映射关系如下表所示。
告警严重度 |
关键字 |
严重 |
严重、紧急、critical、disaster、blocker、immediate、fatal、crit、sev0、'sev 0'、p0 |
高 |
高、高级、E、H、high、err、error、urgent、major、'sev 1'、sev1、p1 |
中 |
中、中级、告警、M、medium、unknown、warn、warning、'not classified'、average、normal、'sev 2'、sev2、p2 |
低 |
低、低级、L、I、info、information、suggestion、minor、informational、'sev 3'、sev3、p3 |
报告 |
报告、通知、report、dbg、debug、verbose、trivial、page、ok、'sev 4'、sev4、p4 |
字段映射
SLS开放告警会通过内置规则,将Grafana消息转为SLS内置告警消息。例如将上面的Grafana消息,转为如下所示的告警消息:
{ "aliuid": "{开放告警应用所属的阿里云账号ID}", "alert_instance_id": "{自动生成}", "project": "{告警中心所属的Project}", "region": "{告警中心所属的地域}", "alert_id": "2", "alert_type": "sls_pub", "alert_name": "sadfasdf", "next_eval_interval": 0, "alert_time": 1603859020, "fire_time": 1603859020, "resolve_time": 0, "status": "firing", "labels": { "xasdfasdf": "mveonasdf" }, "annotations": { "__pub_alert_region__": "{发送告警消息的网络接口对应的地域}", "__config_app__": "sls_pub_alert", "__pub_alert_service__": "{开放告警服务ID}", "__pub_alert_app__": "{开放告警应用ID}", "__pub_alert_protocol__": "grafana", "severity" : "crit", "orgId": "1", "dashboardId": "1", "panelId": "4", "ruleUrl": "http://localhost:3000/d/biSKHC8Mz/new-dashboard-copy?tab=alert&viewPanel=4&orgId=1", "imageUrl": "", "desc": "sadfasdf", "title": "[Alerting] fuxasdfasd" }, "severity": 10, "policy": { "alert_policy_id": "{开放告警应用中配置的告警策略}", "action_policy_id": "{开放告警应用中配置的行动策略}", "repeat_interval": "{开放告警应用中配置的重复等待时间}" }, "drill_down_query": "http://localhost:3000/d/biSKHC8Mz/new-dashboard-copy?tab=alert&viewPanel=4&orgId=1", "results": [{ "query": "go_gc_duration_seconds_count{instance=\"localhost: 9090\", job=\"prometheus\"}", "fire_result": { "__name__": "go_gc_duration_seconds_count", "instance": "localhost:9090", "job": "prometheus", "value": "173.142", } }] }
具体的转换规则,请参考官方文档接入Grafana告警。
总结
通过将Grafana告警消息接入到SLS,可以不再受限于Grafana提供的告警功能,从而更为高效的了解以及处理服务出现的问题。