Prometheus告警規則增刪改自動化


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告警規則增刪改自動化

 頁面風格是仿照着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告警規則增刪改自動化

           刷新prometheus配置之后發現,告警已經加載進來了

          2、修改告警

                Prometheus告警規則增刪改自動化

         修改告警規則應該是我們日常最多用到的,經常要修改閾值,首先,在選擇框中會加載所有已經設置的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、刪除

                 Prometheus告警規則增刪改自動化

          刪除功能比較簡單,和update一樣,界面加載時,通過js將所有告警規則加載至select標簽中,然后設置select事件,如上圖,我選擇了service_100000這個規則,后側的告警預覽就把這個告警規則信息展示出來了,js代碼同上邊的update事件代碼。然后點擊刪除鍵,將選擇的規則傳入后台,直接刪除文件即可。

             至此,prometheus的告警規則的增刪改就完成了。之后我還會慢慢優化,希望能實現像zabbix一樣的效果。

        代碼位置:https://github.com/1182640071/AddRulesWeb        

      我的prometheus管理平台地址: https://blog.csdn.net/www199202/article/details/90728824

本文轉自http://blog.sina.com.cn/s/blog_16eedc9400102yc8h.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM