背景介紹
DataDog是一個用于雲上應用的監控和分析平台,可以自動采集和分析日志、名額和鍊路追蹤等資料,還可以用于基礎設施和雲服務的事件監控,對于伺服器、應用程式以及采集到的各種資料提供了很好的可觀測效果。但是DadaDog對于告警通知的管理功能比較缺乏,例如不支援短信、語音等通知管道,也不支援使用者組和值班組管理,還不具備動态發送告警通知的功能,是以不能覆寫使用者的部分使用場景。SLS的告警功能很好地彌補了DataDog的這些不足之處,通過SLS提供的開放告警功能,使用者也可以将DataDog的告警消息接入到SLS進行統一管理。本文将介紹如何快速建立DataDog的告警并将其告警消息接入到SLS中。
快速建立DataDog告警
在建立告警之前,首先需要為DataDog添加資料來源,常見的兩種添加資料來源的方式是通過Agent上報資料以及通過Integrations內建資料。Agent常用于上報基礎設施(例如主機、叢集和IoT裝置)的日志和名額等資料,Integrations常用于內建雲上服務或者其他資料平台(例如AWS CloudTrail和Splunk)的資料。本文的示例采用的資料來源為在主機上安裝Agent。如下圖所示為在兩台伺服器上安裝成功了Agent後,在DataDog的基礎設施清單裡檢視到的結果,安裝方法參考
Agent Usage。

添加了資料來源以後,就可以利用這些資料建立一個告警,用來監控你的設施或者服務。DataDog使用Monitor來管理告警,一條告警規則對應一個Monitor。點選Monitors->New Monitor,然後選擇螢幕類型就可以建立一個告警。如下圖所示為檢查主機是否向DataDog發送報告的螢幕的配置界面,選擇想要想要監控的主機,配置對應的參數,最後選擇好通知管道,對應的通知管道就可以在DataDog檢查不到主機發送的報告的時候收到告警消息了。

接入SLS開放告警
SLS的告警中心提供了開放告警的功能,可以将第三方的告警消息接入進來,目前已經支援了很多常見的告警監控平台,未來開放告警将提供讓使用者自己開發然後将告警消息接入SLS的能力。在SLS的開放告警中接入DataDog的告警資料分為以下幾個步驟。
告警基礎配置
告警基礎主要是配置使用者管理和通知管理,使用者管理決定了您想指定誰接收到告警的消息,通知管理決定了消息通知的行為。通知管理主要包括内容模闆和行動政策。内容模闆決定了使用者最終最終收到的告警内容,該功能近期會釋出一個新版本,新版本支援使用者在内容模闆中使用處理函數、加入條件控制等強大的功能。行動政策可以參考
建立行動政策,行動政策決定了在什麼情況下,發送什麼樣的内容到您指定的通知管道,使用者可以在行動政策中決定在某種條件下進行對應的通知行動,如下圖所示。

擷取開放告警應用接口
在告警中心選擇開放告警,建立一個開放告警服務。選擇建立好的開放告警服務,添加一個開放告警應用,配置界面中的協定需要選擇DataDog,行動政策選擇上一步驟中配置好政策即可,其他的選項可以選擇預設的配置。最後在建立的開放告警應用操作欄中點選接口,擷取接口資訊。需要注意的是擷取的接口位址中,{ACCESS_KEY_ID}需要替換成使用者自己的通路ID,具體内容可以參考
配置開放告警對外接口DataDog配置
DataDog的配置主要是配置Webhook內建,并将其設定為對應的螢幕的通知管道,具體包括以下步驟:
- 在導航欄中,選 Integrations。
- 在Integrations頁簽中,找到webhooks,單擊Install,安裝完成後,單擊Configure。
- 在Webhooks區域,單擊New,在New Webhook區域,配置如下參數,然後單擊Save。

其中Name為webhook的名稱,URL為告警消息的接收端,此處配置為上一步驟擷取的開放接口資訊(完整URL),Payload為使用者自定義告警消息的内容,DataDog提供了幾十種告警消息變量,使用者可以在Payload進行使用,具體可以參考
DataDog官方文檔,在配置Payload時,使用者需要按照SLS的要求進行,具體可以參考
接入DataDog告警- 編輯目标Monitor,在配置通知管道的步驟中,選擇上一步配置的Webhook,最後進行儲存。
告警資料映射
使用者按照SLS的要求配置好了DataDog的告警消息後,SLS将收到如下示例消息
{
"alert_instance_id": "123456",
"alert_id": "123456",
"alert_name": "STOP on host:abcdefgh",
"alert_time": "1628647425",
"fire_time": "1628647425",
"resolve_time": "1627561306",
"status": "Triggered",
"labels": {
"tags": "ali,host:abcdefgh,monitor"
},
"annotations": {
"title": "[P1] [Triggered on {host:abcdefgh}] STOP",
"event_msg": "%%%\nwarning\nhost stop\n @webhook-webhook-test-all\n\nThe monitor was last triggered at Thu Jul 29 2021 12:21:45 UTC.\n\n- - -\n\n[[Monitor Status](https://app.datadoghq.com/monitors/1234?to_ts=1234&group=host%3Aabcdefgh&from_ts=1627560405000)] \u00b7 [[Edit Monitor](https://app.datadoghq.com/monitors#1234/edit)] \u00b7 [[View abcdefgh](https://app.datadoghq.com/infrastructure?filter=abcdefgh)] \u00b7 [[Show Processes](https://app.datadoghq.com/process?sort=memory%2CASC&to_ts=1234&tags=host%abcdefgh&from_ts=1627560405000&live=false&showSummaryGraphs=true)]\n%%%",
"text_only_msg": "\nwarning\nhost stop\n @webhook-webhook-test-all\n\nMetric Graph:
https://app.datadoghq.com/monitors/1234?to_ts=1627561365000&group=host%abcdefgh&from_ts=1627557705000\u00b7 Monitor Status:
https://app.datadoghq.com/monitors/1234?group=host%abcdefgh\u00b7 Edit Monitor:
https://app.datadoghq.com/monitors#42655965/edit\u00b7 Event URL:
https://app.datadoghq.com/event/event?id=1234\u00b7 View abcdefgh:
https://app.datadoghq.com/infrastructure?filter=abcdefgh\u00b7 Show Processes:
https://app.datadoghq.com/process?sort=memory%2CASC&to_ts=None&tags=host%abcdefgh&from_ts=None&live=false&showSummaryGraphs=true","alert_metric": "null",
"alert_query": "\"datadog.agent.up\".over(\"host:abcdefgh\").by(\"host\").last(2).count_by_status()",
"alert_scope": "host:abcdefgh",
"alert_status": "",
"alert_type": "error",
"email": "",
"event_type": "service_check",
"hostname": "abcdefgh",
"logs_sample": "null",
"metric_namespace": "",
"priority": "normal",
"user": "null",
"username": "",
"__aggreg_key__": "a1b2c3",
"__alert_cycle_key__": "123456789",
"__incident_attachments__": "null",
"__incident_commander__": "null",
"__incident_customer_impact__": "null",
"__incident_fildes__": "null",
"__incident_public_id__": "null",
"__incident_title": "null",
"__incident_url__": "null",
"__org_id__": "123",
"__org_name__": "ali",
"__security_rule_name__": "null",
"__security_signal_id__": "null",
"__security_signal_severity__": "null",
"__security_signal_title__": "null",
"__security_signal_msg__": "null",
"__security_signal_attributes__": "null",
"__security_rule_id__": "null",
"__security_rule_query__": "$SECURITY_RULE_QUERY",
"__security_rule_group_by_fields__": "null",
"__security_rule_type__": "null",
"__link_snapshot_url__": "null",
"__synthetics_test_name__": "null",
"__synthetics_first_failing_step_name__": "null"
"severity": "P1",
"drill_down_query": "https://app.datadoghq.com/event/event?id=123456"
}
上述消息與SLS的标準告警消息基本一緻,SLS隻需要去掉其中的空字段和無效字段,然後加入DataDog告警消息不具備的一些字段,最後在labels和annotations字段中再加入一些資訊,就可以将該消息轉為SLS的标準告警消息。
總結
将DataDog的告警消息接入SLS後,極大地拓展了告警消息的後續處理,不止豐富了通知管理部分的功能,還對後續告警資料的應用提供了平台,進而更全面地保證了系統服務的穩定性。