SpringBoot整合pushgateway、Alertmanager做监控报警

news/2024/5/19 1:32:52 标签: Prometheus, SpringBoot, 监控报警

这里需要通过pushgateway推送数据

引入依赖

        <!--普罗米修斯依赖-->
        <dependency>
            <groupId>io.prometheus</groupId>
            <artifactId>simpleclient_spring_boot</artifactId>
            <version>0.8.0</version>
        </dependency>
        <dependency>
            <groupId>io.prometheus</groupId>
            <artifactId>simpleclient_hotspot</artifactId>
            <version>0.8.0</version>
        </dependency>
        <dependency>
            <groupId>io.prometheus</groupId>
            <artifactId>simpleclient_servlet</artifactId>
            <version>0.8.0</version>
        </dependency>
        <dependency>
            <groupId>io.prometheus</groupId>
            <artifactId>simpleclient_pushgateway</artifactId>
            <version>0.8.0</version>
        </dependency>

SpringBoot代码

这里我在捕获到异常后将code和服务名推送到pushgateway中

@ControllerAdvice
public class GlobalExceptionHandler {


    @Value("${spring.application.name}")
    String applicationName;


    @Value("${pushgateway.ip}")
    String pushgatewayIp;


    public static final Counter counterDemo = Counter.build()
            .name("push_way_counter")
            .labelNames("code", "instance")
            .help("user-service异常统计")
            .register();


    /**
     * 传入code做异常统计
     *
     * @param code
     */
    private void pushData(Integer code) {
        //统计异常
        PushGateway prometheusPush = new PushGateway(pushgatewayIp);
        //指标值增加
        counterDemo.labels(code.toString(), applicationName).inc();
        try {
            prometheusPush.push(counterDemo, "ex-user-service");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    /**
     * 此处只是一个例子函数, 用来处理 ResourceConflictException 实际上一个 handler 也可以处理多种 Exception.
     * 也可以把@ResponseStatus 放在 handler 的前面, 这样多个 Exception 可以用同一个 HTTP 返回 code
     * <p>
     * 不一定每个 Exception 都需要专门处理, 只需要在Exception定义的前面加入@ResponseStatus 定义 HTTP 返回 code
     * 即可.
     *
     * @param err
     * @return
     */
    @ResponseStatus(HttpStatus.CONFLICT)
    @ExceptionHandler(ResourceConflictException.class)
    @ResponseBody
    public CommonResult<Object> handleResourceBusyException(ResourceConflictException err) {
        CommonResult<Object> errorInfo = new CommonResult<>();
        errorInfo.setSuccess(false);

        errorInfo.setCodes(201);
        errorInfo.setMessage(err.getMessage());
        errorInfo.setData(err.getData());

        return errorInfo;
    }

    /**
     * 用戶模塊全局異常信息處理
     *
     * @param err
     * @return
     */
    @ExceptionHandler(UserException.class)
    @ResponseBody
    public CommonResult<Object> handleUserException(HttpServletRequest request, UserException err) {
        pushData(err.getCode());
        CommonResult<Object> errorInfo = new CommonResult<>();
        errorInfo.setSuccess(false);

        errorInfo.setCodes(err.getCode());
        errorInfo.setMessage(err.getMessage());

        errorInfo.setData(err.getData());
        errorInfo.setSuccess(false);
        return errorInfo;
    }

}

定义新的报警规则

vim springboot_rules.yml
 groups:
    - name: springboot-rules
      rules:
      - alert: interface_status
        expr: sum by (code,exported_job) (increase(push_way_counter[5m])) >3
        for: 10s
        labels:
          status: 非常严重
        annotations:
          summary: "接口报错5分钟内超过3次!!!--{{$labels.code}}"

修改Prometheus.yml

vim prometheus.yml 
rule_files:
    - "alertmanager_rules.yml"
    - "springboot_rules.yml"

重启!!!

测试如下:

 


http://www.niftyadmin.cn/n/1456924.html

相关文章

ShedLock做定时任务锁

github地址&#xff1a;https://github.com/lukas-krecan/ShedLock 目前公共存储目前支持的有&#xff1a; MonogoDynamoDBJdbcTemplateZooKeeper (using Curator)Redis (using Spring RedisConnectionFactory)Redis (using Jedis)Hazelcast 这里我用mysql做模拟&#xff1a;…

决战Flex AIR!(ADOBE最近的举动让所有FLASHer振奋)

Adobe将以Flash为基础的AIR技术&#xff0c;史无前例地统整桌面应用、网络互动及行动装置等各种接口应用&#xff0c;来对抗微软的RIA攻势。 Adobe在每年定期举办的Max 2007中&#xff0c;发布多项AIR技术&#xff08;程序代码&#xff1a;Apollo&#xff09;的开发工具与企业…

PerfTest对RabbitMQ进行压力测试

下载地址&#xff1a; 官网地址&#xff1a;http://www.rabbitmq.com/java-tools.html 下载后进行解压即可&#xff1a; 使用方式 runjava com.rabbitmq.perf.PerfTest --help usage: <program>-?,--help show usage-a,--autoack …

使用Mybatis中分表插件shardbatis

1.POM依赖 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.30</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>…

CCNP-7 OSPF试验3(BSCI)

CCNP-7 OSPF试验3 试验拓扑&#xff1a;试验要求&#xff1a;R1 R2 R3通过FR相连&#xff0c;形成hub and spoke网络&#xff0c;R1为hub路由器&#xff0c;在R1 R2 R3上起OSPF。试验目的&#xff1a;掌握OSPF在NBMA环境下的配置和观察OSPF在NBMA下特征。试验配置&#xff1a;R…

SnowJean使用以及原理(SpringBoot)

一.使用 1.POM文件 <dependency><groupId>cn.yueshutong</groupId><artifactId>snowjean-spring-boot-starter</artifactId><version>3.0.0.RELEASE</version></dependency> 2.配置 import cn.yueshutong.commoon.entity.R…

模拟自增ID提高数据库移植性

在我的ORM中&#xff0c;一个最大的问题就是怎么去模拟自增主键&#xff0c;因为ORM中的主键是程序控制的。 1.select max(col) from table 这种方法肯定不行&#xff0c;一出现并发就完蛋了。如果在程序里面做循环直到插入成功&#xff0c;那么逻辑就会非常的烦。。 2.添加一张…

图片转HTML字符画

一段很有意思的脚本&#xff0c;把图片转字符画用html展示出来&#xff01; import os from io import BytesIO from urllib import requestfrom PIL import Image from PIL import ImageFilterTEMPLATE <!DOCTYPE html> <html> <head><meta charset&q…