本文主要介绍了使用Prometheus怎么监听应用服务和中间件。当使用Grafana时,怎么优雅快速的导入仪表盘以及设置阈值触发告警-将告警信息推送到邮件或者钉钉
安装步骤:
配置go环境变量(Prometheus使用go语言开发)
安装Prometheus:
#解压
tar -zxvf prometheus-2.43.0.linux-amd64.tar.gz#重命名
mv prometheus-2.43.0.linux-amd64 prometheus#查看是否启动成功,默认端口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
操作面板:
常见的配置:
#全局配置,默认,可以被覆盖
global:
scrape_interval: 15s #全局的抓取间隔
scrape_timeout: 10s #抓取超时时间
evaluation_interval: 15s #评估间隔
向Prometheus提供监控样本数据的程序都可以被称为一个Exporter
它是Prometheus的指标数据收集组件,负责从目标Jobs收集数据
并把收集到的数据转换为Prometheus支持的时序数据格式
只负责收集,并不向Server端发送数据,而是等待Prometheus Server 主动抓取
Prometheus社区以及其他团队开发了大量的Exporter,覆盖了许多不同类型的系统和服务
比如:Node Exporter、MySQL Exporter、Redis Exporter、MongoDB Exporter、Nginx Exporter...
node_exporter 用于采集类UNIX内核的硬件以及系统指标,包括CPU、内存和磁盘
步骤:
#确认端口
lsof -i:9100
通过浏览器访问 http://IP+9100/metrics可以查看到监控信息
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是否有对应的数据
一样的步骤:
对应的机器安装exporter
启动exporter 并监听对应的程序
访问对应的exporter的metric路径,看是否返回数据
Prometheus配置新的job
访问Prometheus查看target和configuration是否有数据
Promethus整合SpringBoot3.X应用监控
<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, 查看详情
检查当前服务是否存活。继承AbstractHealthIndicator类,覆盖doHealthCheck方法,里面可以自定义up down。具体根据业务来设置即可
@Component
public class NanNanMQIndicator extends AbstractHealthIndicator {
@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
//对比两个不同方法
builder.up().withDetail("MQ中间件","这个自带高可用");
}
}
@Component
public class NanNanMQIndicator extends AbstractHealthIndicator {
@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
//对比两个不同方法
builder.down().withDetail("DOWN MQ中间件","这个自带高可用");
}
}
<!--整合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将不断计算并发送通知,在数据达到阈值时进行告警
过滤器:过滤器允许动态创建新的键/值过滤器,这些过滤器将自动应用于使用该数据源的所有查询。
避免混淆各个组件主要的作用概念:
Exporter 数据生产者,采集需要监控的数据
Prometheus 普罗米修斯时序数据库,用来存储和查询的监控数据,从Exporter上拉取
Grafana 可视化工具仪表盘
docker run -d -p 3000:3000 --name=nannanw-grafana grafana/grafana:8.1.5
通过了浏览器访问http://IP+3000就能访问到登陆页面,默认用户名admin密码admin
在这就可以看到设置后的数据源
用户:
Grafana 里面用户有三种角色 admin,editor,viewer
admin 权限最高,可以执行任何操作,包括创建用户,新增 Datasource、DashBoard。
editor 角色不可以创建用户,不可以新增 Datasource,可以创建 DashBoard。
viewer 角色仅可以查看 DashBoard
新增用户后,可以分配角色
组织:
每个用户可以拥有多个 Organization,用户登录后可以在不同的 Organization 之间切换
不同的 Organization 之间完全不一样,包括 datasource,dashboard 等都不一样
创建一个 Organization 就相当于开了一个全新的视图,所有的 datasource,dashboard 等都要再重新开始创建
explore和prometheus中的功能很相似
最重要 UI 界面 仪表盘,通过数据源定义好可视化的数据来源,Dashboard 来组织和管理数据可视化图表
仪表盘可以视为一组一个或多个面板组成的一个集合,来展示各种各样的面板。
第一步:
第二步:
再拖动到最下方点击'Use query'
然后就可以看到内存使用情况的图表展示
有没有发现,这样虽然可以展示出来,但是很麻烦?而且 样式没有那么炫酷,一个个调整起来也很费劲。
继续往下看~
是Grafana社区和其他用户分享的可装载的仪表板和面板集合
Grafana模板使得共享可装载的仪表板变得容易,从而帮助用户减少了工作量,并促进了最佳设置和最佳配置的使用
举例:JVM相关监控仪表盘
点击 Copy ID to clipboard
点击Import
在文本框中输入上一步的ID 点击load
然后就可以看到炫酷的仪表盘拉
根据上面的步骤,后续可以根据需要从应用市场中获取各个中间件的仪表数据进行展示
Prometheus的一个组件,用于定义和发送告警通知,内置多种第三方告警通知方式,同时还提供了对Webhook通知的支持
基于警报规则对规则产生的警报进行分组、抑制和路由,并把告警发送给合适的接收端,例如邮件、钉钉或Webhook
关键特点
分组:将详细的告警信息合并成一个通知,某些情况下,如由于系统宕机导致大量的告警被同时触发
抑制:当某一告警发出后,可以停止重复发送由此告警引发的其它告警的机制,避免告警轰炸
静默:根据标签对告警进行静默处理,如果接收到的告警符合静默的配置, 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
需求:部署的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: # 告警详细描述
动态更新配置 curl -X POST http://localhost:9090/-/reload
在这也可以看到
当前状态:
2.配置Alertmanager 添加Email、钉钉或者短信接收程序,为告警通知指定目标和通知媒介
Alertmanager的alertmanager.yml配置文件
主要包含两个部分:路由(route) + 接收器(receivers)
告警信息会从配置中的顶级路由(route)进入路由树,根据路由规则将告警信息发送给相应的接收器
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也有告警功能,两个组件各有优缺点
Grafana更适合于小规模或简单的监控系统,而Alertmanager更适合于大规模或更复杂的告警处理场景
Grafana
优点:简单易用,Grafana的告警规则配置界面直观易懂,可以方便地设置告警的触发条件、持续时间和通知方式等。
缺点:不支持高级告警逻辑。Grafana只能识别基于简单算术或表达式的逻辑,无法支持更复杂的逻辑。
Alertmanager
优点:提供高级告警逻辑功能,支持许多常用的高级告警逻辑,如静默、抑制和聚合等。
支持多通道分发告警,支持将告警通知分发到多个通道,如电子邮件,短信等,能够满足不同场景下的需求。
缺点:复杂和难以部署,Alertmanager的配置比Grafana更复杂,需要深入了解监控系统和告警系统。
学习成本高,Alertmanager需要学习更多的知识和技能才能掌握
需求:使用Grafana的alert告警模块,检测应用是否存活
配置自动告警机器人,如果应用宕机超过1分钟,推送到钉钉群
先进一个钉钉群,然后添加机器人
选择自定义
、
需要选中想要检测的服务
然后再创建Alert
IS ABOVE 填1。最新值在1之下的数据.选择 IS BELOW才可以!0表示服务挂了。
save后点击Test Rule
配置钉钉错误信息详情跳转连接:
docker exec -u 0 -it nannanw-grafana /bin/bash
需要修改容器中grafana的defaults.ini
保存后需要退出容器。然后再重启容器
重启容器
关闭服务
查看grafana alerting
然后钉钉群就收到告警提示拉!
点击连接之后,就可以直接跳转到Grafana的详细告警页面
到这本文就更新结束拉~主要介绍prometheus怎么和应用服务关联 以及 其它相关exporter关联起来,包括grafana中如何优雅的导入仪表盘 以及2种告警的配置~