本文檔介紹如何在ECS服務器上通過腳本,將異常記錄主動推送至運維事件中心。
在服務器上主動推送異常事件是非常常見的場景,本文將以一段包含關鍵指標/異常信息的日志,通過shell/python腳本進行數據推送為例,在運維事件中心里以標準集成的方式完成事件生成及流轉。
獲取異常信息
本文檔以推送某段日志為例,實際運行中,用戶可通過shell/python自定義異常場景,僅需把異常場景的關鍵信息推送過來即可。
示例日志內容如下,并將日志保存為test.log。
{"summary":"Cpu_util at 85.16% on machine X.X.X.X","application":"xxx/yyy","name":"Cpu 使用超額預警","details":{"freeSpace":"1%","pingTime":"1500ms","loadAvg":"0.75"},"source":"X.X.X.X","priority":"P4","region":"shanghai","class":"Load","timestamp":"2021-07-17 T08:42:58.315+0000","group":"線上","tags":"{}"}
為了便于說明,上述日志內容的字段已按照標準集成數據格式進行打印。
添加集成并進行異常推送
添加集成
1. 在運維事件中心控制臺獲取標準集成的密鑰。
2. 將復制的鏈接替換成下述腳本里的URL
shell腳本:
#!/bin/bash
json=$(tail -n1 test.log)
curl -i -X POST \
'
URL
' \
-H 'Content-type':'application/json' \
-d "$json"
請將上述腳本中的URL替換為控制臺獲取的推送URL地址。
python腳本:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
import json
import io
filename = 'test.log'
with io.open(filename,encoding='utf-8')as f:
lines = f.readlines()
last_line = lines[-1]
kv = json.loads(last_line)
headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url = "
URL
"
s = json.dumps(kv)
print(requests.post(api_url,data=s,headers=headers).content)
請將上述腳本中的URL替換為控制臺獲取的推送URL地址。
3. 執行腳本或將腳本加入crontab中進行定期執行。腳本執行時將會把test.log的日志推送到運維事件中心。
配置事件流轉規則
腳本執行后,在運維事件中心控制臺的集成配置>標準集成里,可以看到此集成已是“已接收告警”狀態,并且可查看最近一次告警記錄。
按如下步驟進行流轉規則的配置。
1. 進入流轉規則>新增規則,填寫規則名稱,選擇監控源為“標準集成”,選擇對應的key、過濾規則、對應的value值,并關聯具體的服務。
2. 按照實際需求,選擇觸發為事件或報警。本示例選擇為事件。關于流轉規則的更詳細介紹,請查看如何配置流轉規則。
3. 按照實際需求,為事件配置對應的服務組及通知訂閱。本示例將關聯1個服務組并關聯對應的通知訂閱
4. 再次執行腳本進行數據推送。
流轉規則僅對增量推送的告警生效,所以此處需再次執行腳本進行數據推送。
5. 在運維事件中心控制臺的事件中心>事件,即可看到最新推送告警所生成的事件了。同時分派對象會接收到對應的短信、郵件通知。
其他
以上為在ECS服務上,如何以腳本的形式將服務器探測到的異常事件進行推送,其中腳本語言可以替換為其他語言(如集成在程序代碼里)、原始記錄不一定是日志(可以替換為其他方式所采集到的異常)、異常內容可以充分自定義(滿足標準格式為前提)。