背景介紹
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提供的告警功能,進而更為高效的了解以及處理服務出現的問題。