如何监控Quartz Scheduler任务并获取可推送Prometheus的量化指标
Quartz Scheduler Prometheus 指标采集方案
方案一:使用Micrometer Quartz集成(推荐)
Micrometer是Java生态通用的指标采集库,原生兼容Prometheus格式,自带Quartz指标采集能力,无需自己实现监听器逻辑。
依赖配置
SpringBoot项目Maven依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency>
普通Java项目Maven依赖:
<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-core</artifactId> <version>最新稳定版</version> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> <version>和micrometer-core同版本</version> </dependency>
绑定Scheduler到指标采集器
import io.micrometer.core.instrument.Metrics; import io.micrometer.core.instrument.Tag; import io.micrometer.core.instrument.binder.quartz.QuartzMetrics; import org.quartz.Scheduler; import org.quartz.impl.StdSchedulerFactory; public class QuartzPrometheusDemo { public static void main(String[] args) throws Exception { // 初始化Quartz调度器 Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); // 绑定调度器到Micrometer指标注册表,可自定义扩展标签 new QuartzMetrics(scheduler, Tag.empty()).bindTo(Metrics.globalRegistry); scheduler.start(); } }
默认采集的核心指标
quartz_job_running:Gauge类型,实时统计当前正在运行的任务数量,支持按任务名、任务组过滤quartz_job_execution_seconds:直方图类型,统计每个任务的执行时长,附带任务名、任务组、执行结果(成功/异常)标签quartz_job_execution_total:计数器类型,统计任务累计执行次数,支持按执行结果维度拆分quartz_trigger_fired_total:计数器类型,统计触发器累计触发次数,附带触发器名、触发器组标签quartz_scheduler_jobs_total:Gauge类型,统计调度器内注册的总任务数
指标导出方式
- 拉取模式:SpringBoot项目直接配置开启prometheus端点,Prometheus直接拉取
/actuator/prometheus接口即可获取所有Quartz指标 - 推送模式:配置Micrometer对接Prometheus PushGateway,按自定义周期将指标主动推送到PushGateway,Prometheus从PushGateway拉取指标即可
方案二:自定义监听器实现(无第三方依赖)
如果不想引入Micrometer相关依赖,可以自己实现Quartz的JobListener和TriggerListener接口,手动统计指标:
- 定义Counter、Gauge类型的指标存储结构,记录运行中任务数、执行时长、执行次数等数据
- 在
jobToBeExecuted回调中更新运行中任务数+1,记录任务开始时间 - 在
jobWasExecuted回调中更新运行中任务数-1,计算任务执行时长并更新对应指标,成功/异常分别计数 - 开发轻量HTTP接口,按照Prometheus文本格式输出所有统计的指标,或者直接调用PushGateway的HTTP接口推送指标
内容的提问来源于stack exchange,提问作者Ritika Garg
相关产品推荐
相关产品推荐

