• 作者:老汪软件技巧
  • 发表时间: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:

普罗米修斯监控flink__普罗米修斯监控部署

点击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(...)) :

修改后就可以看到有数据了。

参考文章: