SpringBoot+Prometheus+Grafana实现系统可视化监控

Posted by Kaka Blog on September 18, 2023

前言

Prometheus

Prometheus,是一个开源的系统监控和告警的工具包,其采用Pull方式采集时间序列的度量数据(也支持push方式),

通过Http协议传输。它的工作方式是被监控的服务需要公开一个Prometheus端点,这端点是一个HTTP接口,

该接口公开了度量的列表和当前的值,然后Prometheus应用从此接口定时拉取数据,一般可以存放在时序数据库中,

然后通过可视化的Dashboard(e.g.Grafana)进行数据展示。

Grafana

grafana,是一个开源的dashboard展示工具,可以支持很多主流数据源,包括时序性的和非时序性的。

其提供的展示配置以及可扩展性能满足绝大部分时间序列数据展示需求,是一个比较优秀的工具。

实现

SpringBoot项目

1、添加依赖:

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>2.3.4.RELEASE</version>
	<relativePath/> <!-- lookup parent from repository -->
</parent>

  ···
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--整合prometheus-->
<dependency>
	<groupId>io.micrometer</groupId>
	<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

注意这里的SpringBoot版本为2.3.4.RELEASE,prometheus默认为1.5.5版本

2、配置文件:

management.endpoints.web.exposure.include=*
management.metrics.tags.application=${spring.application.name}

3、启动项目,访问:http://localhost:8080/actuator/prometheus,版本一致的话可以看到页面显示的信息。

启动Prometheus

1、这里采用docker方式启动:

docker run -d -p 9090:9090 --name prom prom/prometheus

2、配置prometheus.yml内容

先从docker容器获取配置文件:

docker cp prom:/etc/prometheus/prometheus.yml .
# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
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=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    metrics_path: /actuator/prometheus

    static_configs:
      - targets: ["192.168.10.226:8080"]

该文件是从docker容器里复制出来的,然后修改metrics_path和static_configs,targets为SpringBoot项目IP和端口

3、启动时映射本地目录

docker run -d -p 9090:9090 -v D:\Project\Prometheus\prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

访问Prometheus界面:http://localhost:9090,转到Status > Targets可以看到SpringBoot项目Endpoint的状态列表。

启动Grafana

1、访问Grafana官方网站(https://grafana.com/grafana/download/),下载适合你操作系统的Grafana版本。这里采用docker部署:

docker run -d --name=grafana -p 3000:3000 grafana/grafana-enterprise

2、配置Grafana数据源

访问http://localhost:3000,登录Grafana,用户名密码均为admin,点击Add data source,选择Prometheus作为数据源类型。

在URL字段中,输入Prometheus实例的地址:http://192.168.10.27:9090,因为是用docker部署,所以不能用localhost,得用主机IP地址。

点击Save & Test按钮以测试和保存数据源配置。

创建Dashboard,点击New dashboard按钮创建一个新的Dashboard。首先去https://grafana.com/grafana/dashboards/ 去搜索,例如我们这里使用micrometer,咱就搜索micrometer,然后选择一个你中意的,copy它的id。这里使用的是:https://grafana.com/grafana/dashboards/11378-justai-system-monitor/,ID为11378。

img