实用,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() 方法即可。
@Slf4jpublicclassCollectCollectorextendsAbstractCollector{@Overridepublicvoidcollect(ThreadPoolStatspoolStats){System.out.println("-------------------------------------------------");log.info("Collecting thread pool stats: {}",poolStats.toString());}@OverridepublicStringtype(){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
dynamictp:enabled:trueenabledCollect:truecollectorTypes:testmonitorInterval:52.4 测试
我们可以看到每隔5s采集一次。
03 报警通知
报警通知是业务最常用的手段,框架支持的类型包括:
change:线程池核心参数变更通知liveness:线程池活性通知capacity:队列容量使用率通知reject:触发任务拒绝告警run_timeout:任务执行超时告警queue_timeout:任务排队超时告警
我们来模拟一下任务执行超时告警(run_timeout),然后通过邮件通知。
3.1 依赖引入
<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 配置
spring:application:name:boot-dynamictp# email notify configurationmail:host:smtp.163.comport:465username:wsapplyjob@163.compassword:******default-encoding:UTF-8properties:mail:smtp:socketFactoryClass:javax.net.ssl.SSLSocketFactoryssl:enable:true# 暴露 actuator 端点,用于查看线程池监控management:endpoints:web:exposure:include:"*"# DynamicTp 无配置中心模式(本地配置文件,无动态调参,支持监控告警)dynamictp:enabled:trueenabledCollect:truecollectorTypes:testmonitorInterval:5# 线程池配置executors:-threadPoolName:dtpExecutor1threadPoolAliasName:测试线程池executorType:commoncorePoolSize:1maximumPoolSize:2queueCapacity:200queueType:VariableLinkedBlockingQueuerejectedHandlerType:CallerRunsPolicykeepAliveTime:60threadNamePrefix:dtp-test# 设置超时的阈值runTimeout:1000notifyItems:-type:run_timeoutcount:1period:5silencePeriod:0platforms:# 通知平台-platform:emailplatformId:1receivers:sh9527@qq.com这主要的配置如图:
3.3 测试demo
3.4 启动测试
我们可以看到已经触发了超时的阈值。我们看看有没有收到邮件。
04 小结
日志的采集和通知介绍完了,但是细想一下似乎还有问题。生产环境基本都是多节点部署,采集和通知可能出现重复的问题,这种又该如何解决呢?可能一个配置就可以搞定,有兴趣的可以了解一下。
