Springboot应用整合Prometheus+Grafana进行自定义指标监控

本文介绍了如何在Springboot应用中整合Prometheus和Grafana进行自定义指标监控,包括创建Springboot项目、安装Prometheus和Grafana、设置自定义监控指标、使用Grafana展示数据以及开启P90、P99统计。通过监控接口的请求数据、响应时间和特定参数,实现了全面的性能监控。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Springboot应用整合Prometheus+Grafana进行自定义指标监控

最近需要监控接口的请求数据P90,P99,平均耗时,接口参数包含userId的接口请求数据等等

第一步 创建一个springboot项目

pom文件

<dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.10</version>
    </dependency>
    <!--aop -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>
    <!--actuator -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--prometheus -->
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-registry-prometheus</artifactId>
        <scope>runtime</scope>
    </dependency>

springboot的actuator可以很好的配合prometheus实现项目的监控,所以这里使用actuator来进行配合

配置信息

spring.application.name="prometheus-test" //建议写上

management.endpoint.metrics.enabled=true //支持metrics

management.endpoints.web.exposure.include=* //开放端口

management.endpoint.prometheus.enabled=true //支持prometheus

management.metrics.export.prometheus.enabled=true

切面实现prometheus自定义监控指标

监控请求数量 ,请求响应时间,请求特定参数

package com.example.prometheus.demo.aspect;

import io.micrometer.core.instrument.Metrics;
import io.micrometer.core.instrument.Timer;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.time.LocalDate;
im
<think>好的,用户想了解如何配置Prometheus监控自定义应用程序。首先我需要回忆Prometheus监控流程,通常包括数据采集、暴露指标、配置抓取和可视化展示几个步骤。 用户提供的引用内容里提到了几种方法。比如引用3提到使用client_golang库,引用4则涉及SpringBoot的不同版本。这说明用户的应用可能是用Go或者Java写的,可能需要不同的实现方式。需要分情况讨论。 首先,确定应用的语言。如果是Go,可以使用client_golang库创建自定义指标并暴露HTTP端点。对于SpringBoot应用,如果是2.x以上,可以用Micrometer和Actuator。如果是旧版本,可能需要dropwizard.metrics。 然后,需要在应用中添加监控代码,暴露/metrics端点。Prometheus通过这个端点拉取数据。接下来配置Prometheus的scrape_configs,添加目标应用的地址和端口。这部分可能需要修改prometheus.yml,或者如果使用Helm安装的话,通过修改values文件。 用户提到使用prometheus-operator Helm chart,这可能涉及到ServiceMonitor的自定义资源。需要解释如何创建ServiceMonitor来指示Prometheus自动发现监控目标。 最后,数据可视化通常用Grafana,所以需要指导用户导入仪表板或创建自己的面板。另外,告警规则可以通过Prometheus的Alertmanager配置,或者使用PrometheusOperator的PrometheusRule资源。 还需要考虑是否需要exporter,比如应用本身不支持Prometheus的话,可能需要一个exporter来转换指标。但用户的问题是关于自定义应用,可能应用可以直接集成客户端库。 检查用户提供的引用,引用3和4分别对应不同语言的集成方式,引用1和2涉及安装和配置Prometheus的环境。需要将这些内容整合成步骤,从添加监控代码到配置Prometheus,再到可视化。 可能用户的问题还包括如何验证配置是否正确,比如访问Prometheus的Targets页面查看应用是否被正确抓取。同时,需要确保网络连通性,端口开放,服务发现配置正确。 总结步骤应该是:1. 应用中集成客户端库暴露指标;2. 配置Prometheus抓取目标;3. 使用Grafana展示数据;4. 配置告警(可选)。需要分点详细说明每个步骤,并引用提供的资料,比如引用3和4的具体方法。</think>### 如何配置 Prometheus监控自定义应用程序? #### 1. **在应用程序中暴露监控指标** - **Go语言应用** 使用`client_golang`库定义并注册自定义指标(如计数器、直方图等),并通过HTTP端点暴露指标: ```go import ( "net/http" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" ) var ( requestsTotal = prometheus.NewCounter( prometheus.CounterOpts{ Name: "myapp_requests_total", Help: "Total number of requests", }) ) func init() { prometheus.MustRegister(requestsTotal) } func main() { http.Handle("/metrics", promhttp.Handler()) http.ListenAndServe(":8080", nil) } ``` 访问`http://<应用地址>:8080/metrics`可查看指标[^3]。 - **Java/SpringBoot应用** - **SpringBoot 2.x+**:通过`Micrometer`集成Prometheus,在`pom.xml`中添加依赖: ```xml <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency> ``` 配置`application.yml`启用端点: ```yaml management: endpoints: web: exposure: include: "prometheus" metrics: export: prometheus: enabled: true ``` 指标端点默认为`/actuator/prometheus`[^4]。 - **SpringBoot 1.x**:使用`dropwizard.metrics`手动注册指标,并通过自定义端点暴露。 #### 2. **配置Prometheus抓取目标** - **直接修改`prometheus.yml`** 添加以下抓取配置: ```yaml scrape_configs: - job_name: "myapp" static_configs: - targets: ["<应用IP>:8080"] # Go应用的/metrics地址 - job_name: "springboot-app" metrics_path: "/actuator/prometheus" # SpringBoot的端点 static_configs: - targets: ["<应用IP>:8081"] ``` 重启Prometheus服务使配置生效。 - **使用Prometheus Operator(Kubernetes环境)** 通过创建`ServiceMonitor`资源自动发现目标: ```yaml apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: myapp-monitor spec: endpoints: - port: web # 对应Service的端口名称 path: /metrics selector: matchLabels: app: myapp # 匹配目标Service的标签 ``` 此方式需确保Service已正确标注[^1]。 #### 3. **验证与可视化** - **检查Target状态** 访问Prometheus的Web界面(`http://<Prometheus地址>:9090/targets`),确认目标应用的状态为**UP**。 - **Grafana仪表板** 导入Prometheus数据源,创建面板查询指标(如`myapp_requests_total`)或使用现成模板[^2]。 #### 4. **配置告警(可选)** - 在Prometheus中定义告警规则: ```yaml groups: - name: myapp-alerts rules: - alert: HighRequestRate expr: rate(myapp_requests_total[5m]) > 100 for: 10m labels: severity: critical ``` - 通过Alertmanager将告警推送至邮件/Slack等渠道。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值