{"record":{"id":"a1797514f7f77644","repo":"apache/druid","slug":"deprecated-monitor-class-name-s-found-please-us","errorCode":null,"errorMessage":"Deprecated Monitor class name[%s] found, please use name[%s] instead.","messagePattern":"Deprecated Monitor class name\\[(.+?)\\] found, please use name\\[(.+?)\\] instead\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"server/src/main/java/org/apache/druid/server/metrics/MonitorsConfig.java","lineNumber":91,"sourceCode":"           \"monitors=\" + monitors +\n           '}';\n  }\n\n  private static List<Class<? extends Monitor>> getMonitorsFromNames(List<String> monitorNames)\n  {\n    List<Class<? extends Monitor>> monitors = new ArrayList<>();\n    if (monitorNames == null) {\n      return monitors;\n    }\n    try {\n      for (String monitorName : monitorNames) {\n        final String effectiveMonitorName = StringUtils.replace(\n            StringUtils.replace(monitorName, METAMX_PACKAGE, APACHE_DRUID_PACKAGE_NAME),\n            IO_DRUID_PACKAGE,\n            APACHE_DRUID_PACKAGE_NAME\n        );\n        if (!effectiveMonitorName.equals(monitorName)) {\n          log.warn(\n              \"Deprecated Monitor class name[%s] found, please use name[%s] instead.\",\n              monitorName,\n              effectiveMonitorName\n          );\n        }\n        Class<? extends Monitor> monitorClass = (Class<? extends Monitor>) Class.forName(effectiveMonitorName);\n        monitors.add(monitorClass);\n      }\n      return monitors;\n    }\n    catch (ClassNotFoundException cnfe) {\n      throw new RuntimeException(cnfe);\n    }\n  }\n}\n","sourceCodeStart":73,"sourceCodeEnd":107,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/server/src/main/java/org/apache/druid/server/metrics/MonitorsConfig.java#L73-L107","documentation":"MonitorsConfig resolves monitor class names from configuration into Monitor classes via Class.forName. Legacy package names (com.metamx.*, io.druid.*) are rewritten to org.apache.druid.* and a warning is logged when a deprecated name is used. Configuration still works, but users should migrate to the current package names.","triggerScenarios":"druid.monitoring.monitors configuration contains a monitor class name with the old com.metamx or io.druid package prefix.","commonSituations":"Upgrading from pre-0.12 Druid (metamx) or pre-rename (io.druid) versions without updating runtime.properties; copy-pasted legacy configs.","solutions":["Replace com.metamx.* and io.druid.* monitor class names with org.apache.druid.* equivalents in configuration.","Review druid.monitoring.monitors in runtime.properties/common config and update.","Verify the fully qualified monitor class exists in the current Druid version."],"exampleFix":"// before\ndruid.monitoring.monitors=[\"io.druid.server.metrics.EventReceiverFirehoseMonitor\"]\n// after\ndruid.monitoring.monitors=[\"org.apache.druid.server.metrics.EventReceiverFirehoseMonitor\"]","handlingStrategy":"validation","validationCode":"// config sanity check before apply\nString name = monitorName.replace(\"io.druid.\", \"org.apache.druid.\").replace(\"com.metamx.\", \"org.apache.druid.\");\nClass.forName(name); // must resolve without warning","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use fully qualified org.apache.druid.* monitor names in all configs","Grep runtime.properties for io.druid/com.metamx after upgrades","Consult the Druid version migration notes when renaming packages"],"tags":["deprecation","monitoring","configuration"],"backgroundTag":"deprecated-api-usage","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"}