文章目录
- 前言
- 一、Spring Boot Actuator
- 1. 简介
- 2. 添加依赖
- 2. 开启端点
- 3. 暴露端点
- 4. 总结
- 二、Prometheus
- 1. 简介
- 2. Prometheus客户端
- 3. Prometheus服务端
- 4. 总结
- 三、Grafana
- 1. 简介
- 2. Grafana安装
- 3. Grafana配置
前言
系统监控
在企业级的应用中,系统监控至关重要,可以帮助我们预防故障,预测变化趋势,在达到阈值的时候报警,为排查生产问题提供更多的信息。
同时也能看到系统问题,早做优化,避免更大的事故发生。
一、Spring Boot Actuator
1. 简介
Spring Boot包含了很多附加功能帮助我们监控和管理我们的应用,可以使用HTTP或者JMX等方式通过端点(endpoint)获取应用的健康状态以及其他指标收集。
Spring Boot Actuator模块就是Spring Boot提供的集成了上面所述的监控和管理的功能。像Spring Boot其他模块一样开箱即用,非常方便,通过Actuator就可以使用HTTP或者JMX来监控我们的应用。
JMX(Java Management Extensions):Java平台的管理和监控接口,任何程序只要按JMX规范访问这个接口,就可以获取所有管理与监控信息。
下面简单介绍Spring Boot Actuator是如何使用的,具体的使用方法见官方文档。
2. 添加依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
2. 开启端点
Spring Boot中监控应用或者与应用交互都是通过端点(endpoint)进行的,Spring Boot提供了非常多的原生端点,比如health,可以帮助我们监控应用的监控状态(是否可用),同时可以添加自定义的端点。每个端点都可以单独设置是否开启,并通过HTTP或者JMX暴露给外部系统。如果选择HTTP方式,则URL的前缀一般是/actuator,比如health的url地址就是/actuator/health。
默认情况下,除了shutdown
(让系统优雅的关闭) ,其他端点默认是开启的。我们可以通过 management.endpoint.<id>.enabled
设置某个端口的状态,比如开启shutdown端口。
management.endpoint.shutdown.enabled=true
# shutdown:开启actuator的停机组件,可以通过curl -X POST /actuator/shutdown来关闭服务。
# health:开启actuator的健康检测组件。
# metrics,prometheus:开启监控组件
management:
server:
# 采用与web服务不同的端口,该端口不暴露到K8S集群外部
port: 8888
# 开启优雅停机
shutdown: graceful
endpoint:
shutdown:
# 开启actuator的停机端口。
enabled: true
health:
defaults:
# 开启actuator的健康检测判定,默认为所有引入的组件(如redis)都作为健康与否的判定依据。
enabled: true
redis:
# 关闭actuator的特定组件健康检测判定,如redis如果健康情况不影响服务的运行,可以关闭。
enabled: false
metrics:
tags:
# 配置监控的tag,指向服务名称。
application: ${spring.application.name}
3. 暴露端点
开启端点后还必须暴露端点给HTTP或者JMX才能正常使用,但是端口可能包含一些敏感的数据,所以Spring Boot的原生端口默认只支持HTTP或者JMX。
如果要改变端口暴露的方式,使用 include
或者 exclude
属性,比如:
management.endpoints.jmx.exposure.include=*
management.endpoints.web.exposure.include=health,info,prometheus
management:
endpoints:
web:
# 设置是否暴露端点 默认只有health和info可见
exposure:
include: shutdown,health,metrics,prometheus
# GET /actuator/gateway/routes 查看路由清单
# GET /actuator/gateway/routes/{id} 查看特定Id路由详情
# GET /actuator/gateway/globalfilters
# GET /actuator/gateway/routefilters
# POST /actuator/gateway/refresh 刷新路由缓存
# POST /actuator/gateway/routes/{id} 增加路由
# DELETE /actuator/gateway/routes/{id} 删除路由
# GET /actuator/health 查看健康状态
# GET /actuator/metrics 查看指标列表
# GET /actuator/metrics/{metricsName} 查看指标
4. 总结
到目前为止,Spring Boot Actuator就配置好了,除了上述端点的开启和暴露方式
,还有HTTP,JMX,日志,指标(Metrics),权限,HTTP追踪,进程监控等功能,如果想了解更多,可以去官网进一步学习。
二、Prometheus
1. 简介
中文名普罗米修斯,是新一代的监控系统,与其他监控系统相比,具有易于管理,监控服务的内部运行状态,强大的数据模型,强大的查询语言PromQL,高效,可扩展,易于集成,可视化,开放性等众多功能。详细内容可见官网。
2. Prometheus客户端
在Spring Boot中,原生支持了prometheus端口,只需要通过如下配置,就可集成Prometheus,暴露给HTTP。
还需要配置 metrics
,因为如果没有这个参数,很多报表不能正常显示。
management:
endpoints:
web:
exposure:
include: "prometheus"
metrics:
tags:
application: ${spring.application.name}
这样通过,Spring Boot Actuator配置,开启和暴露prometheus和metrics端点,就把Prometheus的客户端配置好了。
3. Prometheus服务端
服务端,这里我们使用docker方式。
- prometheus.yml
需要配置文件prometheus.yml。
scrape_configs:
# 任意写,建议英文,不要包含特殊字符
- job_name: 'jobName'
# 采集的间隔时间
scrape_interval: 15s
# 采集时的超时时间
scrape_timeout: 10s
# 采集路径
metrics_path: '/actuator/prometheus'
# 采集服务的地址,也就是我们应用的地址
static_configs:
- targets: ['localhost:8080']
- docker-compose.yml
创建docker-compose.yml,注意prometheus.yml与docker-compose.yml的相对路径,如果放在同样的目录下,volumes则为- ‘./prometheus.yml:/etc/prometheus/config.yml’。
version: '3.3'
services:
prometheus:
image: 'prom/prometheus:v2.14.0'
ports:
- '9090:9090'
command: '--config.file=/etc/prometheus/config.yml'
volumes:
- './prometheus.yml:/etc/prometheus/config.yml'
- 启动
直接使用命令docker-compose up -d启动即可。
- 测试
启动之后,在浏览器中访问http://localhost:9090。
然后,通过查询关键字,可以查看不同指标的监控数据,比如jvm_memory_used_bytes。
4. 总结
这样,就通过Prometheus已经可以看到Spring Boot不同指标的监控数据了。但Prometheus的可视化还是比较粗糙,需要通过Grafana,才可以实现完美的可视化仪表盘。
三、Grafana
1. 简介
Grafana是一个可视化面板,可以展示非常漂亮的图标和布局,支持Prometheus,SQL(MySQL,PostgreSQL)等作为数据源。
有如下特点:
-
可视化:非常精美的各种组件可供选择,比如图表,文本,提醒事项,还有灵活的布局,可以自由配置你的可视化面板。
-
数据源:目前支持Prometheus,Graphite,Loki,Elasticsearch,MySQL,PostgreSQL,Stackdriver和TestData DB等多种数据源。
-
通知提醒:通过可视化的方式配置通知规则,在数据达到阈值时,将配置好的信息发送给指定管理员。
-
混合数据源:在同一个图中混合不同的数据源,基于每个查询指定数据源。
2. Grafana安装
使用docker compose的方式安装。
- docker-compose.yml
此处可以与Prometheus合并到一个docker compose中:
version: '3.3'
services:
prometheus:
image: 'prom/prometheus:v2.14.0'
ports:
- '9090:9090'
command: '--config.file=/etc/prometheus/config.yml'
volumes:
- './prometheus.yml:/etc/prometheus/config.yml'
grafana:
image: 'grafana/grafana:6.5.0'
ports:
- '3000:3000'
- 启动
通过命令docker-compose up -d启动。
- 测试
启动之后,在浏览器中访问http://localhost:3000,并使用初始账号admin:admin登录。
3. Grafana配置
- 配置数据源
登录Grafana之后,选择添加数据源,选择Prometheus。
输入数据源名称(任意),Prometheus的url地址,然后点击添加保存。
- 配置仪表盘
在这里有两个选择,其一是创建新的仪表盘,选择不同的组件,设置布局,还有一种方式是选择Grafana官方或者社区提供的仪表盘,而且他们的样式都十分精美,可以直接导入。这里我们选择导入仪表盘,因为我们是Java应用,重点关注的肯定是JVM相关的指标,所以我们搜索JVM,通过安装量进行排序。
点击第一个,这个仪表盘包含了JVM,线程,CPU等指标,我们就导入这个,当然你也可以选择其他的仪表盘或者自建。
在Grafana.com Dashboard处输入4701。
选择数据源,点击导入。
最终呈现的仪表盘就如下图:
本文的引用仅限自我学习如有侵权,请联系作者删除。
参考知识
使用 Prometheus + Grafana + Spring Boot Actuator 监控应用