Forwarder 2.1.0
Forwarder 2.1.0
Release date: November, 2026
Intelligence Cloud
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.
|
What’s New
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.
Bug Fixes
-
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-Typeheader 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.
Security
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.
Azul Intelligence On-Premises
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.
What’s New
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.
Security
-
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.