pinpoint-apm/pinpoint · error · IllegalArgumentException

Unknown InstrumentEngine

Error message

Unknown InstrumentEngine:{}

What it means

WARN in InstrumentEngineProvider.get: the configured instrumentation engine name matches neither the supported engines (e.g. BYTECODE/ASM, JAVASSIST), so the provider logs and throws IllegalArgumentException("Unknown InstrumentEngine:..."). This aborts agent initialization of the instrumentation engine.

Solutions

  1. Set profiler.instrument.engine to a supported value (e.g. ASM or JAVASSIST, per your Pinpoint version's accepted constants).
  2. Check the exact string comparison in InstrumentEngineProvider.get() for case/synonym handling.
  3. Remove the override to use the default engine.

Example fix

// before (pinpoint.config)
profiler.instrument.engine=ByteBuddy
// after
profiler.instrument.engine=ASM
Defensive patterns

Strategy: validation

Validate before calling

String engine = props.getProperty("profiler.instrument.engine");
if (engine != null && !Set.of("ASM", "JAVASSIST").contains(engine.toUpperCase())) {
    throw new IllegalArgumentException("Unsupported profiler.instrument.engine: " + engine);
}

Try / catch

try {
    engineProvider.get();
} catch (IllegalArgumentException e) {
    logger.error("Bad profiler.instrument.engine value; check pinpoint.config", e);
    throw e;
}

Prevention

When it happens

Trigger: Setting profiler.instrument.engine (instrumentEngine config value) to an unsupported string; passing an arbitrary engine name to the provider's get().

Common situations: Misspelled engine value in pinpoint.config (e.g. 'asm2', 'bytecode'); config copied from a different Pinpoint version where engine names differ; case mismatch.

Understand the failure class

Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.

Related errors


AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07). Data as JSON: /api/errors/8dc4c763ad0ec499. Report an issue: GitHub.

Appendix: source

Thrown at agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/InstrumentEngineProvider.java:80

        this.apiMetaDataServiceProvider = Objects.requireNonNull(apiMetaDataServiceProvider, "apiMetaDataServiceProvider");
        this.interceptorHolderIdGenerator = Objects.requireNonNull(interceptorHolderIdGenerator, "interceptorHolderIdGenerator");
    }

    public InstrumentEngine get() {
        final String instrumentEngine = instrumentConfig.getProfileInstrumentEngine().toUpperCase();
        if (InstrumentConfig.INSTRUMENT_ENGINE_ASM.equals(instrumentEngine)) {
            logger.info("ASM InstrumentEngine");

            // WARNING must be singleton
            final InterceptorDefinitionFactory interceptorDefinitionFactory = new InterceptorDefinitionFactory();
            // WARNING must be singleton
            final ScopeFactory scopeFactory = new ScopeFactory();
            EngineComponent engineComponent = new DefaultEngineComponent(objectBinderFactory, interceptorDefinitionFactory, apiMetaDataServiceProvider, scopeFactory, interceptorHolderIdGenerator);
            DefineClass defineClass = DefineClassFactory.getDefineClass();
            return new ASMEngine(instrumentation, engineComponent, defineClass);

        } else {
            logger.warn("Unknown InstrumentEngine:{}", instrumentEngine);

            throw new IllegalArgumentException("Unknown InstrumentEngine:" + instrumentEngine);
        }
    }
}

View on GitHub (pinned to 744c3d3075)