从零开始一步步将Springboot项目集成 Prometheus 和 Grafana 实现监控业务接口

背景

需要实时统计订单支付成功率并通过折线图展示,达到阈值时进行报警.

技术选型后决定用 Prometheus  +  Grafana


一.安装 Prometheus 


1.下载 Prometheus  能科学速度更快

Prometheus下载地址icon-default.png?t=O83Ahttps://prometheus.io/download/

2.安装及部署

解压

tar xf prometheus-2.53.3.linux-amd64.tar.gz -C /opt/vansys/prometheus/

重命名

mv prometheus-2.53.3.linux-amd64 /opt/vansys/prometheus/prometheus2.53.3

查看配置文件  prometheus.yml  含义我用中文注释上了

# 全局配置
global:
  scrape_interval: 15s # 设置 Prometheus 从目标抓取数据的频率,这里为每 15 秒,默认是每分钟一次。
  evaluation_interval: 15s # 设置 Prometheus 评估规则的频率,这里为每 15 秒评估一次规则,默认是每分钟一次。
  # scrape_timeout: #设置 Prometheus 从目标抓取数据的超时时间,默认是 10 秒。在这个配置文件中没有显式设置,所以使用全局默认值。



# 告警管理器配置
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093  # alertmanagers: 配置告警管理器的地址。这里没有启用,


# 一次性加载规则文件,并根据全局的 'evaluation_interval' 周期性地评估这些规则。
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# 包含一个确切的抓取配置,其中包含一个要抓取的端点:
# 这里抓取的是 Prometheus 本身。
scrape_configs:
  # 作业名称将作为标签 `job=<job_name>` 添加到从该配置抓取的任何时间序列中。
  - job_name: "prometheus"

    # metrics_path 默认为 '/metrics'
    # scheme 默认为 'http'

    #配置静态目标。这里配置了一个目标 localhost:9090,即 Prometheus 服务器本身的指标端点。
    static_configs:
      - targets: ["localhost:9090"]

3.启动

为了方便启动编写 prometheus 启动和停止脚本

vi start_prometheus.sh

在 vi 中按 i 进入插入模式,然后粘贴以下内容 

#!/bin/bash

# 定义 Prometheus 的安装目录和配置文件路径
PROMETHEUS_HOME="/opt/vansys/prometheus/prometheus2.53.3"
CONFIG_FILE="$PROMETHEUS_HOME/prometheus.yml"

# 检查 Prometheus 是否已经在运行
if pgrep -f "prometheus --config.file=$CONFIG_FILE" > /dev/null; then
    echo "Prometheus is already running."
    exit 1
fi

# 启动 Prometheus
nohup $PROMETHEUS_HOME/prometheus --config.file=$CONFIG_FILE --web.listen-address=:9090 --web.external-url=http://localhost:9090 > prometheus.log 2>&1 &

# 检查启动是否成功
sleep 5
if pgrep -f "prometheus --config.file=$CONFIG_FILE" > /dev/null; then
    echo "Prometheus started successfully."
else
    echo "Failed to start Prometheus."
    exit 1
fi
vi stop_prometheus.sh

在 vi 中按 i 进入插入模式,然后粘贴以下内容 

#!/bin/bash

# 定义 Prometheus 的配置文件路径
CONFIG_FILE="/opt/vansys/prometheus/prometheus2.53.3/prometheus.yml"

# 检查 Prometheus 是否在运行
if ! pgrep -f "prometheus --config.file=$CONFIG_FILE" > /dev/null; then
    echo "Prometheus is not running."
    exit 1
fi

# 关闭 Prometheus
pkill -f "prometheus --config.file=$CONFIG_FILE"

# 检查关闭是否成功
sleep 5
if ! pgrep -f "prometheus --config.file=$CONFIG_FILE" > /dev/null; then
    echo "Prometheus stopped successfully."
else
    echo "Failed to stop Prometheus."
    exit 1
fi

4.验证启动是否成功

浏览器使用 ip+端口(9090)访问出现页面表示成功

二.安装 grafana

Grafana下载地址

Ubuntu为例使用apt-get安装

sudo apt-get install -y adduser libfontconfig1 musl
wget https://dl.grafana.com/oss/release/grafana_11.2.3+security~01_amd64.deb
sudo dpkg -i grafana_11.2.3+security~01_amd64.deb

启动并设置开机启动,

安装后执行以下命令

#重新加载 systemd 配置,以便系统识别新安装的服务:
sudo /bin/systemctl daemon-reload
#启用 Grafana 服务,使其在系统启动时自动启动:
sudo /bin/systemctl enable grafana-server
#启动 Grafana 服务:
sudo /bin/systemctl start grafana-server
#确保 Grafana 服务正在运行:
sudo /bin/systemctl status grafana-server

登录验证是否成功启动


ip+端口(3000)  确认启动

默认账号:admin   

默认密码:admin

登录后需要修改密码

添加Prometheus  数据源 

添加Prometheus  数据源     GET 拉取数据   POST推送数据

保存信息

测试

新建仪表盘测试数据是否正常获取

选择 Prometheus 数据源

配置数据 并  点击 蓝色按钮  Run queries


Metric 不填选择表示 任务对应的接口下的所有数据都展示  (如不清楚继续完后看Springboot集成)

展示数据

三.Springboot集成 Prometheus 

添加maven依赖

<dependencies>
    <!-- 其他依赖 -->

    <!-- Spring Boot Actuator 依赖 -->
    <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>

修改Springboot配置文件  

management:
  endpoints:
    web:
      exposure:
        include: prometheus #  请求地址是 /actuator/prometheus
  endpoint:
    prometheus:
      enabled: true

修改Prometheus配置文件并重启

在scrape_configs:下新增一个 job_name

scrape_configs:
  # 作业名称将作为标签 `job=<job_name>` 添加到从该配置抓取的任何时间序列中。
  - job_name: "text-login"

    metrics_path: '/<上下文路径>/actuator/prometheus'
    # scheme 默认为 'http'

    #配置静态目标。这里配置了一个目标 localhost:9090,即 Prometheus 服务器本身的指标端点。
    static_configs:
      - targets: ["localhost:8081"]

PS:部分项目因为需要登录才能访问,需要先开放接口白名单

在类构造时

Login_success_total  对应的是上面提到的    Metric中的名字选择

	private final Counter LoginSuccessCounter;
	private final Counter LoginTotalCounter;

	@Autowired
	public LoginController(MeterRegistry meterRegistry) {
		LoginSuccessCounter = meterRegistry.counter("Login_success_total");
		LoginTotalCounter = meterRegistry.counter("Login_total");
	}

代码中埋点

	@ApiOperation("登录接口")
	@RequestMapping(value = "/login", method = RequestMethod.POST)
	public Result<JSONObject> login(@RequestBody SysLoginModel sysLoginModel){

		paymentTotalCounter.increment();

        //模拟成功或失败
		Random random = new Random();
		int i = random.nextInt(0,2);

		if (i==0){
			paymentSuccessCounter.increment();
		}    
    }

成功率计算

发送请求测试埋点效果

将获取时间窗口内的请求成功率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值