When using Java 9+:
--add-opens=java.base/java.nio=ALL-UNNAMED
--add-opens=java.base/sun.nio.ch=ALL-UNNAMEDThe Forwarder is a central point of communication for an organization’s JVMs. It reaches Azul Intelligence Cloud, or, in local mode, your Azul Intelligence On-Premises installation. More information is available in One-time Setup for Azul Intelligence Cloud Within Your Organization and Installing the Forwarder.
Release date: November 5, 2026
This release adds command-line tools to check the Forwarder’s settings before you start it, and the Forwarder now validates its settings at every start. It also fixes how the Forwarder responds to malformed requests and updates bundled security libraries.
|
Important
|
Start scripts that pass unknown command-line arguments, or that put -D options after -jar, stop working after this upgrade. See Command Line and Settings Validation.
|
Command line and settings validation: The Forwarder’s command-line tools show and check its settings:
| Command | What it does |
|---|---|
|
Shows the usage and the available commands. |
|
Lists the settings of the Forwarder. Required settings are marked |
|
Shows a sample properties file. |
|
Checks the setup without starting the Forwarder, and prints |
|
Shows the effective value of each setting and where it comes from. Secrets are masked. |
|
Shows the version, commit and build time. |
The Forwarder also checks its settings at every start. The first invalid setting stops the Forwarder with exit code 1 and a message that names the setting.
Behavior change: Unknown or extra command-line arguments now stop the Forwarder instead of being ignored. The Forwarder prints the problem and a short help, exits with code 255, and does not start. Pass -D options before -jar: after -jar, they are program arguments and are rejected.
| Exit code | Meaning |
|---|---|
|
The command succeeded. |
|
A setting is invalid at startup, or |
|
The Forwarder failed to start. |
|
The authorization with Azul Intelligence Cloud failed. |
|
The command-line arguments are invalid. |
Software Bill of Materials (SBOM): Each release now comes with an SBOM in CycloneDX format, forwarder-<version>.cdx.json, next to the Forwarder JAR. It lists the third-party components that the JAR contains.
Clearer errors for invalid requests: Malformed requests from agents now get an HTTP 4xx response, instead of an internal error (500) or no response. A request without a Content-Type header returns 400, and a malformed artifact upload gets a proper error response.
Generated certificates: The certificate that the Forwarder generates now also lists the domain used as its common name in the list of alternative names (SAN), which some clients require.
These updates were first delivered in Forwarder 2.0.1 to 2.0.4.
Updated Netty from 4.2.12 to 4.2.17, which fixes CVE-2026-42578, CVE-2026-42581, CVE-2026-42583, CVE-2026-42585, CVE-2026-44249, CVE-2026-45416, CVE-2026-48043, CVE-2026-50010, CVE-2026-55831, CVE-2026-55833, CVE-2026-56745, CVE-2026-59903, CVE-2026-59921.
Updated jackson-databind from 2.21.0 to 2.22.3, which fixes CVE-2026-19032, CVE-2026-54512, CVE-2026-54514, CVE-2026-54516, CVE-2026-59889, CVE-2026-68497, CVE-2026-83557, CVE-2026-89407, CVE-2026-89425, CVE-2026-91776, CVE-2026-91777.
Updated the OpenSSL, zlib, and musl packages of the Docker image, which fixes CVE-2026-14456, CVE-2026-22184, CVE-2026-40200, CVE-2026-54874, CVE-2026-63072, CVE-2026-63074, CVE-2026-63075, CVE-2026-63076.
This is the first Forwarder release for Azul Intelligence On-Premises. The Forwarder can now deliver the data of your Azul IC Agents and AMT to your own installation, so nothing leaves your network.
Local mode: Start the Forwarder with --mode=local and point it at your installation with azul.ljvmi.url. The Forwarder then accepts data from the Azul IC Agent and from AMT, and delivers it to your installation’s inbox, on a local filesystem or in an S3-compatible bucket.
| Mode | Option | What the Forwarder does |
|---|---|---|
Local |
|
Accepts the data of Agents and AMT and delivers it to your Azul Intelligence On-Premises installation. |
The mode is fixed for the lifetime of the process. For installation steps, see Installing the Forwarder.
How it works:
At startup, the Forwarder checks in to your installation with its access key. The installation answers with everything else the Forwarder needs: where to deliver, the storage type, the limits for delivery files, and its clock. You configure none of these on the Forwarder host.
The Forwarder accepts connections from Agents and AMT on its port.
It writes the received data into delivery files and hands each file over when it is complete.
While running, the Forwarder polls your installation every 10 seconds by default. The poll keeps the connection status, the clock, and the S3 upload grant up to date, and tells the Forwarder when an Admin disabled it.
What is delivered:
| Source | Delivered as |
|---|---|
Azul IC Agent |
JVM events, one JSON object per line, in files named |
AMT |
Each report as its own file, named |
Only the events that your installation uses are stored: JVM start, JVM updates, and application identification data. The Forwarder accepts and discards other Agent events.
File names carry a timestamp aligned to your installation’s clock and increase within each kind of file. You can order deliveries by name, even when several Forwarders write to one inbox.
Storage: Your installation chooses the storage when the Forwarder checks in.
| Storage | How the Forwarder delivers |
|---|---|
Local filesystem |
Writes into the directory that your installation assigns. Each file is written under a temporary |
S3-compatible bucket (AWS S3, Silo, RustFS, Ceph) |
Uploads each completed file with a short-lived upload grant that your installation issues and renews. The Forwarder holds no bucket name and no S3 credentials. |
Delivery file limits: The Forwarder completes a delivery file when it reaches a number of lines, a size, or an age, whichever comes first. Your installation can make these limits smaller, never larger.
| Limit | Default | Setting |
|---|---|---|
Lines |
10,000 |
|
Size |
16 MiB |
|
Age |
10 hours |
|
Configuration: A local-mode setup needs the access key and the URL of your installation, plus a keystore unless you use plain HTTP:
azul.forwarder.access.key = <forwarder-access-key>
azul.ljvmi.url = http://<your-installation-host>:<port>
azul.forwarder.keystore.path = <path-to-keystore>
azul.forwarder.keystore.password = <keystore-password>
java -DforwarderSettings=forwarder-settings.properties -jar forwarder.jar --mode=local
You supply the keystore (JKS or PKCS12) with the certificate and private key that the Forwarder presents to Agents. The settings file that your installation generates under Settings > Data Source Setup is the shortest way to start.
Settings that don’t apply to local mode, such as the proxy and deduplication settings, are ignored with a warning in the log. --help args --mode local lists the settings that you can use.
Limitations:
The Forwarder does not deduplicate events in local mode. It delivers all stored events.
Delivery is best-effort. With S3 storage, completed files wait for their upload in memory. When the bucket is unavailable for a long time, the Forwarder drops the oldest waiting files first, and files still waiting at shutdown are lost. Under heavy overload, the Forwarder drops incoming events instead of letting memory grow. The Forwarder logs and counts every drop.
Uploading artifacts is not available in local mode. The Forwarder answers these requests with HTTP 501.
Plain HTTP for Agents: By default, the Forwarder accepts Agent connections over HTTPS only, with TLS 1.2 or 1.3. When no certificate is available yet, for example in a pilot, set azul.client.tls.disabled=true to serve plain HTTP on the Forwarder’s port. No keystore is needed then. The Agent must also allow it with noSsl=true, and only the Agent version released with this Forwarder supports that option. The setting applies only to connections from Agents and AMT to the Forwarder, and the Forwarder logs a warning at startup.
|
Warning
|
With plain HTTP, all observations travel unencrypted on your network. Use it only on networks you trust, for example for a time-boxed pilot. |
Startup checks and disabled Forwarders: The Forwarder only starts accepting connections after every check succeeds. Otherwise, it logs the reason and stops.
The settings are valid for local mode.
Your installation accepts the access key.
Your installation assigns a supported storage, with a directory or an upload grant.
The storage works: the directory is writable, or the S3 endpoint is reachable.
After the start, the Forwarder never stops by itself:
When your installation is not reachable, the status poll fails and the connection status shows DOWN. Delivery continues, and the status recovers with the next successful poll.
When an Admin disables the Forwarder or deletes its registration, the Forwarder pauses delivery. It keeps running and accepting connections, but drops the data it receives, and its health state turns YELLOW. When the Forwarder is enabled again, delivery resumes without a restart.
Monitoring: The health endpoint (/forwarder/health) and the status page show the mode and a localDelivery block:
| Field | Meaning |
|---|---|
|
|
|
|
|
Filesystem storage only: the delivery directory. |
|
S3 storage only: the bucket URL and key prefix. It never contains the upload credentials. |
|
|
|
The number of delivery files dropped since startup. |
|
When the first drop happened. Only present when files were dropped. |
|
The delivery file limits in effect, when your installation set any. |
The Prometheus endpoint (port 9090 by default) has new metrics, all with a type label that is events or amt:
| Metric | Meaning |
|---|---|
|
Delivery files handed to storage. |
|
Size distribution of the delivery files. |
|
Files dropped instead of delivered, with a |
|
S3 upload attempts, with a |
|
S3 storage only: the files waiting for upload, and the maximum. |
A series only appears once it has a value, so the S3 series never appear with filesystem storage. The metrics do not count data dropped while delivery is paused.
Command line and settings validation: The command-line tools work per mode. Use --mode to select the mode, and --help, --help args, --help config-file, --validate-args and --dump-config show and check only the settings of that mode:
java -DforwarderSettings=forwarder.properties -jar forwarder.jar --mode local --validate-args
In local mode, --validate-args checks the required settings, the port, the access key, the keystore (it exists and opens with the password, unless you use plain HTTP), the format of the installation URL, and the S3 truststore if you configured one. It does not contact your installation. A setting that the selected mode does not use is ignored with a warning in the log, and --dump-config lists it as ignored.
The Forwarder checks its settings at every start. The first invalid setting stops the Forwarder with exit code 1 and a message that names the setting. Unknown command-line arguments stop the Forwarder with exit code 255, and -D options must come before -jar.
Software Bill of Materials (SBOM): Each release now comes with an SBOM in CycloneDX format, forwarder-<version>.cdx.json, next to the Forwarder JAR. It lists the third-party components that the JAR contains.
Updated Netty from 4.2.12 to 4.2.17, which fixes CVE-2026-42578, CVE-2026-42581, CVE-2026-42583, CVE-2026-42585, CVE-2026-44249, CVE-2026-45416, CVE-2026-48043, CVE-2026-50010, CVE-2026-55831, CVE-2026-55833, CVE-2026-56745, CVE-2026-59903, CVE-2026-59921.
Updated jackson-databind from 2.21.0 to 2.22.3, which fixes CVE-2026-19032, CVE-2026-54512, CVE-2026-54514, CVE-2026-54516, CVE-2026-59889, CVE-2026-68497, CVE-2026-83557, CVE-2026-89407, CVE-2026-89425, CVE-2026-91776, CVE-2026-91777.
Release date: October 30, 2026
Updated Zulu version related to CVE-2026-114820.
Dependency update related to CVE-2026-102554.
Release date: October 22, 2026
Fix for the eMudhra Intermediate CA vulnerability.
Release date: October 12, 2026
This release fixes a JAR load event deduplication issue introduced in 2.0.4, corrects a response-parsing error that could delay JAR detail delivery to Intelligence Cloud, and updates a bundled security library.
JAR load event deduplication accuracy: The Forwarder could mistake a full JAR load event for the lightweight JAR probe event introduced by JAR load event deduplication (2.0.4), and incorrectly treat it as a duplicate of a JAR Intelligence Cloud had not yet seen in full. This could prevent Intelligence Cloud from receiving the JAR details it had requested. The Forwarder now identifies probe events by their protocol marker instead of inferring it from the event’s contents, so it no longer confuses the two.
JAR detail request delivery: If Intelligence Cloud’s response ended immediately after the JAR detail request section, with no trailing newline, the Forwarder could fail to parse the response and drop it. The affected agent would wait and then resend its event batch about 20 seconds later. The Forwarder now parses this response correctly.
Updated the bundled zlib library to address CVE-2026-85091, a heap buffer overflow that could occur during certain non-blocking compression operations.
Release date: October 7, 2026
This is a hotfix release that improves connectivity in environments with TLS-intercepting proxies. It also enables JAR load event deduplication by default, which reduces network traffic between the Forwarder and Azul Intelligence Cloud.
TLS-intercepting proxies: If the Forwarder does not trust the certificate chain that a TLS-intercepting proxy presents, it now logs a diagnostic hint. The hint shows the presented issuer and root CA, and suggests two remedies: exempt *.api.ic.azul.com from TLS inspection, or import the proxy’s root CA into the JDK truststore. Previously, the connection failed with a PKIX path building failed error without further guidance.
Connection stability: If a TLS-intercepting proxy injects extra HTTP/2 SETTINGS frames after the initial handshake, the Forwarder now discards the unexpected frames with a warning and keeps the connection open. Previously, the extra frames caused an error that dropped the shared connection to Intelligence Cloud for all in-flight requests.
JAR load event deduplication: Deduplication of JAR load events is now enabled by default. Previously, every JVM that loaded a shared JAR generated a full round trip to Intelligence Cloud, even when other JVMs had already reported the same JAR. The Forwarder now identifies JARs by a hash of their central directory and forwards only unique JAR load events. The Forwarder suppresses duplicate JAR load requests and the resulting artifact uploads. Deduplication reuses the caches that azul.deduplication.pipeline configures, so you do not need a separate cache.
JAR deduplication options: Use azul.deduplication.jar.enabled to turn JAR load event deduplication on or off, and azul.deduplication.jar.filterMinimal to control the suppression of lightweight JAR probe events. For all options and their environment variables, see All Configuration Options.
Immediate agent response for suppressed requests: When the Forwarder suppresses a duplicate JAR load request, it immediately sends the agent a response that no details are needed. The agent can then release the resources it holds without waiting for Intelligence Cloud.
Release date: May 19, 2026
Running hundreds or thousands of JVMs generates a large volume of events. Sending every event to Azul Intelligence Cloud is expensive in terms of network traffic, yet missing events means incomplete data and gaps in your analysis.
Forwarder 2.0.0 solves both problems at once. It introduces deduplication, which runs on your infrastructure before any data leaves your network. The Forwarder identifies duplicate events across JVMs within the same application environment and transmits only unique events to Azul Intelligence Cloud. You get complete, accurate data at a fraction of the transfer cost.
|
Note
|
This version of the Forwarder must be used in combination with the Azul Intelligence Cloud Agent 1.2.0 to be effective. For more information, see Agent 1.2.0 Release Notes. |
Event Deduplication: The Forwarder now automatically filters duplicate events before forwarding them to Azul Intelligence Cloud. When multiple JVMs report the same classes, JARs, or methods, the Forwarder detects duplicates and sends only unique events. This typically reduces network traffic between the Forwarder and Intelligence Cloud by 85-95%.
Deduplication is enabled by default and requires no changes to your JVM agents.
Two-layer caching: Fast in-memory cache for low-latency filtering, with an optional disk-based cache that preserves deduplication state across forwarder restarts.
Self-managing: The in-memory cache automatically manages memory under pressure. The disk-based cache auto-recovers from disk errors without manual intervention.
Deduplication monitoring: The health endpoint (/forwarder/health),
status page, and Prometheus metrics now include deduplication statistics:
saved bytes, dedup ratio, and cache health state.
Flexible deployment: Run with both caches (recommended), in-memory only (for stateless containers without disk), or as a passthrough proxy with deduplication disabled.
| Component | Previous (1.x) | New (2.0) with deduplication |
|---|---|---|
RAM |
4 GB |
8 GB |
Disk |
Not required |
10 GB (SSD recommended) |
CPU |
1-2 cores |
2 cores |
|
1-2g |
6g |
JVM flags |
None |
When using Java 9+: |
Deduplication can be disabled (azul.deduplication.enabled=false) to retain the same resource requirements as Forwarder 1.x. The --add-opens flags are only required when the disk-based cache is enabled (default).
| Setting (properties file) | Description | Default |
|---|---|---|
|
Enable or disable deduplication |
|
|
|
|
|
Location for the disk-based cache |
System temp dir |
See Setting Up the Forwarder for more details.
Release date: October 27, 2025
All Forwarder options and properties have been renamed to avoid collisions in configuration property names with other commonly used properties. See Setting Up the Forwarder for more details. Existing configuration files can still be used as the changes are backwards compatible.
The Forwarder now exposes multiple metrics in the Prometheus format, to integrate its statistics in, e.g. a Grafana dashboard, See Forwarder Metrics for more details.
Release date: April 28, 2025
Added support for HTTP/HTTPS proxies, see Forwarder Configuration Options.
Release date: March 5, 2024
All dependencies of the Forwarder are up-to-date and free of vulnerabilities as of the release date.
Issue related to releasing runtime channels during artifact uploads to Intelligence Cloud. Previously, this led to the channel being closed unexpectedly, even if it was in use by another process at the time. This fix ensures that the connection/channel remains available for sharing and reuse as intended.
Release date: December 13, 2023
All dependencies of the Forwarder are up-to-date and free of vulnerabilities as of the release date.
A custom header x-forwarder-time is added into every proxied request directed to Intelligence Cloud, serving as an indication of the time when the Forwarder proxies VM requests to Intelligence Cloud.
Network communication management between the Forwarder and the VM is improved. Robust network problem handling and comprehensive exchange of detailed information from the Forwarder to the VM has been implemented.
The communication state logged on the VM side now contains this information:
[CRS.connection][warning] Request postEventBatch failed on attempt 1 of 3,
elapsed (4,361 ms): code= 502, message=Bad Gateway, payload=null, error=[Forwarder]
The channel for uploading the artifact to Azul Intelligence Cloud has become inactive
This contains more detailed information, compared to the log message in earlier versions of the Forwarder:
[CRS.connection][warning] Request postEventBatch failed on attempt 1 of 3,
elapsed (4,361 ms): java.net.SocketException: Unexpected end of file from server
The maximum length of the response content that Intelligence Cloud can send to the VM is increased from 64KB to 512KB. Additionally, you can configure the maximum size of response data that the Forwarder may forward to the Runtimes, thus minimizing potential impact.
See for more details Forwarder Configuring Options.
An issue is fixed where the system lacked the capability to effectively manage certificate-related issues arising from the expiration of the Forwarder certificate. In some cases, such as PC hibernation, the scheduled task of re-issuing the certificate was not executed, resulting in the VM rejecting the SSL handshake, despite the Forwarder functioning properly.
Release date: May 4, 2023
Starting from version 1.0.5, you can configure the connection pool size to manage the number of simultaneous connections that are made from the Forwarder to Azul Intelligence Cloud. This allows you to optimize the system performance and minimize resource usage.
More details can be found in Forwarder Configuring Options.
Release date: March 14, 2023
Fixed a performance issue with the connection pool used to connect to the cloud:
The issue occurred when two or more threads attempted to establish a connection to the cloud simultaneously, with distinct index values. One thread was required to wait for the other, even though it was unnecessary, resulting in a delay. This unnecessary wait has been eliminated.
Resolved the problem resulting in a truncated response on the client side, which was caused by an incorrect value in the "Content-length" header when proxied by the Forwarder.
All dependencies of the Forwarder are up-to-date and free of vulnerabilities as of the release date.
Resolved an inconsistent state between the Forwarder state and the detailed metrics utilized for the computation of the state.
Enhanced the Forwarder’s functionality by adding comprehensive explanations in case the Forwarder state is not Green, enabling users to identify and address any issues with greater accuracy.
See Status API for an example.
Resolved an issue concerning the retain/release of HTTP messages that were proxied by the Forwarder, which had the potential to result in memory leaks.
Implemented the feature to periodically monitor and store the status of the Forwarder to a file.
See Forwarder Configuring Options for more information.
Release date: November 2, 2022
This version of the Forwarder contains several fixes and improvements in regards to the general launch of Azul Intelligence Cloud.
Fixed issue with duplicate proxied requests.
Fixed IOException: Premature close → channelClosed on Forwarder.
A single HTTP/2 connection cannot be used due to load issues, HTTP/2 connection pool was introduced in order to be able to work under load.
Added the ability to calculate and log concurrent requests multiplexed into one HTTP/2 connection.
Improved error handling and permissions.
Enhanced readability of logged messages.
Allowed to optionally provide the HTTPS scheme for the IC host when starting the Forwarder.
Release date: October 18, 2022
Minimize the number of Forwarder dependencies.
Added the ability to define the log level when starting the Forwarder using three different ways: via properties file, system variable or environment variable.
Fixed format of the Forwarder’s uptime. Added the ability to request extended statistics that include memory and CPU consumption.
Added homepage to the Forwarder when opening the root endpoint.
Simplification of the Forwarder authorization process.
Private key regeneration of the certificate on the Forwarder side during the daily certificate renewal process.
Added the ability to trust certificates issued to Azul by Amazon’s CA when the Forwarder connects to Azul Intelligence Cloud.
No need to manually manage the certificates issued to the Forwarder.