关注我的公众号:【编程朝花夕拾】,可获取首发内容。
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 小结
日志的采集和通知介绍完了,但是细想一下似乎还有问题。生产环境基本都是多节点部署,采集和通知可能出现重复的问题,这种又该如何解决呢?可能一个配置就可以搞定,有兴趣的可以了解一下。