Prometheus+Grafana+Alertmanager监控告警

news2024/9/9 4:45:03

Prometheus+Grafana+Alertmanager告警

Alertmanager开源地址:github.com/prometheus

Prometheus是一款基于时序数据库的开源监控告警系统,它是SoundCloud公司开源的,SoundCloud的服务架构是微服务架构,他们开发了很多微服务,由于服务太多,传统的监控已经无法满足它的监控需求,于是他们在2012就着手开发新的监控系统。

本篇使用的组件:

  • Prometheus
  • Grafana
  • Node-exporter
  • Alertmanager

本篇忽略前三个组件的安装步骤

IP部署组件
10.22.51.65Prometheus服务端、Grafana、Alertmanager报警
10.22.51.66Node-exporter
120.78.156.217Node-exporter
10.22.51.64Node-exporter

1、Prometheus架构原理

1.架构图

来自官方的架构图

img

2.怎么采集监控数据

要采集目标的监控数据,首先就要在被采集目标地方安装采集组件(如node-exporter),这种采集组件被称为Exporter。prometheus.io官网上有很多这种exporter,官方 exporter列表。

采集完了怎么传输到Prometheus?

采集了数据,要传输给prometheus。怎么做?
Exporter 会暴露一个HTTP接口,prometheus通过Pull模式的方式来拉取数据,会通过HTTP协议周期性抓取被监控的组件数据。
不过prometheus也提供了一种方式来支持Push模式,你可以将数据推送到Push Gateway,prometheus通过pull的方式从Push Gateway获取数据。

3.主要流程

  1. Prometheus server定期从静态配置的 targets 或者服务发现的 targets 拉取数据(zookeeper,consul,DNS SRV Lookup等方式)
  2. 当新拉取的数据大于配置内存缓存区的时候,Prometheus会将数据持久化到磁盘,也可以远程持久化到云端。
  3. Prometheus通过PromQL、API、Console和其他可视化组件展示数据。Prometheus支持很多方式图表可视化,比如Grafana,自带的Promdash。它还提供HTTP API的查询方式,自定义输出。
  4. Prometheus 可以配置rules,然后定时查询数据,当条件触发的时候,会将alert推送到配置的Alertmanager。
  5. Alertmanager收到告警的时候,会根据配置,聚合,去重,降噪,最后发出警告。

2、Centos7部署Alertmanager

1.Alertmanager下载安装

cd /usr/local/src

wget  https://github.com/prometheus/alertmanager/releases/download/v0.27.0/alertmanager-0.27.0.linux-386.tar.gz

tar -zxvf alertmanager-0.27.0.linux-386.tar.gz -C /data

mv /data/alertmanager-0.27.0.linux-386 /data/alertmanager

2.加入systemd管理

[root@zhongjl-test-02 /data/alertmanager]# cat /etc/systemd/system/alertmanager.service 
[Unit]
Description=AlertManager Service
After=network.target
After=syslog.target

[Service]
Restart=always
ExecStart=/data/alertmanager/alertmanager --config.file=/data/alertmanager/alertmanager.yml

[Install]
WantedBy=multi-user.target

3.启动alertmanager

systemctl start alertmanager.service

[root@zhongjl-test-02 /data/alertmanager]# netstat -tnlp | grep aler
tcp6       0      0 :::9093                 :::*                    LISTEN      663/alertmanager    
tcp6       0      0 :::9094                 :::*                    LISTEN      663/alertmanager

3、prometheus文件配置

修改prometheus主配置文件data/prometheus/prometheus.yml

[root@zhongjl-test-02 /data/prometheus]# cat /data/prometheus/prometheus.yml
global:
  scrape_interval: 15s
  evaluation_interval: 15s

alerting:
  alertmanagers:
    - static_configs:
        - targets:
          - 10.22.51.65:9093

rule_files:
  - "rules/*.yml"
  - "rules/target_down.yml"

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["10.22.51.65:9090"]

  - job_name: 'node'
    static_configs:
      - targets: ['10.22.51.63:9100', '10.22.51.65:9100', '10.22.51.66:9100', '120.78.156.217:9100', '120.78.156.217:8181']

  - job_name: 'test_cluster'
    file_sd_configs:
      - files: ['/data/prometheus/sd_config/*.yml']

1.配置说明:

alerting:配置Alertmanager与prometheus通讯

sed -i '
/alerting:/, /static_configs:/c\
alerting:\
  alertmanagers:\
    - static_configs:\
        - targets:\
          - 10.22.51.65:9093
' /data/prometheus/prometheus.yml

引入告警规则文件

在prometheus配置文件中创建告警规则,编辑文件vim /data/prometheus/prometheus.yml,新增内容:

rule_files:
  - "rules/*.yml"
  - "rules/target_down.yml"

创建一个job

  - job_name: 'test_cluster'   # 创建一个job
    file_sd_configs:           # 此job基于文件动态添加node
      - files: ['/usr/local/prometheus/sd_config/*.yml']   # 动态添加node的文件路径
        refresh_interval: 5s   # 隔  5s检查一次文件是否有新增或删除

4、Job节点配置与测试

1.job节点配置

[root@zhongjl-test-02 /data/prometheus]# cat sd_config/node.yml 
- targets: ['10.22.51.66:9100']
  #labels:                    # 可以设置标签
  #  name: docker
- targets: ['10.22.51.63:9100']
- targets: ['10.22.51.65:9090']
  #labels:
  #  name: prometheus

2.prometheus界面说明

image-20240730214722564

# 可以在这个界面使用promeSQL查看监控的数据,后面再说。

# Status------->Service Discovery 查看发现的被监控端的机器

# Status------->Targets 查看被监控的机器的状态

# Status------->Rules 查看配置的告警规则

# Status------->Configuration 查看prometheus的配置文件

# Graph 可以编辑promeSQL,查看收集到的数据,可以做sql调试,也可以用图形化展示;不过图形化展示建议配合grafna做。

# Alerts 可以查看告警的状态

3.查看节点

在prometheus的web页面Status----->Service Discovery查看是否发现了配置的node

image-20240730214019269

在Status----->Targets可以查看当前发现的node状态是否是正常的,up为正常

image-20240730214833942

4.查看收集的数据

根据上面Endpoint的连接,在Prometheus上利用sql查看node的CPU的数据node_cpu_seconds_total

image-20240730215015428

5、告警测试

1.创建告警规则存放文件

mkdir -p /data/prometheus/rules
#创建规则文件,名称自定义
vim /data/prometheus/rules/systemd.yml

systemd.yml配置内容:

groups:
- name: docker
  rules:
  - alert: docker_systemd_down  # 告警聚合的名称依据
    expr: node_systemd_unit_state{name="docker.service", state="inactive", type="notify"} == 1
    for: 1m
    labels:
      severity: 灾难  # 告警级别
    annotations:
      summary: "Instance {{ $labels.name }} 停止工作"
      description: "{{ $labels.instance }}的{{ $labels.name }} 已经停止1分钟以上"
 
  - alert: sshd_systemd_down
    expr: node_systemd_unit_state{name="sshd.service", state="inactive", type="notify"} == 1
    for: 1m
    labels:
      severity: 灾难
    annotations:
      summary: "Instance {{ $labels.name }} 停止工作"
      description: "{{ $labels.instance }}的{{ $labels.name }} 已经停止1分钟以上"
 
  - alert: nginx_systemd_down
    expr: node_systemd_unit_state{name="nginx.service", state="inactive", type="notify"} == 1
    for: 1m
    labels:
      severity: 灾难
    annotations:
      summary: "Instance {{ $labels.name }} 停止工作"
      description: "{{ $labels.instance }}的{{ $labels.name }} 已经停止1分钟以上"

2.告警规则配置说明

docker服务停止告警

groups:
- name: docker
  rules:
  - alert: docker_systemd_down  # 告警聚合的名称依据
    expr: node_systemd_unit_state{name="docker.service", state="inactive", type="notify"} == 1
    for: 1m
    labels:
      severity: 灾难  # 告警级别
    annotations:
      summary: "Instance {{ $labels.name }} 停止工作"
      description: "{{ $labels.instance }}的{{ $labels.name }} 已经停止1分钟以上"

ssh服务停止告警

  - alert: sshd_systemd_down
    expr: node_systemd_unit_state{name="sshd.service", state="inactive", type="notify"} == 1
    for: 1m
    labels:
      severity: 灾难
    annotations:
      summary: "Instance {{ $labels.name }} 停止工作"
      description: "{{ $labels.instance }}的{{ $labels.name }} 已经停止1分钟以上"

nginx服务停止告警

  - alert: nginx_systemd_down
    expr: node_systemd_unit_state{name="nginx.service", state="inactive", type="notify"} == 1
    for: 1m
    labels:
      severity: 灾难
    annotations:
      summary: "Instance {{ $labels.name }} 停止工作"
      description: "{{ $labels.instance }}的{{ $labels.name }} 已经停止1分钟以上"

2.编辑altermanager配置文件

cat /data/prometheus/prometheus.yml

global:   # 全局的配置
  resolve_timeout: 5m  # 解析的超时时间
  smtp_smarthost: 'smtp.qq.com:465'
  smtp_from: '980521387@qq.com'
  smtp_auth_username: '980521387@qq.com'
  smtp_auth_password: 'kparebywhhvubced'
  smtp_require_tls: false

route:    # 将告警具体怎么发送
  group_by: ['alertname']  # 根据标签进行分组
  group_wait: 10s          # 发送告警等待时间
  group_interval: 10s      # 发送告警邮件的间隔时间
  repeat_interval: 1h      # 重复的告警发送时间
  receiver: 'email'        # 接收者是谁
receivers:                 # 将告警发送给谁
- name: 'email'
  email_configs:
  - to: 'zhongjinlin31314@sunline.cn'
inhibit_rules:   # 抑制告警
  - source_match:
      severity: 'critical'   # 当收到同一台机器发送的critical时候,屏蔽掉warning类型的告警
    target_match:
      severity: 'warning'
    equal: ['alertname', 'severity', 'instance']  # 根据这些标签来定义抑制

3.验证altermanager配置文件

检查altermanager和Prometheus的配置文件,看看是否有报错,是否有发现规则

#检查altermanager配置文件
[root@zhongjl-test-02 /data/alertmanager]# ./amtool check-config alertmanager.yml
Checking 'alertmanager.yml'  SUCCESS
Found:
 - global config
 - route
 - 1 inhibit rules
 - 1 receivers
 - 0 templates


#检查Prometheus的配置文件
[root@zhongjl-test-02 /data/alertmanager]# cd /data/prometheus/
[root@zhongjl-test-02 /data/prometheus]# ./promtool check config prometheus.yml
Checking prometheus.yml
  SUCCESS: 3 rule files found
 SUCCESS: prometheus.yml is valid prometheus config file syntax

Checking rules/systemd.yml
  SUCCESS: 3 rules found

Checking rules/target_down.yml
  SUCCESS: 1 rules found

Checking rules/target_down.yml
  SUCCESS: 1 rules found

# 没有报错,并且发现了报警规则,可以重启prometheus和altermanager服务

systemctl restart prometheus.service alertmanager.service

4.登陆web验证

# 登陆prometheus的web页面–点击Alerts,查看是否有规则等

image-20240730211449081

点击Status--再点击Rules

image-20240730211523512

5.docker告警测试

停止docker,进行邮件报警测试

systemctl stop docker.socket
systemctl stop docker

image-20240730220212207

停止docker服务后,不会立即发送报警邮件,可以看到当前的状态已经是PENDING,这个时候altermanager已经收到prometheus的报告,说明docker服务已经挂掉了,等待状态变为FIRING的时候,才会发送邮件。

image-20240730220301942

6.邮件截图

image-20240730220448574

如需配置多台告警,需保证以下条件:

  • 检查其他节点上的 node_exporter 配置,确保 node_exporter 服务文件中包含 --collector.systemd 参数。(参考步骤:7.无法发送消息处理)
  • 确保prometheus配置包含node节点,如:
  - job_name: 'node'
    static_configs:
      - targets: ['10.22.51.63:9100', '10.22.51.65:9100', '10.22.51.66:9100']

在 Prometheus Web 界面(通常是 http://<prometheus_host>:9090)中,执行以下 PromQL 查询,确认可以抓取到所有节点上的 node_systemd_unit_state 指标:

node_systemd_unit_state{name="docker.service"}

image-20240730224542350

7.无法发送消息处理

如停止后,无法发送消息,确保 node_exporter 启动时包含了 systemd 采集器。如果 node_exporter 没有正确配置为采集 systemd 状态,Prometheus 将无法获取 Docker 服务状态。

修改vim /usr/lib/systemd/system/node_exporter.service,在 [Service] 部分添加 --collector.systemd 参数,然后,重新加载 systemd 配置并重启 node_exporter 服务:

ExecStart=/data/node_exporter/node_exporter --collector.systemd


systemctl daemon-reload
systemctl restart node_exporter

访问 Prometheus Web 界面,通常是 http://<prometheus_host>:9090。在查询栏输入以下查询:

node_systemd_unit_state{name="docker.service"}

查看返回的结果,确认是否有 inactive 的状态数据。

image-20240730212426844

6、采集失败告警

这条规则针对目标服务器宕机,网络连接问题,Node Exporter 服务未运行等问题。

1.告警规则说明

当Prometheus 无法抓取目标 http://120.78.156.217:9100/metrics 的指标,并显示了 “connection refused” 错误。如图:

image-20240730220727987

2.创建告警规则文件

1.首先,在 rules 目录下创建一个新的规则文件,比如 vim /data/prometheus/rules/target_down.yml

groups:
- name: target_down
  rules:
  - alert: TargetDown
    expr: up == 0
    for: 1m
    labels:
      severity: 灾难
    annotations:
      summary: "抓取目标 {{ $labels.instance }} 下线"
      description: "Prometheus 无法抓取目标 {{ $labels.instance }},状态为 DOWN 超过 1 分钟。"

prometheus.yml 中添加这个规则文件:

rule_files:
  - "rules/*.yml"
  - "rules/target_down.yml"

保存并重启 Prometheus 以应用新的配置

3.验证告警规则

通过 Prometheus 的 Web 界面 http://<prometheus_host>:9090 查看新的告警规则是否加载正确。

image-20240730221311896

登陆120.78.156.217服务器,手动停止Node-exporter,确认当 http://120.78.156.217:9100/metrics 无法访问时,新的告警会被触发。

image-20240730221427221

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1961280.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【实际源码】工厂进销存管理系统(仓库、采购、生产、销售)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本&#xff0c;并实时掌握各环节的运营状况。 在采购管理方面&#xff0c;系统能够处理采购订单、供应商管理和采购入库等流程&#xff…

亚马逊云科技 re:Inforce 2024中国站大会

亚马逊云科技 re:Inforce 2024中国站大会 - 生成式AI时代的全面安全&#xff0c;将于7月25日本周四在北京富力万丽酒店揭幕

向量数据库(二):Qdrant

写在前面 我们借助 Qdrant 来了解向量数据库的一些内容 内容 什么是 Qdrant? Qdrant 是一个开源的针对向量相似性搜索的引擎,它提供了一系列的 API 用于对向量数据进行存储、搜索和管理等功能。 下面是来自 Qdrant 官网的一个架构图: 初步了解 Qdrant 里的一些概念 …

h5页面 打开自动跳转小程序

移动端项目中打开页面&#xff0c;直接跳转到小程序功能效果图 pc mobile 代码 样式代码css&#xff1a; <style>* {margin: 0;padding: 0;}html,body {height: 100%;}.full {position: absolute;top: 0;bottom: 0;left: 0;right: 0;}.public-web-container {displa…

每日OJ_牛客CM26 二进制插入

目录 牛客CM26 二进制插入 解析代码 牛客CM26 二进制插入 二进制插入_牛客题霸_牛客网 解析代码 m:1024&#xff1a;100000000 00 n:19 &#xff1a; 10011 要把n的二进制值插入m的第j位到第i位&#xff0c;只需要把n先左移j位&#xff0c;然后再进行或运算&#xff08;|&am…

JS知识点巩固

目录 前言 一、reduce方法 二、二维数组的行和列交换 总结 前言 这里的知识点记录的是日常生活中容易搞忘的知识点 一、reduce方法 function(total,currentValue, index,arr) redece可以用作累加&#xff1a;可以传入初始值&#xff0c;如果传入初始值&#xff0c;则从累加…

【FAS】《The Research of RGB Image Based Face Anti-Spoofing》

文章目录 1、原文2、相关工作3、基于特征解耦的人脸活体检测算法3.1、方法3.2、实验结果 4、基于解构与组合的人脸活体检测方法4.1、方法4.2、实验 5、作者总结6、结论&#xff08;own&#xff09;7、附录7.1、CycleGAN7.2、InfoGAN7.3、3D Face 1、原文 [1]张克越.基于RGB图像…

项目成功秘诀:工单管理系统如何加速进程

国内外主流的10款项目工单管理系统对比&#xff1a;PingCode、Worktile、浪潮云工单管理系统、华为企业智能工单系统、金蝶云苍穹、紫光软件管理系统、Jira、Asana、ServiceNow、Smartsheet。 在管理日益复杂的个人项目时&#xff0c;找到一款能够真正符合需求的管理软件&#…

Stable Diffusion 图生图

区别于文生图&#xff0c;所谓的图生图&#xff0c;俗称的垫图&#xff0c;就是比文生图多了一张参考图&#xff0c;由参考一张图来生成图片&#xff0c;影响这个图片的要素不仅只靠提示词了&#xff0c;还有这个垫图的因素&#xff0c;这个区域就上上传垫图的地方&#xff0c;…

二叉树--堆(下卷)

二叉树–堆&#xff08;下卷&#xff09; 如果有还没看过上卷的&#xff0c;可以看这篇&#xff0c;链接如下&#xff1a; http://t.csdnimg.cn/HYhax 向上调整算法 堆的插⼊ 将新数据插⼊到数组的尾上&#xff0c;再进⾏向上调整算法&#xff0c;直到满⾜堆。 &#x1f4…

Monaco 使用 LinkedEditingRangeProvider

Monaco LinkEdit 功能是指同时修改同样的字符串&#xff0c;例如在编辑 Html 时&#xff0c;修改开始标签时会同时修改闭合标签。Monaco 支持自定义需要一起更新的字符串列表。最终效果如下&#xff1a; 首先&#xff0c;通过 registerLinkedEditingRangeProvider 注册 LinkEd…

day17(nginx反向代理)

反向代理 安装nginx 1.26.1 平滑升级 负载均衡 1.nginx 反向代理配置 反向代理&#xff1a;⽤户直接访问反向代理服务器就可以获得⽬标服务器 &#xff08;后端服务器&#xff09;的资源。 反向代理效果&#xff1a;当访问200主机&#xff08;web1&#xff09;&#xff0c;&a…

vite instanceof 失效

背景&#xff1a;给一个巨石单体项目进行标准化模块拆分&#xff0c;封装出来的模块代码用 vite 进行构建&#xff0c;但模块启动后页面上的表现一直和 webpack 那版不一致 一步步 debug 后&#xff0c;发现问题出在下面这个判断条件 const GeneratorFunction function* () …

解决jenkins配置extendreport不展示样式

下载插件&#xff1a;Groovy 、 HTML Publisher plugin 配置&#xff1a; 1&#xff09;Post Steps &#xff1a; 增加 Execute system Groovy script &#xff0c; 内容&#xff1a; System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "&qu…

【React】详解 React Router

文章目录 一、React Router 的基本概念1. 什么是 React Router&#xff1f;2. React Router 的主要特性 二、React Router 的核心组件1. BrowserRouter2. Route3. Link4. Switch 三、React Router 的使用方法1. 安装 React Router2. 定义路由组件3. 配置路由4. 启动应用 四、Re…

再谈istio

微服务之间调用观测&#xff0c; istio的版本是对k8s 版本有要求的&#xff0c;案例中 istioshi 1.15.2 版本的 一、下载 Istio 二、部署 egressgateway 和 ingressgateway 分别控制进出 istio 通过 Envoy proxy&#xff0c;也就是pod加边车的方式来控制用户对svc的访问 这样…

Spring验证码

前言&#xff1a;使用Hutool 1.什么是Hutool&#xff1f; 2.代码复制到test类中 3.代码爆红&#xff0c;说明需要引入依赖 4.根据名取Maven仓库相关依赖 5.在pom.xml文件中进行配置 6.引入成功 7. 运行程序 打开d盘&#xff0c;发现已经生成了验证码的图片&#xff0c;路径在…

Python推荐书单:三本不可错过的经典书籍

强烈推荐这三本书&#xff01;&#xff01; 一、《Python编程从入门到实践》 这本书适合零基础的Python读者&#xff0c;旨在帮助他们快速入门Python编程&#xff0c;并达到初级开发者的水平。书中深入浅出地介绍了Python的基础概念&#xff0c;如变量、循环、函数等&#xff…

智能优化算法(三):遗传算法

文章目录 1.问题描述2.遗传算法2.1.算法概述2.2.编码操作2.3.选择操作2.4.交叉操作2.5.变异操作2.6.算法流程 3.算法实现3.1.MATLAB代码实现3.2.Python代码实现 4.参考文献 1.问题描述 \quad 在利用启发式算法求解问题时&#xff0c;我们常常需要应用遗传算法解决函数最值问题&…

【Golang 面试 - 进阶题】每日 3 题(八)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/UWz06 &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏…