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

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

Prometheus告警规则增删改自动化的更多相关文章

  1. prometheus 告警规则

    GitHub网址1 https://github.com/samber/awesome-prometheus-alerts 网址2 https://awesome-prometheus-alerts. ...

  2. prometheus告警规则模板:MySQL,nginx,node

    rules_up.yml groups: - name: up rules: - alert: mysql expr: up{instance="db1",job="my ...

  3. Prometheus告警模型分析

    Prometheus作为时下最为流行的开源监控系统,其庞大的生态体系:包括针对各种传统应用的Exporter,完整的二次开发工具链,与Kubernetes等主流平台的高度亲和以及由此带来的强大的自发现 ...

  4. 02 . Prometheus告警处理

    Prometheus告警简介 告警能力在Prometheus的架构中被划分成两个独立的部分.如下所示,通过在Prometheus中定义AlertRule(告警规则),Prometheus会周期性的对告 ...

  5. Prometheus告警处理

    在Prometheus Server中定义告警规则以及产生告警,Alertmanager组件则用于处理这些由Prometheus产生的告警.Alertmanager即Prometheus体系中告警的统 ...

  6. Prometheus监控学习笔记之Prometheus 2.0 告警规则介绍

    0x00 变化 Prometheus 2.0 已经发布一段时间了,从今天开始我将分几篇文章为大家介绍其中的一些变化. 此篇文章主要介绍 2.0 的告警规则声明的新写法. 从 1.x 到 2.0 规则声 ...

  7. Prometheus 编写告警规则案例

    Prometheus 编写告警规则案例 注:确保alertmanager配置完毕! 1.创建编辑文件:vim /usr/local/prometheus/rules/node.yml # groups ...

  8. prometheus linux系统告警规则 实例

    #prometheus linux系统告警规则 实例 #根据实际情况修改参数 #rules.linux.yml groups: - name: linux rules: - alert: Node-D ...

  9. 实用干货丨如何使用Prometheus配置自定义告警规则

    前 言 Prometheus是一个用于监控和告警的开源系统.一开始由Soundcloud开发,后来在2016年,它迁移到CNCF并且称为Kubernetes之后最流行的项目之一.从整个Linux服务器 ...

随机推荐

  1. 快速精通Mac效率神器Alfred以及常用workflow

    概述 Alfred基础在上一篇 大纲 名称 作用 类别 出处 修改日期 Github 更便捷地使用Github 开发编程 Github 2017-01-28 Github Search Github搜 ...

  2. JAVA基础之ServletContext应用

    创建一个登陆的界面,并且统计次数! 导入jar包; 1. driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/java0603?u ...

  3. python相关软件安装

    一. python 3 安装 Python官网 在官网下载对应系统的安装包 安装步骤 注意:有的时候安装完后会出现"Disable path length limit"的按钮,如果 ...

  4. 听说你知道什么是锁 --JAVA

    I.java中的锁 1.1 什么是锁 ​ 在计算机科学中,锁(lock)与互斥(mutex)是一种同步机制,用于在许多线程执行时对资源的限制. ​ 锁通常需要硬件支持才可以有效实施.这种支持通常采用一 ...

  5. Android笔记(六十五) android中的动画——属性动画(propertyanimation)

    补间动画只能定义起始和结束两个帧在“透明度”.“旋转”.“倾斜”.“位移”4个方面的变化,逐帧动画也只能是播放多个图片,无法满足我们日常复杂的动画需求,所以谷歌在3.0开始,推出了属性动画(prope ...

  6. atoi()和itoa()函数详解以及C语言实现

    atoi()函数 atoi()原型:  int atoi(const char *str ); 函数功能:把字符串转换成整型数. 参数str:要进行转换的字符串 返回值:每个函数返回 int 值,此值 ...

  7. Python_Day2_共享你的代码

    一.编写简单的函数,保存一下. # coding=utf-8 """ 这是“nester.py”模块,提供了一个名为print_lol的函数,这个函数的作用是打印列表,其 ...

  8. MySQL线程状态详解

    前言: 我们常用 show processlist 或 show full processlist 查看数据库连接状态,其中比较关注的是 State 列,此列表示该连接此刻所在的状态.那么你真的了解不 ...

  9. 在DEV c++ 中如何设置默认的代码模板

    /*菜单,工具=>编辑器选项(弹出对话框)=>代码(属性页)=>缺省源(属性页),写入一些代码确定即可(勾选“向项目初始源文件插入代码”).版本是5.11,中文版 */ #inclu ...

  10. redis问题解决 Caused by: io.lettuce.core.RedisException: io.lettuce.core.RedisConnectionException: DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specifie

    1找到redis的配置文件 redis.conf vim redis.conf 修改 protected-mode  yes 改为 protected-mode no 注释掉 #bin 127.0.0 ...