Prometheus入门使用(三)

Prometheus告警简介:

Prometheus通过PromQL表达式定义触发告警条件,满足触发条件之后在web页面显示告警,关联Alertmanager之后就可以通过Alertmanager推送警告信息到不同的平台。

Prometheus告警架构图:

Prometheus告警设置:

Prometheus的告警规则通过PromQL表达式定义触发警告条件,满足条件时就会触发告警通知,

1.编辑prometheus.yml文件,设置rules文件路径:
rule_files:# - "first_rules.yml"# - "second_rules.yml"- /usr/local/prometheus/*.yml   #设置prmetheus下的所有rules文件,默认每分钟根据这些规则进行计算,可以通过**evaluation_interval**来覆盖默认的计算周期
2.编辑rules文件设置告警规则:
groups:                             #规则组下面可以设置多条规则
- name: hostStatsAlert               #规则组名称rules:                               - alert: hostCpuUsageAlert  #警告名称expr: (sum(increase(node_cpu_seconds_total[1m]))by(instance)) > 59 #告警PromQL表达式,满足条件触发告警for: 1m                   #评估等待时间,可选参数。用于表示只有当触发条件持续一段时间后才发送告警。在等待期间新产生告警的状态为pendinglabels:                   #自定义标签,允许用户指定要附加到告警上的一组附加标签severity: page           annotations:              #附加信息summary: "Instance {{ $labels.instance }} CPU usgae high"  #汇总警告报告信息description: "{{ $labels.instance }} CPU usage above 85% (current value: {{ $value }})" #详细描述警告信息通过$labels.<labelname>变量可以访问当前告警实例中指定标签的值。$value则可以获取当前PromQL表达式计算的样本值3.重启promtheus server4.手动拉高cpu利用率:
root@dokcer:~# cat /dev/zero>/dev/null

重启Prometheus server之后就可以看到设置的告警规则和当前的告警状态:

由于设置的等待时间为一分钟,所以一分钟之后警告状态才由PENDING转为FIRING状态:

部署AlertManager与Promtheus进行关联:

Alertmanager的配置:

配置 作用
全局配置(global) 用于定义一些全局的公共参数,如全局的SMTP配置,Slack配置等内容
模板(templates) 用于定义告警通知时的模板,如HTML模板,邮件模板等
告警路由(route) 根据标签匹配,确定当前告警应该如何处理
接收人(receivers) 接收人是一个抽象的概念,它可以是一个邮箱也可以是微信,Slack或者Webhook等,接收人一般配合告警路由使用
抑制规则(inhibit_rules) 合理设置抑制规则可以减少垃圾告警的产生
1.下载AlertManger:root@dokcer:~# wget https://github.com/prometheus/alertmanager/releases/download/v0.24.0/alertmanager-0.24.0.linux-amd64.tar.gz2.解压AlertManger执行文件:
root@dokcer:~# tar -xzvf alertmanager-0.24.0.linux-amd64.tar.gz -C /usr/local/3.创建链接文件:
root@dokcer:~# ln -sv /usr/local/alertmanager-0.24.0.linux-amd64/alertmanager /usr/local/bin/alertmanager
'/usr/local/bin/alertmanager' -> '/usr/local/alertmanager-0.24.0.linux-amd64/alertmanager'4.编辑AlertManager.yml文件:
route:                             #路由group_by: ['severity']           #划分的组group_wait: 30sgroup_interval: 5mrepeat_interval: 1hreceiver: 'web.hook'
receivers:- name: 'web.hook'webhook_configs:- url: 'http://127.0.0.1:5001/'
inhibit_rules:- source_match:severity: 'critical'target_match:severity: 'warning'equal: ['severity', 'dev', 'instance']     #当label为severity时,只发生一条报警信息5.启动AlertManager
root@dokcer:~# nohup alertmanager --config-file='/usr/local/alertmanager-0.24.0.linux-amd64/alertmanager.yml' &

访问http://IP:9093就可以在web界面看到告警的内容:

联动Prometheus和AlertManager:

1.编辑Prometheus.yml文件中的alerting部分
alerting:alertmanagers:- static_configs:- targets: ["192.168.0.50:9093"]# - alertmanager:9093
2.重启Prometheus

在这之后告警信息就会从Prometheus转发到AlertManager,再通过Alertmanager中的配置推送到不同平台(包括邮件,移动端,webhook等方式)

利用webhook发送报警信息:

route:                             #路由group_by: ['severity']           group_wait: 30sgroup_interval: 5mrepeat_interval: 1hreceiver: 'web.hook'           #接收器
receivers:- name: 'web.hook'webhook_configs:             #接收器为webhook方式- url: 'http://127.0.0.1:5001/'  #推送的地址
inhibit_rules:- source_match:severity: 'critical'target_match:severity: 'warning'equal: ['severity', 'dev', 'instance']

当触发报警信息时就会通过POST的方式向url地址发送json请求:

json格式:

{"version": "4","groupKey": <string>,              // key identifying the group of alerts (e.g. to deduplicate)"truncatedAlerts": <int>,          // how many alerts have been truncated due to "max_alerts""status": "<resolved|firing>","receiver": <string>,"groupLabels": <object>,"commonLabels": <object>,"commonAnnotations": <object>,"externalURL": <string>,           // backlink to the Alertmanager."alerts": [{"status": "<resolved|firing>","labels": <object>,"annotations": <object>,"startsAt": "<rfc3339>","endsAt": "<rfc3339>","generatorURL": <string>,      // identifies the entity that caused the alert"fingerprint": <string>        // fingerprint to identify the alert},...]
}

验证webhook效果:

利用python写个简单的web server,url填好地址之后,就可以接收到alertmanager发送的post请求:

web_server:


import socketdef server_start(port):server = socket.socket()server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)server.bind(("192.168.0.76",port))server.listen(128)while True:client, ip_port = server.accept()print(f"客户端{ip_port[0]}连接成功")request_data = client.recv(1024).decode()print(request_data)  #打印接收到的信息if len(request_data) == 0:client.close()else:request_path = request_data.split(" ")[1]if request_path == "/":request_path = "index.html"else:request_path = request_path.replace("/","")print(request_path)try:with open(request_path, 'rb') as file:file_content = file.read()except Exception as e:response_line = "HTTP/1.1 404 NOT FOUND\r\n"response_head = "Server: Python Server2.0\r\n"with open("../miniweb/error.html", "rb") as e:error_data = e.read()response_data = (response_line + response_head + "\r\n").encode() + error_dataclient.send(response_data)else:response_line = "HTTP/1.1 200 Ok\r\n"response_head = "Server: Python Server2.0\r\n"response_data = (response_line + response_head + "\r\n").encode() + file_contentclient.send(response_data)finally:client.close()if __name__ == '__main__':server_start(7777)

接收到的警告信息:

Prometheus入门使用(三)相关推荐

  1. Python3快速入门(三)——Python3标准数据类型

    Python3快速入门(三)--Python3标准数据类型 一.Python3标准数据类型 Python3 中有六种标准数据类型: A.Number(数字) B.String(字符串) C.List( ...

  2. Bootstrap入门(三十)JS插件7:警告框

    Bootstrap入门(三十)JS插件7:警告框 通过这个插件可以为警告信息添加点击以及消失的功能. 当使用一个.close按钮,它必须是第一个子元素.alert-dismissible,并没有文字内 ...

  3. 机器学习入门系列三(关键词:逻辑回归,正则化)

    机器学习入门系列三(关键词:逻辑回归,正则化) 目录(?)[+] 一逻辑回归 逻辑回归 假设表示 决策边界 代价函数 其他优化方法 多元分类 二正则化 一.逻辑回归 1.逻辑回归 什么是逻辑回归问题, ...

  4. Spring Cloud Eureka 入门 (三)服务消费者详解

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! "真正的进步 ...

  5. MvvmLight框架使用入门(三)

    MvvmLight框架使用入门(三) 本篇是MvvmLight框架使用入门的第三篇.从本篇开始,所有代码将通过Windows 10的Universal App来演示.我们将创建一个Universal ...

  6. QT快速入门、三点求圆心实现详解

    在编程中,会经常用到数学计算,所以C++将常用的数学计算,例如求正余弦等,封装成函数(正是我们在3.2 数学计算中学习到的),我们只需要写入简单的语句就可以执行所需要的功能,这正是函数的意义.在这一章 ...

  7. 分布式锁简单入门以及三种实现方式介绍(滴滴)

    很多小伙伴在学习Java的时候,总是感觉Java多线程在实际的业务中很少使用,以至于不会花太多的时间去学习,技术债不断累积!等到了一定程度的时候对于与Java多线程相关的东西就很难理解,今天需要探讨的 ...

  8. qpython3可视图形界面_PySide——Python图形化界面入门教程(三)

    PySide--Python图形化界面入门教程(三) --使用内建新号和槽 --Using Built-In Signals and Slots 上一个教程中,我们学习了如何创建和建立交互widget ...

  9. SpringCloud 入门教程(三): 配置自动刷新

    Spring Cloud 入门教程(三): 配置自动刷新 之前讲的配置管理, 只有在应用启动时会读取到GIT的内容, 之后只要应用不重启,GIT中文件的修改,应用无法感知, 即使重启Config Se ...

最新文章

  1. 【从零学习OpenCV 4】安装过程中问题解决方案
  2. 使用pyjnius和mpxj来读取mpp文件
  3. 【DIY】废物利用,最简单粗暴便宜的DIY定时器方法,没有之一
  4. LFTP : 一个功能强大的命令行FTP程序
  5. 线性表:5.约瑟夫环,循环链表及其C语言实现
  6. PHP生成UTF-8编码的CSV文件用Excel打开乱码的解决办法
  7. 2022道路运输企业安全生产管理人员操作证考试题及在线模拟考试
  8. 证件照素材大合集(全网最全版本,免费分享)
  9. 数据挖掘 顶级期刊_澳大利亚麦考瑞大学, 国际数据挖掘顶级期刊ACM TKDD副主编招收5名数据挖掘全奖PhD...
  10. 编程求解丢番图方程的原理
  11. 大数据基础——Hadoop大数据平台搭建
  12. OSChina 周四乱弹 ——老司机的幼年日常
  13. icheck结合datatable使用方法及实现全选、反选功能
  14. Python-到底啥是面向对象&面向过程?
  15. docker-compose和docker swarm容器间网络不互通的情况
  16. ESP8266编译、烧机
  17. 分享66个NET源码,总有一款适合您
  18. 解决Firefox无法下载插件
  19. sql行转列的3种方法
  20. Visual Studio公然给人戴绿帽被举报!

热门文章

  1. 推荐 25 个优雅的 jQuery Tooltip 插件
  2. 11代i5 NUC使用记录
  3. 微信查券返利机器人公众号搭建教程分享
  4. ORA-3136错误分析——WARNING Inbound Connection Timed Out
  5. 【Gitlab】配置、运行Gitlab容器实例及简单使用测试
  6. u深度制作linux启动盘制作工具,u深度u盘启动盘制作工具 v3.1.15.316
  7. 简记_硬件工程师解读RS-422/RS-485接口
  8. IP-guard加密软件的攻防之路
  9. 初始化k8s时,报错[kubelet-check] It seems like the kubelet isn‘t running or healthy.
  10. Hive学习使用一周感悟