{"record":{"id":"c7ee0dae0e0b2bbd","repo":"apache/druid","slug":"unknown-monitor-scheduler-s","errorCode":null,"errorMessage":"Unknown monitor scheduler[%s]","messagePattern":"Unknown monitor scheduler\\[(.+?)\\]","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"server/src/main/java/org/apache/druid/server/metrics/MetricsModule.java","lineNumber":148,"sourceCode":"    }\n\n    if (ClockDriftSafeMonitorScheduler.class.getName().equals(config.get().getSchedulerClassName())) {\n      return new ClockDriftSafeMonitorScheduler(\n          config.get(),\n          emitter,\n          monitors,\n          CronScheduler.newBuilder(Duration.ofSeconds(1L)).setThreadName(\"MonitorScheduler\").build(),\n          Execs.singleThreaded(\"MonitorRunner\")\n      );\n    } else if (BasicMonitorScheduler.class.getName().equals(config.get().getSchedulerClassName())) {\n      return new BasicMonitorScheduler(\n          config.get(),\n          emitter,\n          monitors,\n          Execs.scheduledSingleThreaded(\"MonitorScheduler-%s\")\n      );\n    } else {\n      throw new IAE(\"Unknown monitor scheduler[%s]\", config.get().getSchedulerClassName());\n    }\n  }\n\n  @Provides\n  @ManageLifecycle\n  public JvmMonitor getJvmMonitor()\n  {\n    return new JvmMonitor();\n  }\n\n  @Provides\n  @ManageLifecycle\n  public JvmCpuMonitor getJvmCpuMonitor()\n  {\n    return new JvmCpuMonitor();\n  }\n\n  @Provides","sourceCodeStart":130,"sourceCodeEnd":166,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/server/src/main/java/org/apache/druid/server/metrics/MetricsModule.java#L130-L166","documentation":"MetricsModule.getMonitorScheduler() throws this IllegalArgumentException when the configured druid.monitoring.monitorScheduler class name is not one of the known scheduler implementations (ThreadPoolTaskMonitorScheduler or a legacy 'monitorScheduler' value). The config value is mapped to a scheduler; anything unrecognized is rejected at injector creation.","triggerScenarios":"Setting druid.monitoring.monitorScheduler to a misspelled or nonexistent class name in runtime.properties, e.g. org.apache.druid.server.metrics.SomeScheduler instead of org.apache.druid.server.metrics.ThreadPoolTaskMonitorScheduler.","commonSituations":"Copy-pasting scheduler class names from old docs or other projects, typos in runtime.properties, upgrading Druid and the old default class name being removed or renamed.","solutions":["Set druid.monitoring.monitorScheduler=org.apache.druid.server.metrics.ThreadPoolTaskMonitorScheduler (the standard value)","Verify the class name spelling and that the class exists in your Druid version","Remove the property entirely to use the default scheduler","Check the Druid docs for your version for valid monitorScheduler values"],"exampleFix":"// before\ndruid.monitoring.monitorScheduler=org.apache.druid.server.metrics.MonitorScheduler\n// after\ndruid.monitoring.monitorScheduler=org.apache.druid.server.metrics.ThreadPoolTaskMonitorScheduler","handlingStrategy":"validation","validationCode":"Set.of(\"org.apache.druid.server.metrics.ThreadPoolTaskMonitorScheduler\").contains(config.getSchedulerClassName())","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Copy monitorScheduler values only from the docs of your exact Druid version","Prefer omitting the property to accept the default scheduler","Validate runtime.properties values at deploy time with config linting","Grep your Druid jars for the class name to confirm it exists before configuring it"],"tags":["config","metrics"],"backgroundTag":"invalid-config-value","analyzedSha":"9b90983fd291f26935af934383ce360473179e4d","analyzedAt":"2026-09-07T13:32:30.957Z","contentChangedAt":"2026-09-07T13:32:30.957Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}