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
- Set profiler.instrument.engine to a supported value (e.g. ASM or JAVASSIST, per your Pinpoint version's accepted constants).
- Check the exact string comparison in InstrumentEngineProvider.get() for case/synonym handling.
- 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
- Use only documented engine values for your Pinpoint version.
- Validate config keys with a schema/lint step in deployment pipelines.
- Don't copy instrumentation engine settings between Pinpoint versions blindly.
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)