监控利器prometheus——prometheus+grafana监控springboot项目业务指标监控(代码片段)

胡玉洋  胡玉洋      2022-12-08     517

关键词:

Prometheus+Grafana监控SpringBoot项目业务指标监控

1、SpringBoot项目配置

(1)maven依赖

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

(2)application.properties

spring.application.name=springboot_business
server.port=6002
management.endpoints.web.exposure.include=*
management.metrics.tags.application=$spring.application.name

(3)这里以【订单成功数量】、【订单失败数量】、【订单成功金额】、【订单失败金额】为例进行统计

import com.alibaba.fastjson.JSON;
import com.danny.monitor.prometheus.business.bean.Order;
import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.DistributionSummary;
import io.micrometer.core.instrument.MeterRegistry;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.RandomStringUtils;
import org.apache.commons.lang.math.RandomUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.math.BigDecimal;
import java.time.LocalDateTime;

@Slf4j
@Service
public class OrderServiceImpl implements OrderService 

    @Autowired
    private MeterRegistry registry;

    private Counter orderSuccessCounter; // 累计成功订单数量
    private Counter orderFailedCounter; // 累计失败订单数量
    private DistributionSummary orderSuccessSummary; // 成功订单金额
    private DistributionSummary orderFailedSummary; // 失败订单金额

    @PostConstruct
    private void init() 
        orderSuccessCounter = registry.counter("create_order_total", "create_order_total", "success");
        orderFailedCounter = registry.counter("create_order_total", "create_order_total", "failed");
        orderSuccessSummary = registry.summary("order_amount", "order_amount", "success");
        orderFailedSummary = registry.summary("order_amount", "order_amount", "failed");
    

    // 创建订单
    @Override
    public Order createOrder(BigDecimal orderAmount) 
        log.info("createOrder orderAmount:", orderAmount);
        Order order = null;
        try 
            if (orderAmount.compareTo(BigDecimal.valueOf(10)) < 0) 
                throw new Exception("金额小于10时,模拟订单失败的情况");
            
            order = new Order();
            order.setOrderAmount(orderAmount);
            order.setOrderNo(RandomStringUtils.randomAlphabetic(32));
            order.setOrderTime(LocalDateTime.now());
            orderSuccessCounter.increment(); // 订单成功数量埋点数据
            orderSuccessSummary.record(orderAmount.doubleValue()); // 订单成功金额埋点数据
         catch (Exception e) 
            log.info("createOrder error", e);
            orderFailedCounter.increment();  // 订单失败数量埋点数据
            orderFailedSummary.record(orderAmount.doubleValue());  // 订单失败金额埋点数据
            order = null;
         finally 
            log.info("queryOrder result:", JSON.toJSONString(order));
            return order;
        
    


2、prometheus添加配置

修改prometheus.yml,添加SpringBoot项目的地址

scrape_configs:
  - job_name: 'springboot_business'
    scrape_interval: 10s
    scrape_timeout: 10s
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: ['10.246.140.63:6002']

重启Prometheus后,启动SpringBoot项目并访问几次下单接口(目的是为了造点埋点数据),在 http://localhost:6002/actuator/prometheus 页面可以看到在上面 OrderServiceImpl 中添加的统计指标。

在Prometheus UI界面通过PromeSQL查询统计指标的数据:
(1)查询【创建订单数量】统计数据

(2)查询【创建订单金额】统计数据

以上数据在重启SpringBoot项目后,就会丢失。可以把counter、summary中的值在缓存中存一份,在启动的时候初始化counter设置初始值。


3、Grafana配置

(1)订单数量统计
在Grafana中新建一个Dashboard(Create -> Dashboard),在新的Dashboard中新建一个Pannel(Add a new pannel),Pannel标题为【订单数量】,数据源选择【Prometheus】,Metircs选择【create_order_total】(在上面代码中定义的统计订单数量的Counter的名称),Legend写【create_order_total】(在上面代码中定义的统计订单数量的Counter的tag的key)。


保存

(2)订单金额统计
按照同样的方式添加统计订单金额的pannel,需要注意的是,DistributionSummary定义的指标,在prometheus中会加个后缀,比如上面定义的 DistributionSummary 的 name 为 “order_amount”,在prometheus收集时会有“order_amount_sum”、“order_amount_count”、“order_amount_max”多个指标,具体可以在 http://localhost:6002/actuator/prometheus 中查看。

(3)订单增长率统计
在Dashboard中新建一个Pannel(Add a new pannel),Pannel标题为【订单量增长率】,数据源选择【Prometheus】,Metircs写【rate(create_order_total [1m])】(表示1分钟内的订单量增长率),Legend写【create_order_total】(在上面代码中定义的统计订单数量的Counter的tag的key),在Standard options -> Unit 中选择纵坐标的显示方式为 Percent(0.0-1.0),也就是百分比显示。

(4)同理可以按照(3)的方式配置订单金额增长率的Pannel



转载请注明出处——胡玉洋 《【监控利器Prometheus】——Prometheus+Grafana监控SpringBoot项目业务指标监控》

监控利器prometheus——prometheus简介与安装(代码片段)

Prometheus简介与安装1、Prometheus简介2、安装PrometheusServer3、安装Grafana1、Prometheus简介Prometheus是一个根据应用的metrics来进行监控的开源工具,所有采集的监控数据均以指标(metric)的形式保存在内置的时间序列数据库当中(TSDB)。时... 查看详情

监控利器prometheus——prometheus+grafana监控springboot项目jvm信息

Prometheus+Grafana监控SpringBoot项目JVM信息1.SpringBoot项目配置JVM采集2.Prometheus配置3.配置grafana4.扩展-通过JMXExporter监控JVM信息1.SpringBoot项目配置JVM采集(1)maven依赖<dependency><groupId>org.spring 查看详情

监控利器prometheus——prometheus+grafana监控服务器资源(代码片段)

Prometheus+Grafana监控服务器资源1.配置NodeExporter采集服务器数据2.Prometheus配置3.在Grafana中创建监控看板在Prometheus的架构设计中,PrometheusServer并不直接服务监控特定的目标,其主要任务负责数据的收集,存储并且对外... 查看详情

监控利器prometheus——prometheus+grafana监控springboot项目jvm信息(代码片段)

Prometheus+Grafana监控SpringBoot项目JVM信息1.SpringBoot项目配置JVM采集2.Prometheus配置3.配置grafana4.扩展-通过JMXExporter监控JVM信息1.SpringBoot项目配置JVM采集(1)maven依赖<dependency><groupId>org.spring 查看详情

监控利器prometheus——prometheus+grafana监控springboot项目业务指标监控(代码片段)

Prometheus+Grafana监控SpringBoot项目业务指标监控1、SpringBoot项目配置2、prometheus添加配置3、Grafana配置1、SpringBoot项目配置(1)maven依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actu... 查看详情

thanos,让你的prometheus变成完美的监控利器。(代码片段)

Prometheus是目前最流行的监控软件,它配置灵活,性能强悍,查询功能强大且简单,尤其在容器监控领域,可以说是最佳选择。但它也有几个缺点:没有高可用,不支持横向扩缩容,历史数据归档保留等。为了解决上述问题,目... 查看详情

监控利器prometheus——prometheus+grafana监控springboot项目jvm信息(代码片段)

Prometheus+Grafana监控SpringBoot项目JVM信息1.SpringBoot项目配置JVM采集2.Prometheus配置3.配置grafana4.扩展-通过JMXExporter监控JVM信息1.SpringBoot项目配置JVM采集(1)maven依赖<dependency><groupId>org.springframework.boot</groupId><ar... 查看详情

监控利器prometheus——prometheus+grafana监控服务器资源(代码片段)

Prometheus+Grafana监控服务器资源1.配置NodeExporter采集服务器数据2.Prometheus配置3.在Grafana中创建监控看板在Prometheus的架构设计中,PrometheusServer并不直接服务监控特定的目标,其主要任务负责数据的收集,存储并且对外... 查看详情

Prometheus 监控端点 SOAP API

】Prometheus监控端点SOAPAPI【英文标题】:PrometheusMonitoringEnd-PointSOAPAPI【发布时间】:2020-11-0801:01:36【问题描述】:我正在尝试使用prometheus进行探索,而无需在目标服务器中安装导出器(在Prometheus服务器之外)所以这个想法是Prome... 查看详情

docker容器部署prometheus服务——云平台监控利器(代码片段)

Prometheus是一个系统和服务监视系统。它以给定的时间间隔从已配置的目标收集指标,评估规则表达式,显示结果,并在发现某些情况为真时触发警报。与其他监视系统相比,Prometheus的主要区别特征是:一个多维数据模型(时间... 查看详情

prometheus+grafana监控tomcatjava应用(代码片段)

一、prometheus监控tomcatjava应用https://github.com/prometheus/jmx_exporter下载jmx_prometheus_javaagentjar包:https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.14.0/jmx_prometheu 查看详情

监控利器prometheus——prometheus简介与安装(代码片段)

Prometheus简介与安装1、Prometheus简介2、安装PrometheusServer3、安装Grafana1、Prometheus简介Prometheus是一个根据应用的metrics来进行监控的开源工具,所有采集的监控数据均以指标(metric)的形式保存在内置的时间序列数据库当中(TSDB)。时... 查看详情

基于prometheus的监控解决方案

一、前言    鄙人就职于某安全公司,团队的定位是研发安全产品云汇聚平台,为用户提供弹性伸缩的云安全能力。前段时间产品组提出了一个监控需求,大致要求:平台对vm实行动态实时监控,输出相应图表界面,并提供... 查看详情

选择prometheus的理由,prometheus使用golang

为什么选择Prometheus在前言中,简单介绍了我们选择Prometheus的理由,以及使用后给我们带来的好处。在这里主要和其他监控方案对比,方便大家更好的了解Prometheus。PrometheusvsZabbixZabbix使用的是C和PHP,Prometheus使用Golang,整体而言Prome... 查看详情

springboot使用prometheus监控(代码片段)

1.关于PrometheusPrometheus是一个根据应用的metrics来进行监控的开源工具。相信很多工程都在使用它来进行监控,有关详细介绍可以查看官网:https://prometheus.io/docs/introduction/overview/。2.有关GrafanaGrafana是一个开源监控利器,如图所示... 查看详情

k8shelm配置图形,prometheu(采集的自定义指标转化为集群内的量度指标,与hpa结合,实现自动伸缩)(代码片段)

...arbor仓库管理helm应用增加副本数版本更新版本回滚删除二prometheus简介1部署prometheus-operator集群监控2使用prometheus-operator集群监控nginx3prometheus实现k8s集群的hpa动态伸缩(nginx)一Helm配置图形部署kubeapps应用,为H 查看详情

k8shelm配置图形,prometheu(采集的自定义指标转化为集群内的量度指标,与hpa结合,实现自动伸缩)(代码片段)

...arbor仓库管理helm应用增加副本数版本更新版本回滚删除二prometheus简介1部署prometheus-operator集群监控2使用prometheus-operator集群监控nginx3prometheus实现k8s集群的hpa动态伸缩(nginx)一Helm配置图形部署kubeapps应用,为H 查看详情

prometheus的网络ping监控exporter(代码片段)

...34; "encoding/binary" "flag" "fmt" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" "log" "net" "net/http" "strconv" "time")var( opsQueued=prometheus.NewGauge... 查看详情