Java Version Compatibility
Argus adapts its capabilities based on the Java version at runtime. You don't need to configure anything — it detects the version automatically and enables what's available.
| Feature | Java 11+ | Java 17+ | Java 21+ |
|---|---|---|---|
| CLI (71 commands) | Yes | Yes | Yes |
| Dashboard & Web UI | — | Yes (MXBean) | Yes (JFR) |
| GC / CPU / Memory | CLI only | Yes | Yes |
| Allocation Tracking | — | — | Yes |
| Virtual Threads | — | — | Yes |
| Flame Graph | — | — | Yes |
| Lock Contention | — | — | Yes |
| Spring Boot Starter | — | Yes | Yes |
| Micrometer Metrics | — | Yes | Yes |
How it works: On Java 17–20, the agent uses an MXBean polling engine that queries ManagementFactory MXBeans for GC, CPU, and memory data at regular intervals. On Java 21+, it uses JFR streaming for lower overhead and richer event data. The dashboard automatically hides features that aren't available on your Java version.
Architecture
Argus is organized into eleven modules, each with a clear responsibility:
| Module | Purpose |
|---|---|
argus-core | Shared event types, configuration, ring buffer transport |
argus-agent | Java agent entry point, JFR streaming engine, MXBean polling engine |
argus-server | Netty HTTP/WebSocket server, 10 analyzers, metrics export |
argus-frontend | Dashboard web UI (vanilla JS, Chart.js, D3 flame graph) |
argus-cli | 71 diagnostic commands using jcmd/jstat |
argus-micrometer | Framework-agnostic Micrometer MeterBinder |
argus-spring-boot-starter | Spring Boot auto-configuration: argus.mode=full|diagnostics|off, injectable DoctorService / GcLogAnalyzerService / GcScoreService beans, /actuator/argus-doctor and /actuator/argus-gc endpoints, and a scheduled doctor — all delegating to argus-diagnostics |
argus-diagnostics | Framework-agnostic diagnostics library (DoctorEngine, GC-log analysis, health rules) that non-Spring JVM apps can embed; the Spring starter's service beans delegate to it |
argus-aggregator | Fleet-level aggregation server: multi-JVM health roll-up, alert evaluation, /fleet/rightsize, and profile push (Pyroscope / OTLP Profiles) |
argus-operator | Kubernetes operator (ArgusFleet / ArgusTarget CRDs + reconcilers) |
argus-instrument | Opt-in live bytecode instrumentation agent (ByteBuddy-based), default OFF, used by argus instrument |
The agent and server communicate through lock-free ring buffers in shared memory — there is no network protocol between them. This means zero serialization overhead and minimal latency from event capture to dashboard display.
Configuration Reference
All Argus properties can be set as JVM system properties (-Dargus.xxx=value) when using the agent, or in application.yml / application.properties when using the Spring Boot starter.
Agent Properties
| Property | Default | Description |
|---|---|---|
argus.server.port | 9202 | Dashboard HTTP port |
argus.server.enabled | true | Start the built-in HTTP dashboard/metrics server |
argus.gc.enabled | true | GC event collection via JFR |
argus.cpu.enabled | true | CPU load sampling |
argus.cpu.interval | 1000 | CPU sampling interval in milliseconds |
argus.allocation.enabled | false | Object allocation tracking (higher overhead) |
argus.allocation.threshold | 1048576 | Minimum allocation size to track (bytes) |
argus.profiling.enabled | false | CPU method profiling via JFR |
argus.profiling.interval | 20 | CPU profiling sampling interval in milliseconds |
argus.contention.enabled | false | Lock contention monitoring |
argus.contention.threshold | 50 | Minimum lock contention duration to record (milliseconds) |
argus.metaspace.enabled | true | Metaspace usage tracking |
argus.buffer.size | 65536 | Ring buffer size in bytes |
argus.correlation.enabled | true | Cross-metric correlation analysis |
argus.anomaly.mode | fixed | Anomaly detection mode: fixed | learned | both (learned uses z-score/EWMA/IQR baselines) |
argus.metrics.prometheus.enabled | true | Expose Prometheus endpoint at /prometheus |
argus.metrics.legacyNames | true | Emit legacy argus_* series alongside OTel semconv jvm.* names; set false to emit only the standard names |
argus.otlp.enabled | false | Export metrics via OTLP |
argus.otlp.endpoint | http://localhost:4318/v1/metrics | OTLP HTTP endpoint for metrics export |
argus.otlp.interval | 15000 | OTLP export interval in milliseconds |
argus.otlp.service.name | argus | Service name reported in OTLP resource attributes |
CLI Flags
| Flag | Values | Description |
|---|---|---|
--format | text, json | Output format (default: text) |
--source | auto, agent, jdk | Data source selection (default: auto) |