背景介紹
Grafana是監控運維場景下常用的開源系統,它豐富易用的可視化界面極大的方便了開發運維的工作。但是另一方面,Grafana自帶的告警功能較為簡單,不能很好的滿足日常需求。新版SLS告警提供了豐富易用的告警功能,能夠很好的補足Grafana的告警功能。
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提供的告警功能,從而更為高效的瞭解以及處理服務出現的問題。