1. 摘要

本文主要介绍,如何通过prometheus监控服务状态,并产生告警信息,已便于运维人员快速响应。

2. 整体架构

本次设计用到prometheus服务,alertmanger服务,blackbox exporter。

以上服务都可以在官网下载:https://prometheus.io/download/

3. prometheus 部署

  • 下载并解压
$ tar xvf alertmanager-$VERSION.darwin-amd64.tar.gz
$ ls prometheus-2.35.0-rc0.linux-amd64.tar.gz
console_libraries  consoles  LICENSE  NOTICE  prometheus  prometheus.yml  promtool
  • 启动,这里prometheus.yml不做详细解释,请参考官网文档
$ ./prometheus
ts=2022-04-12T06:20:30.952Z caller=main.go:488 level=info msg="No time or size retention was set so using the default time retention" duration=15d
ts=2022-04-12T06:20:30.953Z caller=main.go:525 level=info msg="Starting Prometheus" version="(version=2.35.0-rc0, branch=HEAD, revision=5b73e518260d8bab36ebb1c0d0a5826eba8fc0a0
  • 浏览器访问localhost:9090端口

4. blackbox exporter 部署

Blackbox Exporter是Prometheus社区提供的官方黑盒监控解决方案,其允许用户通过:HTTP、HTTPS、DNS、TCP以及ICMP的方式对网络进行探测。

  • 下载并解压:
$ tar xvf blackbox_exporter-0.20.0.linux-amd64.tar.gz
$ ls
blackbox_exporter  blackbox.yml  LICENSE  NOTICE
  • 下面是一个简化的探针配置文件blockbox.yml
modules:http_2xx:prober: httphttp_post_2xx:prober: httphttp:method: POSTtcp_connect:prober: tcppop3s_banner:prober: tcptcp:query_response:- expect: "^+OK"tls: truetls_config:insecure_skip_verify: falsegrpc:prober: grpcgrpc:tls: truepreferred_ip_protocol: "ip4"grpc_plain:prober: grpcgrpc:tls: falseservice: "service1"ssh_banner:prober: tcptcp:query_response:- expect: "^SSH-2.0-"- send: "SSH-2.0-blackbox-ssh-check"irc_banner:prober: tcptcp:query_response:- send: "NICK prober"- send: "USER prober prober prober :prober"- expect: "PING :([^ ]+)"send: "PONG ${1}"- expect: "^:[^ ]+ 001"icmp:prober: icmp

注:更多的HTTP请求方法、HTTP头信息、请求参数、auth、证书认证等,请参考官方文档。

  • 通过运行以下命令,并指定使用的探针配置文件启动Blockbox Exporter实例:
blackbox_exporter --config.file=/etc/prometheus/blackbox.yml
  • 与Prometheus集成,在prometheus,yml中,加入如下配置,实现对http://www.123.com 和 http://www.baidu.com 的探测
 - job_name: 'blackbox'metrics_path: /probeparams:module: [http_2xx]            # 模块对应 blackbox.yml static_configs:- targets:- http://www.123.com        # http- http://www.baidu.com      # httprelabel_configs:- source_labels: [__address__]target_label: __param_target- source_labels: [__param_target]target_label: instance- target_label: __address__replacement: 127.0.0.1:9115
  • 重新启动prometheus,并访问prometheus页面验证

5. AlertManager部署

  • 下载并解压:
$ tar xvf alertmanager-$VERSION.darwin-amd64.tar.gz
$ ls
alertmanager  alertmanager.yml  amtool  data  LICENSE  NOTICE
  • Alertmanager解压后会包含一个默认的alertmanager.yml配置文件,内容如下所示:
global:resolve_timeout: 5mroute:group_by: ['alertname']group_wait: 10sgroup_interval: 10srepeat_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: ['alertname', 'dev', 'instance']

Alertmanager的配置主要包含两个部分:路由(route)以及接收器(receivers)。所有的告警信息都会从配置中的顶级路由(route)进入路由树,根据路由规则将告警信息发送给相应的接收器。

  • 启动Alertmanager
./alertmanager

用户也在启动Alertmanager时使用参数修改相关配置。–config.file用于指定alertmanager配置文件路径,–storage.path用于指定数据存储路径。

  • 查看运行状态
    Alertmanager启动后可以通过9093端口访问,http://localhost:9093
  • 关联Prometheus与Alertmanager
    在Prometheus的架构中被划分成两个独立的部分。Prometheus负责产生告警,而Alertmanager负责告警产生后的后续处理。因此Alertmanager部署完成后,需要在Prometheus中设置Alertmanager相关的信息。
    编辑Prometheus配置文件prometheus.yml,并添加以下内容
alerting:alertmanagers:- static_configs:- targets: ['localhost:9093']
  • 告警规则配置
    新建文件blackbox_rules.yml
groups:
- name: blackbox_network_statsrules:- alert: blackbox_network_statsexpr: up == 0   #这里遵循Promsql的语法 for: 1m         #如1分钟内持续为0  报警labels:severity: criticalannotations:description: 'Job {{ $labels.job }} {{ $labels.instance }}.'summary: '{{ $labels.instance }} down ! ! !'

注:promsql语法请参考官方文档

  • 编辑Prometheus配置文件prometheus.yml,并添加以下内容
rule_files:- "blackbox_rules.yml"
  • 重新启动prometheus,配置完成。
    可以通过访问http://localhost:9093/#/alerts,查看告警信息

6. 验证接收告警

为了验证接收告警,我这里写了一个简单的http服务,通过alertmanager的web hook方式验证测试

  • 修改 alertmanager.yml 并重启
route:group_by: ['alertname']group_wait: 30sgroup_interval: 5mrepeat_interval: 1hreceiver: 'web.hook'
receivers:- name: 'web.hook'webhook_configs:- url: 'http://127.0.0.1:8981/'  #这里为接收告警的服务地址
inhibit_rules:- source_match:severity: 'critical'target_match:severity: 'warning'equal: ['alertname', 'dev', 'instance']
  • 用python写的一个简单的接收http告警的服务
#coding=utf-8
import http.client
import urllib
from http.server import HTTPServer, BaseHTTPRequestHandler
import jsondef start_server():data = {'result': 'this is a test'}host = ('localhost', 8981)class Resquest(BaseHTTPRequestHandler):def do_POST(self):length = int(self.headers['Content-Length'])post_data = urllib.parse.parse_qs(self.rfile.read(length).decode('utf-8'))# You now have a dictionary of the post datadata = {"Method:": self.command,"Path:": self.path,"Post Data":post_data}print(data)self.send_response(200)self.send_header('Content-type', 'application/json')self.end_headers()self.wfile.write(json.dumps(data).encode())server = HTTPServer(host, Resquest)print("Starting server, listen at: %s:%s" % host)server.serve_forever()if __name__ == '__main__':start_server()print("start server success...")

启动,观察接收到的告警信息

$ python server.py
Starting server, listen at: localhost:8981
{'Method:': 'POST', 'Post Data': {'{"receiver":"web\\\\.hook","status":"firing","alerts":[{"status":"firing","labels":{"alertname":"blackbox_network_stats","instance":"172.17.0.1:8001","job":"kong","severity":"critical"},"annotations":{"description":"Job kong 172.17.0.1:8001.","summary":"172.17.0.1:8001 down ! ! !"},"startsAt":"2022-04-12T06:21:45.185Z","endsAt":"0001-01-01T00:00:00Z","generatorURL":"http://ubuntu:9090/graph?g0.expr': ['up == 0\\u0026g0.tab=1","fingerprint":"5776c946d916f29c"}],"groupLabels":{"alertname":"blackbox_network_stats"},"commonLabels":{"alertname":"blackbox_network_stats","instance":"172.17.0.1:8001","job":"kong","severity":"critical"},"commonAnnotations":{"description":"Job kong 172.17.0.1:8001.","summary":"172.17.0.1:8001 down ! ! !"},"externalURL":"http://ubuntu:9093","version":"4","groupKey":"{}:{alertname=\\"blackbox_network_stats\\"}","truncatedAlerts":0}\n']}, 'Path:': '/'}
127.0.0.1 - - [12/Apr/2022 14:30:30] "POST / HTTP/1.1" 200 -

至此,prometheus 的告警服务搭建完毕

参考地址:https://prometheus.io/download/

prometheus告警配置相关推荐

  1. 通过Alertmanager实现Prometheus的告警告警配置(邮箱加钉钉)

    通过Alertmanager实现Prometheus的告警 告警配置 Prometheus本身不支持的告警功能,主要通过插件Alertmanager来实现告警.Alertmanager用于接收Prom ...

  2. alertmanager监控 Prometheus 告警,alertmanage配置邮件告警

    1.搭建Prometheus,node及mysql参考该链接: 配置grafana展示prometheus监控数据 2.下载安装 alert manager: https://prometheus.i ...

  3. 5.prometheus告警插件-alertmanager、自定义webhook案例编写

    5.prometheus告警插件-alertmanager 参考文章: https://www.bookstack.cn/read/prometheus-book/alert-install-aler ...

  4. 开箱即用的 Prometheus 告警规则集

    作者 | AddoZhang       责编 | 欧阳姝黎 在配置系统监控的时候,是不是即使绞尽脑汁监控的也还是不够全面,或者不知如何获取想要的指标. Awesome Prometheus aler ...

  5. prometheus告警

    1. 告警概述 prometheus的告警管理分为两部分.通过在prometheus服务端设置告警规则, Prometheus服务器端产生告警向Alertmanager发送告警. 然后,Alertma ...

  6. prometheus告警功能

    prometheus告警功能 Prometheus对指标的收集.存储同告警能力分属于Prometheus Server和AlertManager(通用的组件,可由企业自行开发)两个独立的组件,前者仅负 ...

  7. 玩转prometheus告警 alertmanger(一)之prometheus告警规则

    目录 1. 告警系统原理概述 2.  配置prometheus规则 2.1 配置告警规则目录 2.2 告警规则 3. 查看效果 1. 告警系统原理概述 在开始之前,需要了解下prometheus和al ...

  8. Prometheus 告警规则

    Prometheus 告警规则 Prometheus官方内置的第三方报警通知包括:邮件. 即时通讯软件(如Slack.Hipchat).移动应用消息推送(如Pushover)和自动化运维工具(例如:P ...

  9. 配置文件详解+AlertManager微信邮件告警配置

    文章目录 前言 AlertManager告警简单部署 一.AlertManager告警简介 1.简介 2.告警规则组成 1)告警名称 2)告警规则 3.Alertmanager特性 1)分组 2)抑制 ...

最新文章

  1. 计算机性能指标ppt,计算机网络分类与主要性能指标.ppt
  2. php 编程祝新年快乐_AnyCodes:免费的在线编程神器
  3. SQL Server,Could not obtain exclusive lock on database 'model'
  4. Netbeans OpenGL使用
  5. 看完你就晓得正向代理和反向代理了!
  6. [剑指offer]面试题22:栈的压入、弹出序列
  7. 什么是CDI,它与@EJB和Spring有什么关系?
  8. linux修改su的PAM配置文件,linux pam安全认证模块su命令的安全隐患
  9. c 子类对象 访问父类对象受保护成员_面向对象编程(OOP)
  10. react使用less预编译语言和本地代理配置
  11. 使用alarm API实现灵活的延时操作
  12. 2015年7月之 装订空白
  13. 使用SpringCloud实现Java分布式开发【part-2】:Ribbon负载均衡的介绍及使用方式
  14. 简单易懂的讲解深度学习(入门系列之八)
  15. hive打patch流程说明
  16. 使用Axis2创建一个Web Service的客户端 - 子非鱼,安知鱼之乐? - CSDNBlog
  17. DNS:快速搭建公司内网DNS解析服务器
  18. 视觉SLAM——特征点法与直接法对比以及主流开源方案对比 LSD SVO ORB DSO
  19. STM32开发 -- GPS模块开发详解
  20. 二进制文件漏洞挖掘 IDA插件VulFi安装使用

热门文章

  1. Linux复制一个或多个文件到另一个目录下
  2. ssh: connect to host 192.168.1.20 port 22: No route to host解决方案
  3. Android事件总线(一)EventBus3.0用法全解析
  4. 多媒体制作技术心得体会_多媒体技术学习心得体会总结
  5. java map集合详解_JAVA干货:Map 集合详解
  6. 用最科学的方法展示最形象的图表——前端数据可视化实践
  7. 查看wifi连接路由器的MAC地址
  8. Array 属性和方法
  9. frl啥意思_手表日历显示frl是什么意思
  10. 文献关联软件connectwd papers