当前位置: 首页 > news >正文

从零搭建Prometheus到Grafana告警推送

目录

一、Prometheus源码安装和动态更新配置

 二、Prometheus操作面板和常见配置

三、Prometheus常用监控组件exporter配置

3.1 exporter是什么

3.2 有哪些exporter

3.3 exporter怎么用

3.4 实战 node_exporter 

​3.5 其它exporter都怎么用

四、Promethus整合新版SpringBoot3.X应用监控

4.1 pom.xml引入依赖:

4.2 自定义健康检查

4.3 prometheus整合配置

五、可视化工具Grafana安装

5.1 什么是Grafana

5.2有哪些常用的功能

5.3快速安装部署

5.4 配置prometheus数据源

5.5 Grafana的用户和组织

 5.6Grafana explore

5.7Grafana最重要的dashboard

 5.8 Grafana高效导入仪表盘

八、Promethus的监控告警Alertmanager

8.1 什么是Alertmanager

8.2 Alertmanager安装

8.3 Alertmanager邮件告警配置步骤

​九、Grafana的Alert监控告警

9.1 Granfana的Alert和Alertmanager比对

9.2 Grafana的告警界面

9.3 Grafana新建推送通道

十、Grafana+钉钉群告警机器人

10.1 实战步骤

10.2 Grafana新建推送通道

10.3 面板Panel配置告警规则

10.4 错误信息跳转

10.5 结果验证


 本文主要介绍了使用Prometheus怎么监听应用服务和中间件。当使用Grafana时,怎么优雅快速的导入仪表盘以及设置阈值触发告警-将告警信息推送到邮件或者钉钉

一、Prometheus源码安装和动态更新配置

安装步骤:

配置go环境变量(Prometheus使用go语言开发)

#解压
tar -zxvf go1.17.6.linux-amd64.tar.gz

#配置环境变量 
echo "export PATH=$PATH:/usr/local/software/temp/go/bin" >> /etc/profile 

#立刻生效
source /etc/profile

#测试 go是否安装成功
go version

安装Prometheus:

#解压
tar -zxvf prometheus-2.43.0.linux-amd64.tar.gz

#重命名
mv prometheus-2.43.0.linux-amd64 prometheus

#进入目录启动
./prometheus --config.file=./prometheus.yml

#查看是否启动成功,默认端口9090
lsof -i:9090

#访问 prometheus ,阿里云网络安全组开放端口
  指标数据
  http://ip:9090/metrics
  图界面
  http://ip:9090/

动态更新:

prometheus里面经常需要修改配置,可以利用动态更新

启动时在参数中加入--web.enable-lifecycle   (该参数默认关闭)

#启动, &表示需要守护进程方式运行,不然退出终端则进程消失
./prometheus --config.file=./prometheus.yml --web.enable-lifecycle &

#动态更新配置
curl -X POST http://localhost:9090/-/reload

 二、Prometheus操作面板和常见配置

操作面板:

常见的配置:

#全局配置,默认,可以被覆盖
global:
  scrape_interval: 15s  #全局的抓取间隔
  scrape_timeout: 10s  #抓取超时时间
  evaluation_interval: 15s  #评估间隔

#告警配置
alerting:
  alertmanagers: #告警管理器
  - follow_redirects: true #是否启用重定向
    enable_http2: true #是否启用HTTP2
    scheme: http
    timeout: 10s
    api_version: v2 #指定Alertmanager的API版本,此处为v2
    static_configs: #告诉Prometheus哪些目标是静态的(即不会更改),如果有多个目标,则可以在targets中指定多个地址。
    - targets: []

#抓取配置
scrape_configs:
- job_name: prometheus #任务名称
  honor_timestamps: true #指标的时间戳应该由服务器提供,而不是客户端在发送指标时提供的时间戳
  scrape_interval: 15s #抓取任务的时间间隔,即每15秒抓取一次。
  scrape_timeout: 10s  #抓取任务的超时时间,单位为秒,即每个目标最多等待10秒钟
  metrics_path: /metrics  #抓取指标的路径
  scheme: http #指定抓取时使用的协议,默认为http
  follow_redirects: true  #是否启用重定向。在此处启用
  enable_http2: true  #是否启用HTTP2
  static_configs:
  - targets:
    - 120.xxx.xx.xxx:9090 #目标配置,告诉Prometheus哪些目标需要抓取,如果有多个目标,则可以在targets中指定多个地址
    
#此处抓取了一个名为prometheus的任务,每隔15秒抓取一次localhost:9090上的/metrics路径,超时时间为10秒

三、Prometheus常用监控组件exporter配置

3.1 exporter是什么

向Prometheus提供监控样本数据的程序都可以被称为一个Exporter
它是Prometheus的指标数据收集组件,负责从目标Jobs收集数据
并把收集到的数据转换为Prometheus支持的时序数据格式
只负责收集,并不向Server端发送数据,而是等待Prometheus Server 主动抓取

3.2 有哪些exporter

Prometheus社区以及其他团队开发了大量的Exporter,覆盖了许多不同类型的系统和服务
比如:Node Exporter、MySQL Exporter、Redis Exporter、MongoDB Exporter、Nginx Exporter...

3.3 exporter怎么用

在主机上安装了一个 Exporter程序,该程序对外暴露了一个用于获取当前监控样本数据的HTTP访问地址
Prometheus通过轮询的方式定时从这些Target中获取监控数据样本,并且存储在数据库当中

3.4 实战 node_exporter 

node_exporter  用于采集类UNIX内核的硬件以及系统指标,包括CPU、内存和磁盘

步骤:

#解压
tar -zxvf node_exporter-1.6.0.linux-amd64.tar.gz
 
#进到目录里面,启动
nohup ./node_exporter &

#确认端口
lsof -i:9100

通过浏览器访问 http://IP+9100/metrics可以查看到监控信息

 启动后exporter后,就需要将exporter的地址配置到prometheus.yml中

Prometheus服务器中添加被监控机器的配置 vim  prometheus.yml,   target的也可以写ip

  - job_name: 'agent-1'
    static_configs:
      - targets: ['120.xxx.7.xxx:9100']

 动态更新配置 curl -X POST http://localhost:9090/-/reload

查看Web UI界面的target和configuration是否有对应的数据 

 3.5 其它exporter都怎么用

一样的步骤:

对应的机器安装exporter
启动exporter 并监听对应的程序
访问对应的exporter的metric路径,看是否返回数据
Prometheus配置新的job
访问Prometheus查看target和configuration是否有数据

四、Promethus整合新版SpringBoot3.X应用监控

Promethus整合SpringBoot3.X应用监控

4.1 pom.xml引入依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

#暴露指定端点
management.endpoints.web.exposure.include=env,info,config,health

验证:访问 http://localhost:8080/actuator/prometheus, 查看详情

4.2 自定义健康检查

检查当前服务是否存活。继承AbstractHealthIndicator类,覆盖doHealthCheck方法,里面可以自定义up down。具体根据业务来设置即可

@Component
public class NanNanMQIndicator extends AbstractHealthIndicator {@Overrideprotected void doHealthCheck(Health.Builder builder) throws Exception {//对比两个不同方法builder.up().withDetail("MQ中间件","这个自带高可用");}
}


@Component
public class NanNanMQIndicator extends AbstractHealthIndicator {@Overrideprotected void doHealthCheck(Health.Builder builder) throws Exception {//对比两个不同方法builder.down().withDetail("DOWN MQ中间件","这个自带高可用");}
}

4.3 prometheus整合配置

 <!--整合prometheus--><dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId></dependency>

编辑文件 prometheus.yml 15秒拉取一次应用服务数据

  - job_name: "springboot"
    scrape_interval: 15s
    scrape_timeout: 10s
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: ['120.xx.7.xx8080']

热更新配置 curl -X POST http://ip:9090/-/reload

 刚连接上,在promethus的界面就可以看到了== 界面不太好看==

五、可视化工具Grafana安装

5.1 什么是Grafana

它数据可视化工具,可以做数据监控和数据统计,带有告警功能。
面板插件有许多不同方式的可视化指标和日志,官方库中具有丰富的仪表盘插件
比如热图、折线图、图表等多种展示方式

5.2有哪些常用的功能

报警:支持可视方式定义最重要指标的警报规则,Grafana将不断计算并发送通知,在数据达到阈值时进行告警

过滤器:过滤器允许动态创建新的键/值过滤器,这些过滤器将自动应用于使用该数据源的所有查询。
避免混淆各个组件主要的作用概念:
Exporter 数据生产者,采集需要监控的数据
Prometheus 普罗米修斯时序数据库,用来存储和查询的监控数据,从Exporter上拉取
Grafana 可视化工具仪表盘

5.3快速安装部署

 docker run -d -p 3000:3000 --name=nannanw-grafana grafana/grafana:8.1.5

 通过了浏览器访问http://IP+3000就能访问到登陆页面,默认用户名admin密码admin

5.4 配置prometheus数据源

 

 在这就可以看到设置后的数据源

5.5 Grafana的用户和组织

用户:

Grafana 里面用户有三种角色 admin,editor,viewer
admin 权限最高,可以执行任何操作,包括创建用户,新增 Datasource、DashBoard。
editor 角色不可以创建用户,不可以新增 Datasource,可以创建 DashBoard。
viewer 角色仅可以查看 DashBoard

新增用户后,可以分配角色

组织:
每个用户可以拥有多个 Organization,用户登录后可以在不同的 Organization 之间切换
不同的 Organization 之间完全不一样,包括 datasource,dashboard 等都不一样
创建一个 Organization 就相当于开了一个全新的视图,所有的 datasource,dashboard 等都要再重新开始创建

 5.6Grafana explore

explore和prometheus中的功能很相似

5.7Grafana最重要的dashboard

最重要 UI 界面 仪表盘,通过数据源定义好可视化的数据来源,Dashboard 来组织和管理数据可视化图表
仪表盘可以视为一组一个或多个面板组成的一个集合,来展示各种各样的面板。

第一步:

第二步:

再拖动到最下方点击'Use query'

然后就可以看到内存使用情况的图表展示

有没有发现,这样虽然可以展示出来,但是很麻烦?而且 样式没有那么炫酷,一个个调整起来也很费劲。

继续往下看~

 5.8 Grafana高效导入仪表盘

Grafana应用市场
地址:https://grafana.com/grafana/dashboards/

是Grafana社区和其他用户分享的可装载的仪表板和面板集合
Grafana模板使得共享可装载的仪表板变得容易,从而帮助用户减少了工作量,并促进了最佳设置和最佳配置的使用

举例:JVM相关监控仪表盘

点击  Copy ID to clipboard 

点击Import

在文本框中输入上一步的ID 点击load

然后就可以看到炫酷的仪表盘拉

根据上面的步骤,后续可以根据需要从应用市场中获取各个中间件的仪表数据进行展示

八、Promethus的监控告警Alertmanager

8.1 什么是Alertmanager

Prometheus的一个组件,用于定义和发送告警通知,内置多种第三方告警通知方式,同时还提供了对Webhook通知的支持
基于警报规则对规则产生的警报进行分组、抑制和路由,并把告警发送给合适的接收端,例如邮件、钉钉或Webhook

关键特点
分组:将详细的告警信息合并成一个通知,某些情况下,如由于系统宕机导致大量的告警被同时触发
抑制:当某一告警发出后,可以停止重复发送由此告警引发的其它告警的机制,避免告警轰炸
静默:根据标签对告警进行静默处理,如果接收到的告警符合静默的配置, Alertmanager则不会发送告警通知

8.2 Alertmanager安装

源码安装,默认端口9093
#解压
tar -zxvf alertmanager-0.24.0.linux-amd64.tar.gz
#启动
./alertmanager --config.file=alertmanager.yml
#守护进程方式启动
nohup ./alertmanager --config.file=alertmanager.yml &

访问 ip+port ,比如 http://112.74.xx.xxx:9093/#/alerts

8.3 Alertmanager邮件告警配置步骤

需求:部署的shop-project服务挂了,就触发邮件给开发人员

步骤:

1.Prometheus的rules.yaml编写告警规则,配置Prometheus,定义在哪些情况下被告警

Prometheus的rule.yaml(需要自己新建一个)配置文件

groups: # 告警规则组
- name: server-alarm
  rules: #规则,可以配置多个alert告警
  
  - alert: # 告警名称
    expr:  # 告警表达式,基于PromQL表达式告警触发条件,用于计算是否有时间序列满足该条件。
    for:  # 评估等待时间,可选,用于表示只有当触发条件持续一段时间后才发送告警,在等待期间新产生告警 的状态为pending。
    labels: #自定义标签,允许用户指定要附加到告警上的一组附加标签。
      severity:  # 告警严重程度
    annotations: #用于指定一组附加信息,比如用于描述告警详细信息的文字等
      summary: # 告警摘要
      description: # 告警详细描述

  配置Prometheus关联Alertmanager地址和rules规则启用   vim prometheus.yml

 动态更新配置 curl -X POST http://localhost:9090/-/reload

在这也可以看到

当前状态:

2.配置Alertmanager 添加Email、钉钉或者短信接收程序,为告警通知指定目标和通知媒介

Alertmanager的alertmanager.yml配置文件

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

global:
  smtp_smarthost: 'smtp.126.com:25' # SMTP服务器地址和端口
  smtp_from: '131131777337@126.com' # 显示在邮件“发件人”字段中的地址
  smtp_auth_username: '131131777337@126.com' # STMP认证时使用的用户名
  smtp_auth_password: 'VBZGEVZXTIEJFOHW' # SMTP认证时使用的密码,不是密码
  smtp_require_tls: false # SMTP服务器是否需要TLS加密

route:
  receiver: 'email' # 发送告警通知的收件人,和下面的接受者名称匹配
  group_wait: 10s # 在发送前等待各个警报的时间
  group_interval: 30s # 相同警报名称的警报发送间隔
  repeat_interval: 10m # 重复发送警报的时间间隔
  group_by: ['alertname'] # 根据警报名分组告警接收者

# 告警接收者
receivers:
- name: 'email' # 接收者名称
  email_configs:
  - to: '71111222333@qq.com' # 接收告警邮件的收件人

邮箱准备:126.com

 然后重启Alertmanager

 #启动
./alertmanager --config.file=alertmanager.yml

#守护进程方式启动
nohup ./alertmanager --config.file=alertmanager.yml &

 验证步骤:

停止spring boot程序(停止其他服务都可以)

查看prometheus

这是挂了后的 

查看alertmanager

查看邮件

到这就可以收到邮件告警提示拉~

九、Grafana的Alert监控告警

Grafana也有告警功能,两个组件各有优缺点
Grafana更适合于小规模或简单的监控系统,而Alertmanager更适合于大规模或更复杂的告警处理场景


9.1 Granfana的Alert和Alertmanager比对

Grafana
优点:简单易用,Grafana的告警规则配置界面直观易懂,可以方便地设置告警的触发条件、持续时间和通知方式等。
缺点:不支持高级告警逻辑。Grafana只能识别基于简单算术或表达式的逻辑,无法支持更复杂的逻辑。


Alertmanager
优点:提供高级告警逻辑功能,支持许多常用的高级告警逻辑,如静默、抑制和聚合等。
支持多通道分发告警,支持将告警通知分发到多个通道,如电子邮件,短信等,能够满足不同场景下的需求。
缺点:复杂和难以部署,Alertmanager的配置比Grafana更复杂,需要深入了解监控系统和告警系统。
学习成本高,Alertmanager需要学习更多的知识和技能才能掌握

9.2 Grafana的告警界面

9.3 Grafana新建推送通道

十、Grafana+钉钉群告警机器人

需求:使用Grafana的alert告警模块,检测应用是否存活
配置自动告警机器人,如果应用宕机超过1分钟,推送到钉钉群

10.1 实战步骤

先进一个钉钉群,然后添加机器人

选择自定义

IP地址段设置的意义就是,设置后 只有这个地址的才能往钉钉中推送消息。也可以自定义关键词,AND的关系。当自定义的关键词命中的时候,也可以往钉钉群里推送消息。三个复选框是AND的关系。

复制地址

10.2 Grafana新建推送通道

10.3 面板Panel配置告警规则

需要选中想要检测的服务

然后再创建Alert

IS ABOVE 填1。最新值在1之下的数据.选择 IS BELOW才可以!0表示服务挂了。

save后点击Test Rule

10.4 错误信息跳转

配置钉钉错误信息详情跳转连接:
docker exec -u 0 -it nannanw-grafana /bin/bash

需要修改容器中grafana的defaults.ini 

 将配置中domain = localhost 改成grafana部署的服务器IP地址即可

保存后需要退出容器。然后再重启容器

重启容器

10.5 结果验证

关闭服务

查看grafana alerting

然后钉钉群就收到告警提示拉!

点击连接之后,就可以直接跳转到Grafana的详细告警页面

到这本文就更新结束拉~主要介绍prometheus怎么和应用服务关联 以及 其它相关exporter关联起来,包括grafana中如何优雅的导入仪表盘 以及2种告警的配置~

相关文章:

  • Ansible自动化部署
  • pdf拆分,pdf拆分在线使用,pdf拆分多个pdf
  • 主干网络篇 | YOLOv5/v7 更换骨干网络之 MobileNetV3 | 基于神经网络搜索的轻量级网络
  • Ubuntu20.04安装vimplus插件
  • 多任务学习和迁移学习的原理
  • Windows传统DOS路径有效性检测(资源篇)
  • 服务器是否稳定怎么看
  • 将excel表格转换为element table(上)
  • springcloud-gateway 路由加载流程
  • 获取目标机器的ssh反弹权限后,如何通过一台公网服务器的服务 jar 包进行偷梁换柱植入目录进行钓鱼,从而获取目标使用人的终端设备权限和个人信息?
  • 记因hive配置文件参数运用不当导致 sqoop MySQL导入数据到hive 失败的案例
  • MySQL 基础概念
  • 编写动态库
  • YOLOv8 的简介 及C#中如何简单应用YOLOv8
  • 《深入浅出MySQL:数据库开发、优化与管理维护(第3版)》
  • python3.6+scrapy+mysql 爬虫实战
  • [数据结构]链表的实现在PHP中
  • 0基础学习移动端适配
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Docker 笔记(2):Dockerfile
  • Javascript基础之Array数组API
  • JavaScript设计模式之工厂模式
  • JS题目及答案整理
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • PHP变量
  • rc-form之最单纯情况
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • V4L2视频输入框架概述
  • Vue.js源码(2):初探List Rendering
  • 编写符合Python风格的对象
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 将 Measurements 和 Units 应用到物理学
  • 解析带emoji和链接的聊天系统消息
  • 如何设计一个比特币钱包服务
  • 三栏布局总结
  • 使用 Docker 部署 Spring Boot项目
  • 推荐一个React的管理后台框架
  • 我建了一个叫Hello World的项目
  • 一些css基础学习笔记
  • scrapy中间件源码分析及常用中间件大全
  • zabbix3.2监控linux磁盘IO
  • 说说我为什么看好Spring Cloud Alibaba
  • 组复制官方翻译九、Group Replication Technical Details
  • ​如何在iOS手机上查看应用日志
  • #{}和${}的区别?
  • #mysql 8.0 踩坑日记
  • (3)nginx 配置(nginx.conf)
  • (42)STM32——LCD显示屏实验笔记
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (蓝桥杯每日一题)love
  • (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (四)汇编语言——简单程序