springboot下micrometer+prometheus+grafana进行jvm监控的操作过程
阅读数:304 评论数:0
跳转到新版页面分类
python/Java
正文
一、概述
Micrometer是一个用于应用程序度量的度量库,可以帮助开发者监控应用程序的各种指标。在Spring Boot 2中,我们可以使用Micrometer Tracing来实现分布式追踪,以便更好地了解应用程序的性能和调用链。
二、Actuator
spring-boot-starter-actuator是Spring boot提供的模块,用于监控和管理应用程序的运行信息,它提供了内置的endpoints,可用于获取程序的健康状态、性能指标、配置信息等。
通过 @SpringBootApplication 注解,它自动启用了 Spring Boot的自动配置和组件扫描功能。
接下来,需要添加一些配置来启用 Actuator 端点。在 application.properties 或 application.yml 文件中,添加以下配置:
上述配置将所有的 Actuator 端点暴露给 Web 端口,以便通过 HTTP 请求访问它们。
现在,可以启动应用程序并尝试访问 Actuator 端点。以下是一些常用的 Actuator 端点:
|
|
|
|
|
|
|
|
此外,spring-boot-starter-actuator 还提供了其他一些功能,如远程 shell,审计日志,配置刷新等。可以根据需要在应用程序中进行配置和使用。
请注意,为了保证应用程序的安全性,强烈建议在生产环境中限制对 Actuator 端点的访问,并仅暴露必要的端点。
三、Micrometer
在Spring Boot 2中,Micrometer已经成为了默认的度量库,因此我们无需额外添加依赖,仅需引入actuator。
它为流行的监控系统提供简易的测量客户端。
监控数据的整个过程都是围绕着Meter(指标),通过一个一个的Meter(指标)数据来进行观察应用的状态。
(1)常见的指标类型
Counter(计数器) | 单一计数指标,允许按固定数量递增,用来统计无上限数据 |
Gauge(仪表盘) | 用于统计有上限可增可减的数据。 |
Timer(计时器) | 用于测量短时延迟和事件频率 |
(2)指标的命名
在Micrometer中,Meter的命名约定使用英语逗号分隔(".")。但对于不同监控系统,各自的命名规范有所不同,因此指标的命名会通过底层的接口(NamingConvention)进行转换,默认是蛇形命名,如果想要适配不同的监控系统,可以自定义注册表(MeterRegistry)中的命名转换。
可以添加多个注册表,用于将各个注册表组合起来, |
|
当使用普罗米修斯监控时,引入 |
Mircrometer通过Tag(标签)实现了多维度的度量数据收集,通过Tag的命名可以推断出其指向的数据代表什么维度或是什么类型的度量指标(Meter)
四、Prometheus
https://prometheus.io/download/
Prometheus
是一个开源的系统监控和报警系统。
Prometheus Server |
用于收集和存储时间序列数据 |
pushgateway |
各个目标主机可上报数据到pushgateway,然后prometheus server统一从pushgateway拉取数据。 |
Exporters |
prometheus支持多种exporter,通过exporter可以采集metrics数据,然后发送到prometheus server端,所有向promtheus server提供监控数据的程序都可以被称为exporter |
Alertmanager |
从 Prometheus server 端接收到 alerts 后,会进行去重,分组,并路由到相应的接收方,发出报警,常见的接收方式有:电子邮件,微信,钉钉, slack等。 |
Grafana |
监控仪表盘,可视化监控数据 |
zabbix | prometheus |
后端用C开发,界面用PHP开发,定制化难度很高 | 后面用golang开发,前端是grafana,json编辑即可解决,定制化难度较低 |
集群规模上限为10000个节点 | 支持更大的集群规模,速度也更快 |
更适合监控物理机环境 | 更适合云环境的监控,对openstack,k8s有更好的集成 |
监控数据存在关系型数据库内 | 监控数据存在时序数据库内 |
安装简单,一个软件包中包括了所有服务端功能 | 安装相对复杂,监控、告警和界面都分属不同的组件 |
界面上基本能完成全部的配置操作 | 很多配置需要修改配置文件 |
五、Grafana
https://grafana.com/grafana/download
Grafana是一款开源的数据可视化工具,使用Grafana可以非常轻松的将数据转成图表
下载grafana-enterprise-8.4.3.linux-amd64.tar.gz
安装包:
Grafana 默认使用 3000 端口启动,开放3000端口:
我们访问:http://192.168.2.186:3000
查看对应页面:
默认的账号密码是 admin/admin
之后我们去设置菜单添加 Prometheus 数据源:
在 Grafana 中有「Dashboard」和「Panel」的概念,Dashboard 可以理解成「看板」,而 Panel 可以理解成
「图表」,一个看板中包含了无数个图表,里面一个个小的图表,就是一个个小的图表(Panel)。
点击「+ 号」-> 「Dashboard」就可以添加一个大面板。
我们设置好数据源、Metrics 数据(rate(process_cpu_seconds_total[1m]))、图表名称,之后点击右上角的
Apply 按钮即可。
保存之后我们就可以在面板中看到机器的 CPU 使用率情况了:
对于线上监控来讲,如果我们每个面板都需要自己从零开始,那么就太累了。事实上,我们用到的许多监控信息都是类似的。因此 Grafana 官网 - Dashboards 模块 提供了下载 Dashboard 模板的功能。
https://grafana.com/grafana/dashboards/
Dashboards 里有许多各种类型的 Dashboard 面板,例如 JVM 监控、MySQL 数据库监控等。你只需找到合适自己的监控面板,下载json,然后导入。
六、springboot项目自定义埋点
(1)业务层
(2)控制层
启动springboot服务,访问页面http://localhost:7000/monitor/prometheus
可以看到prometheus类型的自定义的指标,除了自定义的指标spring-boot-starter-actuator还监控了一些java的基本状态如内容,线程数等等
进入prometheus路径下,修改配置文件prometheus.yml,添加springboot监控指标数据路径
保存配置文件并启动prometheus服务,访问页面http://localhost:9090/
菜单栏选择Status->Targets,可以看到prometheus与springboot-demo都在线
点击springboot-demo的Endpoint就可以看到拉取到的指标数据
6、更进一步,使用grafana订阅prometheus数据源,创建仪表板实现数据可视化
(1)配置数据源
进入grafana的bin路径下,执行grafana-server.exe
访问页面http://localhost:3000/
默认账号密码是admin
添加prometheus数据源,配置prometheus服务的url http://localhost:9090
(2)导入仪表板模版,实现基本数据的可视化
访问grafana仪表板页面:https://grafana.com/grafana/dashboards/
搜索JVM (Micrometer),下载仪表板的json文件
下载得到JSON文件jvm-micrometer_rev9.json,回到grafana页面导入json,选择之前新建的数据源
导入之后就可以查看到从springboot拉取到的基本数据的可视化
(3)新建仪表板(dashboard),新建画布(panel),实现自定义指标数据的可视化
新建一个仪表板和一个画布,新增对指标名为test.thread.pool.s1.size、test.thread.pool.s2.size的两个查询
编辑完后保存,由于两个指标一开始默认为0,如果想要看到变化就需要执行url请求来改变其数值
向springboot服务发送http://localhost:9091/monitor/request请求
此时再查看画布(pannel)会发现两个指标数值发生了变化