前置环境

这里我直接购买的2台阿里云ECS(2核2G)服务器(开放 8080、9090、3000 安全组),不舍得花钱的小伙伴可以使用虚拟机,服务器上环境主要分为4部分:

  • SpringBoot:需要被监控指标数据的 SpringBoot 服务
  • Docker:服务器环境中进程启动通过 Docker 进行
  • Prometheus:负责采集存储 SpringBoot 服务的指标数据
  • Grafana:负责将 Prometheus 采集的数据进行可视化展现

2台服务器IP地址信息如下:

  • 服务器1:公网IP(47.95.221.16),内网IP(172.21.180.99)
  • 服务器2:公网IP(39.105.202.53),内网IP(172.21.180.100)

1、创建 SpringBoot

具体创建SpringBoot项目流程操作这里就省略了,我创建的 SpringBoot 版本是2.7.9,首先在SpringBoot项目的application.yml中声明端口号、服务名等信息,配置如下:

# 端口号
server:
  port: 8080

# 服务名
spring:
  application:
    name: SpringBoot Prometheus

# 端点监控指标
management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    prometheus:
      enabled: true
    health:
      show-details: always
  metrics:
    export:
      prometheus:
        enabled: true

SpringBoot项目的pom.xml中,引入Maven依赖:

<dependencies>
    <!--SpringBoot Web-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!--Actuator:暴露端点指标数据-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    <!--Prometheus-->
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-registry-prometheus</artifactId>
        <scope>runtime</scope>
    </dependency>
</dependencies>

调整启动类:

import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class PrometheusProjectApplication {

    public static void main(String[] args) {
        SpringApplication.run(PrometheusProjectApplication.class, args);
    }

    @Bean
    MeterRegistryCustomizer<MeterRegistry> configurer(@Value("${spring.application.name}") String applicationName) {
        return registry -> registry.config().commonTags("application", applicationName);
    }
}

此时启动SpringBoot项目,访问以下URL,就可以看到应用的指标数据信息了:

2、安装 Docker

这里不详细说明如何安装,流程参考该博客第1章节内容:
https://blog.csdn.net/weixin_46594796/article/details/122750009

3、Docker 启动 SpringBoot

将需要被监控的 SpringBoot 项目通过 Maven 构建成 Jar 包,先在 pom.xml 加入打包构建配置:

<build>
    <finalName>SpringBoot-Prometheus</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

接着通过该命令构建 JAR 包:

mvn clean package -Dmaven.test.skip=true

构建完毕后,会看到 targe 目录下生成了当前项目对应的 JAR 文件:
在这里插入图片描述
然后将 JAR 文件上传到 服务器1 的根目录(~)下,然后执行下述命令构建 Dockerfile:

# 创建文件夹
mkdir /opt/springboot

# 移动 JAR 包
cd ~
mv springboot-prometheus.jar /opt/springboot/

# 构建 Dockerfile
cat > /opt/springboot/Dockerfile <<-'EOF'
FROM openjdk:17
ADD springboot-prometheus.jar /springboot-prometheus.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "springboot-prometheus.jar"]
EOF

配置好 Dockerfile 文件后,通过下述命令构建 SpringBoot 容器镜像:

cd /opt/springboot
docker build -t springboot-prometheus .

构建完毕 Docker 镜像后,通过下述命令启动 SpringBoot 容器,应用部署完毕:

docker run -d \
--name=prometheus \
-p 8080:8080 \
springboot-prometheus

最后,通过访问指标数据接口:http://47.95.221.16:8080/actuator/prometheus,可以看到指标数据,说明 SpringBoot 部署完毕:
在这里插入图片描述

4、Docker 搭建 Prometheus

在服务器2上,执行下面命令,创建 Prometheus 配置文件,注意:static_configs 使用的是 SpringBoot 容器的地址信息:

mkdir /etc/prometheus
cat > /etc/prometheus/prometheus.yml <<-'EOF'
# 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'.

    static_configs:
      - targets: ["localhost:9090"]

  # 以下为 SpringBoot 应用配置
  # 5秒调用一次 Spring Boot Actuator 获取指标数据
  - job_name: 'springboot_prometheus'
    scrape_interval: 5s
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: ['172.21.180.99:8080']
EOF

整理好配置文件后,通过 Docker 部署 Prometheus,命令如下:

docker run -d \
--name=prometheus \
-v /etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml  \
-p 9090:9090 \
bitnami/prometheus:latest

部署完毕之后,通过访问:http://39.105.202.53:9090/,可以看到 Prometheus 的页面,说明部署成功了。
在这里插入图片描述
点击 Status ——> Target 可以看到监控的服务信息:
在这里插入图片描述

5、Docker 搭建 Grafana

最后,在服务器2上,通过 Docker 部署 Grafana,命令如下:

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

此时通过 http://39.105.202.53:3000 访问一下 Grafana 的页面,如下:
在这里插入图片描述
第一次登录时,默认的用户名和密码都是 admin,登录后可以看到如下页面:
在这里插入图片描述
此时想要 Grafana 整合 Prometheus,完成指标数据的监控,需要先设置数据源,流程如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
结果上述操作,配置好了数据源,接下来导入监控面板,流程如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
经过上述操作,Prometheus + Grafana 监控 SpringBoot 应用的搭建流程就完毕了!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐