实用,DynamicTP进阶之数据采集与告警

关注我的公众号:【编程朝花夕拾】,可获取首发内容。

01 引言

上一节介绍了dynamictp的基本入门,入门之后的可能 还会有困惑。到底怎么使用呢?

这一节,我们将介绍一下dynamictp的如何采集以及通知。

02 数据采集

目前框架提供了五种监控数据采集方式,通过 collectorTypes 属性配置监控指标采集类型,默认 Micrometer。

  • Logging:线程池指标数据会以 Json 格式输出到指定的日志文件里
  • Internal_logging:线程池指标数据会以 Json 格式输出到项目日志文件里
  • Micrometer:采用监控门面,通过引入相关 Micrometer 依赖采集到相应的存储平台里(如 Prometheus,InfluxDb...)
  • Endpoint:暴露 Endpoint 端点,可以通过 http 方式实时获取指标数据
  • JMX:通过 JMX 方式采集指标数据,来监视线程池的性能指标

官方提供了两个直接可以对接的监控:

  • grafana 监控
  • HertzBeat 监控

另外框架还提供了自定义采集器。我们将以自定义采集器为例。

2.1 自定义采集

自定义采集需要继承org.dromara.dynamictp.core.monitor.collector.AbstractCollector抽象类,并实现 type() 和 collect() 方法即可。

java 复制代码
@Slf4j
public class CollectCollector extends AbstractCollector {
    @Override
    public void collect(ThreadPoolStats poolStats) {
        System.out.println("-------------------------------------------------");
        log.info("Collecting thread pool stats: {}", poolStats.toString());
    }

    @Override
    public String type() {
        return "test";
    }
}

其中type()就是自定义的采集类型。

2.2 SPI配置

自定义采集采用的是SPI配置,需要在resources/META-INF/services 下配置:

  • 文件名:固定类型

    org.dromara.dynamictp.core.monitor.collector.MetricsCollector

  • 文件值:定义的采集器

    com.simonking.ws.boot.dynamictp.controller.CollectCollector

2.3 配置文件配置

需要配置采集的类型:test

yml 复制代码
dynamictp:
  enabled: true
  enabledCollect: true
  collectorTypes: test
  monitorInterval: 5

2.4 测试

我们可以看到每隔5s采集一次。

03 报警通知

报警通知是业务最常用的手段,框架支持的类型包括:

  • change:线程池核心参数变更通知
  • liveness:线程池活性通知
  • capacity:队列容量使用率通知
  • reject:触发任务拒绝告警
  • run_timeout:任务执行超时告警
  • queue_timeout:任务排队超时告警

我们来模拟一下任务执行超时告警(run_timeout),然后通过邮件通知。

3.1 依赖引入

xml 复制代码
<dependency>
    <groupId>org.dromara.dynamictp</groupId>
    <artifactId>dynamic-tp-spring-boot-starter-extension-notify-email</artifactId>
    <version>1.2.2-x</version>
</dependency>

3.2 配置

yaml 复制代码
spring:
  application:
    name: boot-dynamictp
  # email notify configuration
  mail:
    host: smtp.163.com
    port: 465
    username: wsapplyjob@163.com
    password: ******
    default-encoding: UTF-8
    properties:
      mail:
        smtp:
          socketFactoryClass: javax.net.ssl.SSLSocketFactory
          ssl:
            enable: true

# 暴露 actuator 端点,用于查看线程池监控
management:
  endpoints:
    web:
      exposure:
        include: "*"

# DynamicTp 无配置中心模式(本地配置文件,无动态调参,支持监控告警)
dynamictp:
  enabled: true
  enabledCollect: true
  collectorTypes: test
  monitorInterval: 5

  # 线程池配置
  executors:
    - threadPoolName: dtpExecutor1
      threadPoolAliasName: 测试线程池
      executorType: common
      corePoolSize: 1
      maximumPoolSize: 2
      queueCapacity: 200
      queueType: VariableLinkedBlockingQueue
      rejectedHandlerType: CallerRunsPolicy
      keepAliveTime: 60
      threadNamePrefix: dtp-test

      # 设置超时的阈值
      runTimeout: 1000
      notifyItems:
        - type: run_timeout
          count: 1
          period: 5
          silencePeriod: 0
  platforms:
    # 通知平台
    - platform: email
      platformId: 1
      receivers: sh9527@qq.com

这主要的配置如图:

3.3 测试demo

3.4 启动测试

我们可以看到已经触发了超时的阈值。我们看看有没有收到邮件。

04 小结

日志的采集和通知介绍完了,但是细想一下似乎还有问题。生产环境基本都是多节点部署,采集和通知可能出现重复的问题,这种又该如何解决呢?可能一个配置就可以搞定,有兴趣的可以了解一下。

相关推荐
咩咩啃树皮7 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
阳光是sunny7 小时前
LangGraph中的Reducer是什么
前端·人工智能·后端
灯澜忆梦7 小时前
GO_并发编程---定时器
开发语言·后端·golang
阳光是sunny7 小时前
从链到图:LangGraph 入门基础全解析
前端·人工智能·后端
鱟鲥鳚7 小时前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
皮皮林5517 小时前
开源实力派,给本地 AI 装上深度调研能力,一张 3090 跑到 95.7 分!
后端
努力的小雨8 小时前
把 Windows 桌面图标做成一个会自己运转的小世界
后端
武子康9 小时前
Search Console Platform Properties 扩大 SEO 资产边界:从 Page Ranking 到 Topic Coverage(5 类误读边界 + 3 表数据层设计)
前端·人工智能·后端
大模型码小白9 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
腾渊信息科技公司9 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求