基於django的alertmanager釘釘告警及告警記錄
寫了個alertmanager的釘釘告警接口,圖貼不過來,可以去看readme
github: https://github.com/huangwjwork/dingding_robot_alertmanager
基於django實現的alertmanager釘釘告警消息推送,同時記錄推送的告警內容,包括告警名,實例,時間,次數,接收人等等
告警消息記錄在mysql中,通過grafana查詢mysql顯示不同規則下TOP10的告警,當前未解除告警,以及最近100條告警記錄
告警中只存儲了通用字段,自定義的labels如果需要保存請自行修改api/modules.py
單receiver可對應多個釘釘機器人,用來解決釘釘API每分鐘請求限制20次
目前還處於學習階段,實現的比較粗糙,也沒有做異常處理,有問題請在issue中指出
開發環境
python 3.7.3
django 2.1.8
mysql 5.7.27
alertmanager v0.18.0
prometheus v2.11.2
結構說明
dingding_robot_alertmanager/
├── api
│ ├── admin.py # admin
│ ├── apps.py
│ ├── dingtalk.py #釘釘函數
│ ├── __init__.py
│ ├── models.py # 數據庫初始化
│ ├── templates
│ ├── test # 測試內容,無意義
│ │ ├── 000alert.py
│ │ ├── alert-msg.json # alert json
│ │ ├── post_firing.py # alertmanager post firing
│ │ ├── post_resolved.py # alertmanager post resolved
│ │ ├── test_prometheus.yaml # k8s配置文件,prometheus alertmanager 及config
│ │ └── time_reverse.py # 時間轉換,無意義
│ ├── tests.py
│ └── views.py # api邏輯
├── dingding_robot_alertmanager
│ ├── __init__.py
│ ├── settings.py # django配置文件
│ ├── urls.py
│ └── wsgi.py
├── grafana-dashboard # grafana dashboard
│ └── alert-1566911356524.json
├── images # 圖片
│ ├── admin-index.bmp
│ ├── admin-receivers.bmp
│ ├── alert.bmp
│ └── grafana.bmp
├── manage.py
├── README.md
└── requirements.txt # pip依賴
部署
安裝Python3,並安裝依賴包
pip3 install -r requirements.txt
mysql創建數據庫
create database prometheus_alert default charset utf8;
mysql建表
python3 manage.py makemigrations api
python manage.py migrate
創建django admin後臺管理員賬號
python3 manage.py createsuperuser
啓動應用
python3 manage.py runserver 0.0.0.0:8000
django admin後臺 http://localhost:8000/admin
在後臺receivers中添加釘釘機器人,同一receiver可以添加多個webhook,用receiver_num進行區分和標記
alertmanager中添加receiver和route
example.yml
global:
templates:
- '/etc/alertmanager/template/*.tmpl'
route:
group_by: ['alertname','job']
group_wait: 30s
group_interval: 15s
repeat_interval: 1m
receiver: 'ops'
routes:
- match:
job: 'prometheus'
receiver: 'dev'
receivers:
- name: 'dev'
webhook_configs:
- send_resolved: true
url: 'http://192.168.0.3:8000'
- name: 'ops'
webhook_configs:
- send_resolved: true
url: 'http://192.168.0.3:8000'
最後,安裝grafana並導入dashboardgrafana-dashboard/alert-1566911356524.json
,添加mysql數據源
rpm -ivh https://dl.grafana.com/oss/release/grafana-6.3.3-1.x86_64.rpm
釘釘告警