Prometheus告警規則增刪改自動化
前言:
隨着容器技術的發展,zabbix監控方式與k8s的結合不完善,導致不得不放棄zabbix,而新的監控工具prometheus的使用就越來越多了。但是經過初步使用,發現prometheus過於原始,很多設置都要通過配置文件手動添加修改,本篇文章介紹我是如何解決prometheus的“原始”。
環境:
語言:python2.7
web框架:flask
簡介:
Prometheus的告警設置是通過文件設置,在prometheus.yml配置文件中設置rule_files:
- /etc/prometheus/rules.d/*.yml
將所有告警規則文件放在/etc/prometheus/rules.d/目錄下,所以我們控制告警的方式定為在此目錄下寫和修改文件即可。
1、添加告警規則
頁面風格是仿照着prometheus的界面寫的,有些顏色和位置大小不完全相同(調前端讓人頭疼)。
通過輸入告警名稱,表達式,持續時間,和描述來創建告警規則,模板是我先定死的,input框設置了disabled屬性,告警內容通過報警腳本進行過濾。
主要技術:
此頁面應用更多的都是基礎的表單提交,沒有什么難度,唯一添加的一些加強頁面效果的操作是對input和select事件的處理,input告警內容的同時,右側告警規則預覽可以同時顯示輸入后的效果,如上圖。
Js代碼:
$("#rules_name").bind('input propertychange',function () {
var content = $("#rules_name").val();
var html = "- name: " + content + '_rules';
$("#name_rules").html(html);
var alerthtml = " - alert: " + content;
$("#alert_rules").html(alerthtml);
});
將input綁定了propertychange事件(rules_name是input標簽的id),輸入后input的value產生變化,同時刷新name_rules對應的id內容進行刷新,這樣就能實時查看到輸入內容后對應的配置文件。
最后是表單提交,后台將提交的信息寫入文件中:
[root@localhost rules.d]# cat service_100000.yml
#{'name': 'service_100000_rule', 'alert': 'service_100000', 'expr': 'service_count>100000', '_for': '30s', 'level': 'disaster', 'summary': '告警主機和端口{{ $labels.instance }} 告警值:{{ $value }}', 'description': '業務量大於100000了,必須要告警了'}
groups:
- name: service_100000_rule
rules:
- alert: service_100000
expr: service_count>100000
for: 30s
labels:
level: "disaster"
service: "local-234"
annotations:
summary: "告警主機和端口{{ $labels.instance }} 告警值:{{ $value }}"
description: "業務量大於100000了,必須要告警了"
多了一個service_100000.yml文件,內容如上,第一行內容是用來記錄參數的,用於之后的修改參數使用。
刷新prometheus配置之后發現,告警已經加載進來了
2、修改告警
修改告警規則應該是我們日常最多用到的,經常要修改閾值,首先,在選擇框中會加載所有已經設置的rules規則,然后我們選中后(如果告警規則多之后,如何找到我們要修改的規則又是個問題,我是在select的基礎上添加一個輸入框,可以根據輸入內容快速進行搜索,查找或者選擇我們要修改的規則,如上圖,輸入ser就能彈出我們要找的規則),觸發select事件:
$("#list_select_rules").change(function(){
var content=$("#list_select_rules").val();
jQuery.ajax({
type: "POST",
url: "/prometheus/getRulesDetail",
dataType: 'json',
data : {
"name": content
},
async: false,
error: function () {
alert("操作失敗,請稍等片刻重新嘗試,如仍有問題請聯系管理員......");
return false;
},
success : function(result){
//{'name': '', 'alert': '', 'expr': '', '_for': '', 'level': '', 'summary': '', 'description': ''}
$("#name_rules").html("- name: " + result.alert + '_rules');
$("#alert_rules").html(" - alert: " + result.alert);
$("#rules_name").val(result.alert);
$("#expr_rules").html(" expr: " + result.expr);
$("#rules_expr").val(result.expr);
$("#time_rules").html(" for: " + result._for);
$("#rules_time").val(result._for);
$("#desc_rules").html(" level: " + result.description);
$("#rules_desc").val(result.description);
$("#select_rules").html(" level: " + result.level);
var add = $('#rules_select').val(result.level);
add.attr('selected',true);
}
})
});
選中select標簽內容后觸發js事件,將選中內容發送至后台,獲取對應的告警規則信息(就是告警規則的第一行被注掉的信息),然后將input和右側預覽對應位置進行刷新,可以實現選中規則后,所有信息直接展示在前端,然后進行提交,后台進行文件修改,進而實現告警規則的修改。
3、刪除
刪除功能比較簡單,和update一樣,界面加載時,通過js將所有告警規則加載至select標簽中,然后設置select事件,如上圖,我選擇了service_100000這個規則,后側的告警預覽就把這個告警規則信息展示出來了,js代碼同上邊的update事件代碼。然后點擊刪除鍵,將選擇的規則傳入后台,直接刪除文件即可。
至此,prometheus的告警規則的增刪改就完成了。之后我還會慢慢優化,希望能實現像zabbix一樣的效果。
代碼位置:https://github.com/1182640071/AddRulesWeb
我的prometheus管理平台地址: https://blog.csdn.net/www199202/article/details/90728824




