- 作者:老汪软件技巧
- 发表时间:2024-08-29 11:02
- 浏览量:
本文主要内容搭建springboot以及mysql运行的状态监控,主要涉及以下内容:
全程干货无废话。
整体架构:可以看到prometheus抓取数据,通过grafana的dashborad展示:
prometheus + grafana + springboot安装prometheus
首先在宿主机的目录下(这里的目录需要和启动命令中的-v参数的目录保持一致)创建prometheus.yml文件、这个文件用于配置后续要从哪些地方收集数据、配置如下:
global:
scrape_interval: 15s
evaluation_interval: 15s
# 报警配置
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=` to any timeseries scraped from this config.
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
### 以下内容为springboot的配置,主要是这个地方
- job_name: 'springboot_promethues'
scrape_interval: 5s
metrics_path: '/actuator/prometheus'
static_configs:
# 容器的ip地址、不能写localhost、不能写127.0.0.1
- targets: ['192.168.1.4:7777']
这里需要注意的地方在于在写target时、需要分清楚ip地址、我们一般是把容器的某个端口映射到主机上、那么写的ip是宿主机的ip+端口号,因为我们这里是以容器的方式启动prometheus的、如果是macos可通过此命令获取ifconfig | grep 192.168,如下图所示:
配置文件编写无误后、通过如下命令启动prometheus:
sudo docker run -d --name=springboot-prometheus --network springboot-monitor-system-network -v /opt/docker/prometheus-grafana/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml -p 9090:9090 bitnami/prometheus:2.47.2
在浏览器输入localhost:9090可以看到如下页面:
点击【status】===》【targets】 就可以看到当前配置文件中我们监听的服务、图中圈出来的就是我们最终要的效果。正常启动后、进行下一步。
启动springboot项目
第一部分搭建一个springboot应用、需要在springboot项目中引入如下依赖:
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
<dependency>
<groupId>io.micrometergroupId>
<artifactId>micrometer-registry-prometheusartifactId>
dependency>
在配置文件中添加如下配置:
spring:
application:
name: springboot-prometheus
#对外暴露哪些指标
management:
endpoints:
web:
exposure:
include: "*"
#激活promethues并转换为对应的promethues数据
endpoint:
prometheus:
enabled: true
health:
show-details: always
#允许对应的数据指标被导出
metrics:
export:
prometheus:
enabled: true
添加一个bean配置
@Bean
MeterRegistryCustomizer configurer(
@Value("${spring.application.name}") String name) {
return registry -> registry.config().commonTags("application", name);
}
启动项目,在浏览器输入localhost:7777/actuator,就可以看到相关的监控指标:
圈出来的这一部分和prometheus.yml中的配置项是不是一致的?此时从浏览器就可以看到我们需要的springboot服务。
安装grafana
执行如下命令、安装并运行grafana:
docker run -d --name=grafana-prometheus -p 3000:3000 grafana/grafana:10.2.0
运行成功后输入localhost:3000,在浏览器可以看到登录界面:默认的账户名和密码是admin/admin
点击侧边栏如下图:
接着如下配置:
点击最下方的test/save即可。接着创建dashboard:
点击import dashboard,在搜索栏输入4701,点击load,就可以看到提供的配置,当然你也可以自己写配置文件进行自定监控。4701是已经写好的一个配置文件项目。
最终的配置如下,记得选择数据源。
点击import,就可以看到如下的页面:
到这里就完成了对springboot服务的监控。
mysql_exporter + node_exporter安装mysql_exporter
通过docker-compose.yml安装mysql_exporter:
version: '3.8'
services:
mysql_exporter:
image: prom/mysqld-exporter:latest
container_name: mysql_exporter
ports:
- "9104:9104"
# - '--collect.perf_schema.events_statements'
command:
- '--collect.engine_innodb_status'
- '--collect.info_schema.processlist'
- '--collect.info_schema.tables'
- '--collect.info_schema.query_response_time'
- '--collect.perf_schema.file_events'
- '--collect.perf_schema.eventsstatements'
- '--collect.perf_schema.indexiowaits'
- '--collect.global_status'
# - '--ignore-tables="^(information_schema|performance_schema|mysql)"'
- '--config.my-cnf=/etc/mysql/.my.cnf'
volumes:
- /opt/docker/prometheus-grafana/mysqlexport/.my.cnf:/etc/mysql/.my.cnf
environment:
- DATA_SOURCE_NAME=root:root123!@(192.168.1.4:3306)/
# restart: always
[client]
host=192.168.1.4
port=3306
user=root
password=root123!
修改prometheus.yml文件:
- job_name: 'mysql_exporter'
static_configs:
- targets: ['192.168.1.4:9104']
# node_export的配置一起拿过来了
- job_name: 'node_exporter'
static_configs:
- targets: ['192.168.1.4:9100']
通过docker-compose up -d启动服务。在grafana的dashboard里面通过import在搜索栏输入7362点击load,并配置数据源点import。
(这里因为我之前创建了一个同名的,所以报错,您们第一次是不会的)就可以看到如下界面:
注意Buffer Pool Size of Total RAM这一项、这一项的计算公式【点击此tab右上角三个点、点击edit即可看到】:
(mysql_global_variables_innodb_buffer_pool_size{instance="$host"} * 100) / on (instance) node_memory_MemTotal_bytes{instance="$host"}
安装node_exporter
安装node_exporter,通过docker-compose安装,配置文件如下:
version: '3.8'
services:
node_exporter:
image: quay.io/prometheus/node-exporter:latest
container_name: node_exporter
command:
- '--path.rootfs=/host'
# network_mode: host
environment:
- TZ=Asia/Shanghai
ports:
- 9100:9100
pid: host
restart: unless-stopped
volumes:
- '/:/host:ro,rslave'
通过docker-compose up -d 运行修改tabbar公式:
原公式修改为如下:图中的是没改的
(label_replace(mysql_global_variables_innodb_buffer_pool_size{instance="$host"}, "nodename", "$1", "instance", "(.*):.*") * 100) / on(nodename) (label_replace(node_memory_MemTotal_bytes, "nodename", "$1", "instance", "(.*):.*"))
公式解释:以下内容来自于GPT
mysql_global_variables_innodb_buffer_pool_size{instance="$host"} :
label_replace(mysql_global_variables_innodb_buffer_pool_size{instance="$host"}, "nodename", "$1", "instance", "(.*):.*") :
(label_replace(...) * 100) :
on(nodename) :
label_replace(node_memory_MemTotal_bytes, "nodename", "$1", "instance", "(.*):.*") :
(label_replace(...) * 100) / on(nodename) (label_replace(...)) :
修改后就可以看到有数据了。
参考文章: