当面对一个复杂的系统时,我们往往需要监控工具来帮助我们解决一些性能问题。比如之前我们使用
SpringBoot Admin
来监控应用,从而获取到SpringBoot Actuator
暴露的指标信息。今天给大家介绍一个功能强大的监控工具Grafana,只要需要用到监控的地方,用它做可视化就对了!
Grafana是一款开源的数据可视化和分析工具,不管你的指标信息存储在哪里,你都可以用它来可视化这些数据。同时它还具有告警功能,当指标超出指定范围时会提醒你。
Prometheus是一款时序数据库,可以简单理解为带时间的MySQL数据库。由于Grafana只能将数据转换成可视化图表,并没有存储功能,所以我们需要结合Prometheus这类时序数据库一起使用。
使用Docker安装Grafana和Prometheus无疑是最简单的,我们接下来将采用此种方式。
docker pull grafana/grafana
docker run -p 3000:3000 --name grafana \
-d grafana/grafana
docker pull prom/prometheus
/mydata/prometheus/
目录下创建Prometheus的配置文件prometheus.yml
:global:
scrape_interval: 5s
prometheus.yml
挂载到容器中去;docker run -p 9090:9090 --name prometheus \
-v /mydata/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
-d prom/prometheus
admin:admin
,访问地址:http://192.168.5.78:3000/Grafana已经安装完后,是时候来波实践了,接下来我们来介绍下使用Grafana来监控Linux系统和SpringBoot应用。
使用
node_explorer
可以暴露Linux系统的指标信息,然后Prometheus就可以通过定时扫描的方式获取并存储指标信息了。
node_explorer
的安装包,下载地址:https://prometheus.io/download/#node_exporternode_explorer
安装到Linux服务器上(如果使用Docker容器安装,监控的会是Docker容器的指标信息),将下载的安装包解压到指定目录,并修改文件夹名称:cd /mydata
tar -zxvf node_exporter-1.1.2.linux-amd64.tar.gz
mv node_exporter-1.1.2.linux-amd64 node_exporter
node_explorer
,服务将运行在9100
端口上;cd node_exporter
./node_exporter >log.file 2>&1 &
curl
命令访问获取指标信息接口,获取到信息表示运行成功;curl http://localhost:9100/metrics
# HELP promhttp_metric_handler_requests_in_flight Current number of scrapes being served.
# TYPE promhttp_metric_handler_requests_in_flight gauge
promhttp_metric_handler_requests_in_flight 1
# HELP promhttp_metric_handler_requests_total Total number of scrapes by HTTP status code.
# TYPE promhttp_metric_handler_requests_total counter
promhttp_metric_handler_requests_total{code="200"} 2175
promhttp_metric_handler_requests_total{code="500"} 0
promhttp_metric_handler_requests_total{code="503"} 0
prometheus.yml
,创建一个任务定时扫描node_explorer
暴露的指标信息;scrape_configs:
- job_name: node
static_configs:
- targets: ['192.168.5.78:9100']
加号->Dashboard
来创建仪表盘;Node Exporter Full
这个仪表盘,记住它的ID,访问地址:https://grafana.com/grafana/dashboards/1860Load
即可;Import
;监控SpringBoot应用需要依靠
actuator
及micrometer
,通过暴露actuator
的端点,Prometheus可以定时获取并存储指标信息。
pom.xml
文件,添加actuator
及micrometer
依赖;<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- 集成micrometer,将监控数据存储到prometheus -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
</dependencies>
application.yml
,通过actuator
暴露监控端口/actuator/prometheus
;management:
endpoints:
web:
exposure:
# 暴露端点`/actuator/prometheus`
include: 'prometheus'
metrics:
tags:
application: ${spring.application.name}
docker run -p 8088:8088 --name mall-tiny-grafana \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/mall-tiny-grafana/logs:/var/logs \
-e TZ="Asia/Shanghai" \
-d mall-tiny/mall-tiny-grafana:1.0-SNAPSHOT
prometheus.yml
,创建一个任务定时扫描actuator
暴露的指标信息,这里需要注意下,由于SpringBoot应用运行在Docker容器中,需要使用docker inspect mall-tiny-grafana |grep IPAddress
来获取容器IP地址;scrape_configs:
# 采集任务名称
- job_name: 'mall-tiny-grafana'
# 采集时间间隔
scrape_interval: 5s
# 采集超时时间
scrape_timeout: 10s
# 采集数据路径
metrics_path: '/actuator/prometheus'
# 采集服务的地址
static_configs:
- targets: ['172.17.0.5:8088']
通过对Grafana的一波实践,我们可以发现,使用Grafana来进行数据可视化的过程是这样的:首先我们得让被监控方将指标信息暴露出来,然后用Prometheus定时获取并存储指标信息,最后将Prometheus配置为Grafana的可视化数据源。
https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-grafana