实用,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 小结

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

相关推荐
ihuyigui1 小时前
国际商超零售短信接口
大数据·前端·后端·架构·零售
DogDaoDao1 小时前
【GitHub】AutoGPT 深度技术解析:开源自主 AI Agent 平台架构全解
人工智能·程序员·开源·github·ai编程·ai agent·智能体
用户298698530141 小时前
Java 进阶:基于模板生成 Word 文档的实践思路
java·后端
涛声依旧-底层原理研究所1 小时前
响应式编程:map与flatMap实战解析
java
枕星而眠1 小时前
C++ 面向对象核心机制深度解析:多态性、虚函数、虚继承与 final 类
运维·开发语言·c++·后端
Soofjan1 小时前
其它(6):分布式知识体系
后端
Captaincc2 小时前
置身钉内:一个 AI 办公产品的理想、失焦与组织困境
前端·程序员
迷茫运维路2 小时前
golang_Viper配置管理器
后端·golang
java_cj2 小时前
Elasticsearch索引管理完全指南:从基础API到ILM生命周期管理
大数据·后端·elasticsearch·性能优化