前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Prometheus的监控告警系统的Python开发

基于Prometheus的监控告警系统的Python开发

作者头像
保持热爱奔赴山海
修改2024-03-18 18:05:51
7220
修改2024-03-18 18:05:51
举报
文章被收录于专栏:饮水机管理员饮水机管理员

周末外面太冷,在家搞了下Prometheus的白屏化运维DEMO。目前只是把后端简单的几个接口搞出来,校验之类的还没加。。。

这里先记录下。 后续等后端完成后,把前端也尝试写一下。

基于Prometheus的监控告警系统的Python开发_告警系统
基于Prometheus的监控告警系统的Python开发_告警系统
基于Prometheus的监控告警系统的Python开发_告警系统_02
基于Prometheus的监控告警系统的Python开发_告警系统_02
基于Prometheus的监控告警系统的Python开发_告警系统_03
基于Prometheus的监控告警系统的Python开发_告警系统_03
基于Prometheus的监控告警系统的Python开发_告警系统_04
基于Prometheus的监控告警系统的Python开发_告警系统_04

重点:

1、prometheus的target,是存在数据库里面的,只要符合一定的格式即可。 prometheus很早之前就支持了http接口方式动态target发现机制。格式类似这样:

基于Prometheus的监控告警系统的Python开发_告警系统_05
基于Prometheus的监控告警系统的Python开发_告警系统_05

prometheus的配置文件,需要改动下,加些relabel,如下:

代码语言:javascript
复制
$ cat /usr/local/prometheus/prometheus.yml
global:
  scrape_interval: 15s
  evaluation_interval: 15s
  scrape_timeout: 15s

alerting:
  alertmanagers:
    - static_configs:
        - targets:
           - 192.168.31.181:9093
rule_files:
   - "rules/*.yml"
#   - "rules/*.yaml"

scrape_configs:
  - job_name: "alertcenter_api"
    metrics_path: "/metrics"
    http_sd_configs:
      - url: "http://192.168.31.79:8000/api/prom/prom_targets"
        refresh_interval: 30s
    relabel_configs:
    - source_labels:
      - "__meta_datacenter"
      separator: "-"
      regex: "(.*)"
      target_label: "datacenter"
      action: replace
      replacement: "$1"
    - source_labels:
      - "__meta_prometheus_job"
      separator: "-"
      regex: "(.*)"
      target_label: "job"
    - source_labels:
      - "__meta_role"
      separator: "-"
      regex: "(.*)"
      target_label: "role"
    - source_labels:
      - "__meta_cluster"
      separator: "-"
      regex: "(.*)"
      target_label: "cluster"
    - source_labels:
      - "__meta_instance"
      separator: "-"
      regex: "(.*)"
      target_label: "instance"
    - source_labels:
      - "__address__"
      separator: "-"
      regex: "(.*)"
      target_label: "endpoint"

2、告警的rules,也是存在数据库里面的,根据库的数据,渲染成json,然后转成yaml格式的文件,apply到prometheus里面生效。

基于Prometheus的监控告警系统的Python开发_告警系统_06
基于Prometheus的监控告警系统的Python开发_告警系统_06

3、alertmanager告警。配置个webhook。大致这样:

代码语言:javascript
复制
$ cat /usr/local/alertmanager-0.23.0.linux-amd64/alertmanager.yml
global: 
  resolve_timeout: 30s 

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 30s
  repeat_interval: 30s
  receiver: 'webhook1'

  routes:
  - match:
      job: ^.*(数据库|mysql|MySQL).*$
    receiver: dba
    group_wait: 10s
    group_interval: 30s
    repeat_interval: 30s
  - match_re:
      job: ^.*(数据库|mysql|MySQL).*$
    group_wait: 30s
    group_interval: 30s
    repeat_interval: 30s
    receiver: dba

receivers:
- name: webhook1
  webhook_configs:
  - send_resolved: true
    url: http://192.168.31.79:8000/api/prom/test
- name: dba
  webhook_configs:
  - send_resolved: true
    url: http://192.168.31.79:8000/api/prom/test

post的接口这里做了很多事情,大致步骤:1、接收到alertmanager推送的消息(目前看是分为2类:firing告警、resolved恢复)。2、调用selenium访问prometheus的web ui,进行截图。3、截图上传到腾讯云oss,生成一个固定的公开访问链接。4、发送钉钉告警消息,带上文字内容和截图。类似如下:

告警这块还要做的事情很多,例如:

1、critical的告警,需要有个确认按钮,如果没人确认,则持续N次后,会触发告警升级(一线->leader->总监)

2、告警静默的时间段(有些job,在夜里跑批可能负载很高,持续告警也没任何意义)

3、告警的合并

4、自定义告警接收人

5、可接入非alertmanager推送的告警,例如shell脚本运行异常触发告警

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-12-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档