{"record":{"id":"7fe16ee8f4ff6f73","repo":"pinpoint-apm/pinpoint","slug":"micrometer-is-not-enabled","errorCode":null,"errorMessage":"Micrometer is not enabled","messagePattern":"Micrometer is not enabled","errorType":"validation","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"agent-module/profiler-micrometer/src/main/java/com/navercorp/pinpoint/profiler/micrometer/DefaultMicrometerMonitor.java","lineNumber":47,"sourceCode":" * MicrometerMonitor\n *\n */\npublic class DefaultMicrometerMonitor implements MicrometerMonitor {\n\n    private final Logger logger = LogManager.getLogger(this.getClass());\n\n    private final AgentOtlpMeterRegistry registry;\n\n    @Inject\n    public DefaultMicrometerMonitor(@Named(\"pinpoint.applicationName\") String applicationName,\n                                    @Named(\"pinpoint.agentId\") String agentId,\n                                    MicrometerConfig config) {\n        Objects.requireNonNull(applicationName, \"applicationName\");\n        Objects.requireNonNull(agentId, \"agentId\");\n        Objects.requireNonNull(config, \"config\");\n\n        if (!config.isEnable()) {\n            throw new IllegalStateException(\"Micrometer is not enabled\");\n        }\n\n        OtlpConfig otlpConfig = AgentOtlpConfig.getOtlpConfig(\n                config.getUrl(),\n                config.getStep(),\n                config.getBatchSize(),\n                \"default\",\n                applicationName,\n                agentId);\n        this.registry = new AgentOtlpMeterRegistry(otlpConfig);\n    }\n\n\n    @Override\n    public void start() {\n        logger.info(\"MicrometerMonitor started\");\n    }\n","sourceCodeStart":29,"sourceCodeEnd":65,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/agent-module/profiler-micrometer/src/main/java/com/navercorp/pinpoint/profiler/micrometer/DefaultMicrometerMonitor.java#L29-L65","documentation":"DefaultMicrometerMonitor's constructor requires that Micrometer support is explicitly enabled in the profiler configuration. When profiler.micrometer.enable is false (the default), constructing the monitor throws IllegalStateException. This fails fast so the caller falls back to the non-micrometer monitor implementation instead of silently collecting nothing.","triggerScenarios":"Constructing DefaultMicrometerMonitor while profiler.micrometer.enable=false in pinpont.config / pinpoint.properties; wiring the micrometer monitor unconditionally in custom profiler setup.","commonSituations":"Enabling micrometer-related metrics code paths without flipping the config flag; copying sample code that instantiates DefaultMicrometerMonitor directly; upgrade where monitor selection logic changed.","solutions":["Set profiler.micrometer.enable=true in the agent configuration before using DefaultMicrometerMonitor","Use the profiler's monitor selection/factory logic instead of instantiating DefaultMicrometerMonitor directly","Verify the loaded config file actually contains the micrometer enable property and it is not overridden elsewhere","If micrometer is not needed, switch to the default monitor implementation"],"exampleFix":"// before\nMonitor monitor = new DefaultMicrometerMonitor(appName, agentId, config);\n// after\nif (micrometerConfig.isEnable()) {\n    monitor = new DefaultMicrometerMonitor(appName, agentId, config);\n} else {\n    monitor = new EmptyMonitor();\n}\n// plus in pinpoint.config: profiler.micrometer.enable=true","handlingStrategy":"validation","validationCode":"if (!profilerConfig.readBoolean(\"profiler.micrometer.enable\", false)) {\n    // use the default monitor instead of DefaultMicrometerMonitor\n}","typeGuard":null,"tryCatchPattern":"try {\n    monitor = new DefaultMicrometerMonitor(appName, agentId, micrometerConfig);\n} catch (IllegalStateException e) {\n    logger.warn(\"micrometer disabled, falling back to default monitor\");\n    monitor = new EmptyMonitor();\n}","preventionTips":["Set profiler.micrometer.enable=true before enabling any micrometer metrics path","Instantiate monitors via the profiler factory/selection logic, not directly","Check for config overrides (env vars, external config) that flip the flag off","Read the enable flag through the same MicrometerConfig object passed to the constructor"],"tags":["micrometer","configuration","feature-flag","metrics"],"backgroundTag":"feature-not-enabled","analyzedSha":"744c3d3075e595656abb1ae331ad2c0e4c9eb996","analyzedAt":"2026-09-07T18:48:45.289Z","contentChangedAt":"2026-09-07T18:48:45.289Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}