Skip to content

Conversation

@mergify
Copy link
Contributor

@mergify mergify bot commented Dec 2, 2025

Release notes

[rn:skip]

What does this PR do?

Managing a Go toolchain for persisting ENV vars in logstash container artifacts has become cumbersome. We already manage a java runtime so this commit presents a path forward to use that instead of Go. The Go binary is faster than java (in my testing Go would complete in around less than 200ms while java takes over 300ms). Given the container startup time is on the order of magnitute of seconds this change should be inperceptable to consumers. The benefit from consolidating in Java is worth the slightly lower performance.

Why is it important/What is the impact to the user?

This should not be noticeable, though technically starting logstash in a container will take about 200ms longer.

Checklist

  • My code follows the style guidelines of this project
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • I have made corresponding change to the default configuration files (and/or docker env variables)
  • I have added tests that prove my fix is effective or that my feature works

How to test this PR locally

Build container:

➜  logstash git:(rewrite-env2yaml-in-java) ✗ ARCH="aarch64" rake artifact:docker
➜  logstash git:(rewrite-env2yaml-in-java) ✗ docker image ls
REPOSITORY                                 TAG              IMAGE ID       CREATED              SIZE
docker.elastic.co/logstash/logstash-full   9.3.0-SNAPSHOT   19652eb23245   About a minute ago   1.48GB

Run env2yaml directly or check at startup.

#!/bin/bash

JAVA_IMAGE="19652eb23245"
GO_IMAGE="docker.elastic.co/logstash/logstash:9.2.0"

echo "=== env2yaml comparison ==="

echo "Go:"
docker run --rm -e PIPELINE_WORKERS=4 --entrypoint="" $GO_IMAGE \
  bash -c "env2yaml /usr/share/logstash/config/logstash.yml 2>&1"

echo
echo "Java:"
docker run --rm -e PIPELINE_WORKERS=4 --entrypoint="" $JAVA_IMAGE \
  bash -c "env2yaml /usr/share/logstash/config/logstash.yml 2>&1"

echo
echo "=== Logstash startup comparison ==="

echo "Go startup:"
time timeout 10 docker run -e PIPELINE_WORKERS=4 --rm $GO_IMAGE

echo
echo "Java startup:"
time timeout 10 docker run -e PIPELINE_WORKERS=4 --rm $JAVA_IMAGE

Example:

=== env2yaml comparison ===
Go:
2025/11/11 23:52:04 Setting 'pipeline.workers' from environment.

Java:
2025/11/11 23:52:04 Setting 'pipeline.workers' from environment.

=== Logstash startup comparison ===
Go startup:
2025/11/11 23:52:04 Setting 'pipeline.workers' from environment.
Using bundled JDK: /usr/share/logstash/jdk
Sending Logstash logs to /usr/share/logstash/logs which is now configured via log4j2.properties
[2025-11-11T23:52:08,200][INFO ][logstash.runner          ] Log4j configuration path used is: /usr/share/logstash/config/log4j2.properties
[2025-11-11T23:52:08,202][INFO ][logstash.runner          ] Starting Logstash {"logstash.version"=>"9.2.0", "jruby.version"=>"jruby 9.4.13.0 (3.1.4) 2025-06-10 9938a3461f OpenJDK 64-Bit Server VM 21.0.8+9-LTS on 21.0.8+9-LTS +indy +jit [aarch64-linux]"}
[2025-11-11T23:52:08,203][INFO ][logstash.runner          ] JVM bootstrap flags: [-Xms1g, -Xmx1g, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -Djruby.compile.invokedynamic=true, -XX:+HeapDumpOnOutOfMemoryError, -Djava.security.egd=file:/dev/urandom, -Dlog4j2.isThreadContextMapInheritable=true, -Dls.cgroup.cpuacct.path.override=/, -Dls.cgroup.cpu.path.override=/, -Djruby.regexp.interruptible=true, -Djdk.io.File.enableADS=true, --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED, --add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED, --add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED, --add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED, --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED, --add-opens=java.base/java.security=ALL-UNNAMED, --add-opens=java.base/java.io=ALL-UNNAMED, --add-opens=java.base/java.nio.channels=ALL-UNNAMED, --add-opens=java.base/sun.nio.ch=ALL-UNNAMED, --add-opens=java.management/sun.management=ALL-UNNAMED, -Dio.netty.allocator.maxOrder=11]
[2025-11-11T23:52:08,217][INFO ][org.logstash.jackson.StreamReadConstraintsUtil] Jackson default value override `logstash.jackson.stream-read-constraints.max-string-length` configured to `200000000` (logstash default)
[2025-11-11T23:52:08,217][INFO ][org.logstash.jackson.StreamReadConstraintsUtil] Jackson default value override `logstash.jackson.stream-read-constraints.max-number-length` configured to `10000` (logstash default)
[2025-11-11T23:52:08,217][INFO ][org.logstash.jackson.StreamReadConstraintsUtil] Jackson default value override `logstash.jackson.stream-read-constraints.max-nesting-depth` configured to `1000` (logstash default)
[2025-11-11T23:52:08,220][INFO ][logstash.settings        ] Creating directory {:setting=>"path.queue", :path=>"/usr/share/logstash/data/queue"}
[2025-11-11T23:52:08,222][INFO ][logstash.settings        ] Creating directory {:setting=>"path.dead_letter_queue", :path=>"/usr/share/logstash/data/dead_letter_queue"}
[2025-11-11T23:52:08,286][INFO ][logstash.agent           ] No persistent UUID file found. Generating new UUID {:uuid=>"dc147b65-1477-40b7-a2db-214791cc5319", :path=>"/usr/share/logstash/data/uuid"}
[2025-11-11T23:52:08,453][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600, :ssl_enabled=>false}
[2025-11-11T23:52:08,513][INFO ][org.reflections.Reflections] Reflections took 37 ms to scan 1 urls, producing 162 keys and 557 values
[2025-11-11T23:52:08,610][INFO ][logstash.javapipeline    ][main] Pipeline `main` is configured with `pipeline.ecs_compatibility: v8` setting. All plugins in this pipeline will default to `ecs_compatibility => v8` unless explicitly configured otherwise.
[2025-11-11T23:52:08,620][INFO ][logstash.javapipeline    ][main] Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>4, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50, "pipeline.max_inflight"=>500, "batch_metric_sampling"=>"minimal", "pipeline.sources"=>["/usr/share/logstash/pipeline/logstash.conf"], :thread=>"#<Thread:0x55ea7f5c /usr/share/logstash/logstash-core/lib/logstash/java_pipeline.rb:147 run>"}
[2025-11-11T23:52:08,828][INFO ][logstash.javapipeline    ][main] Pipeline Java execution initialization time {"seconds"=>0.21}
[2025-11-11T23:52:08,829][INFO ][logstash.inputs.beats    ][main] Starting input listener {:address=>"0.0.0.0:5044"}
[2025-11-11T23:52:08,831][INFO ][logstash.javapipeline    ][main] Pipeline started {"pipeline.id"=>"main"}
[2025-11-11T23:52:08,857][INFO ][logstash.agent           ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[2025-11-11T23:52:08,868][INFO ][org.logstash.beats.Server][main][0710cad67e8f47667bc7612580d5b91f691dd8262a4187d9eca8cf87229d04aa] Starting server on port: 5044
[2025-11-11T23:52:14,841][WARN ][logstash.runner          ] SIGTERM received. Shutting down.
[2025-11-11T23:52:14,849][WARN ][logstash.runner          ] SIGTERM received. Shutting down.
[2025-11-11T23:52:23,184][INFO ][logstash.javapipeline    ][main] Pipeline terminated {"pipeline.id"=>"main"}
[2025-11-11T23:52:24,102][INFO ][logstash.pipelinesregistry] Removed pipeline from registry successfully {:pipeline_id=>:main}
[2025-11-11T23:52:24,107][INFO ][logstash.runner          ] Logstash shut down.

real	0m19.434s
user	0m0.021s
sys	0m0.022s

Java startup:
2025/11/11 23:52:24 Setting 'pipeline.workers' from environment.
Using bundled JDK: /usr/share/logstash/jdk
Sending Logstash logs to /usr/share/logstash/logs which is now configured via log4j2.properties
[2025-11-11T23:52:27,737][INFO ][logstash.runner          ] Log4j configuration path used is: /usr/share/logstash/config/log4j2.properties
[2025-11-11T23:52:27,740][INFO ][logstash.runner          ] Starting Logstash {"logstash.version"=>"9.3.0", "jruby.version"=>"jruby 9.4.13.0 (3.1.4) 2025-06-10 9938a3461f OpenJDK 64-Bit Server VM 21.0.9+10-LTS on 21.0.9+10-LTS +indy +jit [aarch64-linux]"}
[2025-11-11T23:52:27,741][INFO ][logstash.runner          ] JVM bootstrap flags: [-Xms1g, -Xmx1g, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -XX:+HeapDumpOnOutOfMemoryError, -Djava.security.egd=file:/dev/urandom, -Dls.cgroup.cpuacct.path.override=/, -Dls.cgroup.cpu.path.override=/, -Djruby.regexp.interruptible=true, -Djruby.compile.invokedynamic=true, -Djdk.io.File.enableADS=true, -Dlog4j2.isThreadContextMapInheritable=true, --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED, --add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED, --add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED, --add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED, --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED, --add-opens=java.base/java.security=ALL-UNNAMED, --add-opens=java.base/java.io=ALL-UNNAMED, --add-opens=java.base/java.nio.channels=ALL-UNNAMED, --add-opens=java.base/sun.nio.ch=ALL-UNNAMED, --add-opens=java.management/sun.management=ALL-UNNAMED, -Dio.netty.allocator.maxOrder=11]
[2025-11-11T23:52:27,755][INFO ][org.logstash.jackson.StreamReadConstraintsUtil] Jackson default value override `logstash.jackson.stream-read-constraints.max-string-length` configured to `200000000` (logstash default)
[2025-11-11T23:52:27,755][INFO ][org.logstash.jackson.StreamReadConstraintsUtil] Jackson default value override `logstash.jackson.stream-read-constraints.max-number-length` configured to `10000` (logstash default)
[2025-11-11T23:52:27,755][INFO ][org.logstash.jackson.StreamReadConstraintsUtil] Jackson default value override `logstash.jackson.stream-read-constraints.max-nesting-depth` configured to `1000` (logstash default)
[2025-11-11T23:52:27,758][INFO ][logstash.settings        ] Creating directory {:setting=>"path.queue", :path=>"/usr/share/logstash/data/queue"}
[2025-11-11T23:52:27,760][INFO ][logstash.settings        ] Creating directory {:setting=>"path.dead_letter_queue", :path=>"/usr/share/logstash/data/dead_letter_queue"}
[2025-11-11T23:52:27,822][INFO ][logstash.agent           ] No persistent UUID file found. Generating new UUID {:uuid=>"25df194b-1282-49b1-945f-26f145f99d1e", :path=>"/usr/share/logstash/data/uuid"}
[2025-11-11T23:52:27,984][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600, :ssl_enabled=>false}
[2025-11-11T23:52:28,045][INFO ][org.reflections.Reflections] Reflections took 39 ms to scan 1 urls, producing 162 keys and 558 values
[2025-11-11T23:52:28,153][INFO ][logstash.javapipeline    ][main] Pipeline `main` is configured with `pipeline.ecs_compatibility: v8` setting. All plugins in this pipeline will default to `ecs_compatibility => v8` unless explicitly configured otherwise.
[2025-11-11T23:52:28,164][INFO ][logstash.javapipeline    ][main] Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>4, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50, "pipeline.max_inflight"=>500, "batch_metric_sampling"=>"minimal", "pipeline.sources"=>["/usr/share/logstash/pipeline/logstash.conf"], :thread=>"#<Thread:0x775975c0 /usr/share/logstash/logstash-core/lib/logstash/java_pipeline.rb:147 run>"}
[2025-11-11T23:52:28,351][INFO ][logstash.javapipeline    ][main] Pipeline Java execution initialization time {"seconds"=>0.19}
[2025-11-11T23:52:28,352][INFO ][logstash.inputs.beats    ][main] Starting input listener {:address=>"0.0.0.0:5044"}
[2025-11-11T23:52:28,354][INFO ][logstash.javapipeline    ][main] Pipeline started {"pipeline.id"=>"main"}
[2025-11-11T23:52:28,359][INFO ][logstash.agent           ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[2025-11-11T23:52:28,376][INFO ][org.logstash.beats.Server][main][0710cad67e8f47667bc7612580d5b91f691dd8262a4187d9eca8cf87229d04aa] Starting server on port: 5044
[2025-11-11T23:52:34,268][WARN ][logstash.runner          ] SIGTERM received. Shutting down.
[2025-11-11T23:52:34,278][WARN ][logstash.runner          ] SIGTERM received. Shutting down.
[2025-11-11T23:52:42,608][INFO ][logstash.javapipeline    ][main] Pipeline terminated {"pipeline.id"=>"main"}
[2025-11-11T23:52:43,552][INFO ][logstash.pipelinesregistry] Removed pipeline from registry successfully {:pipeline_id=>:main}
[2025-11-11T23:52:43,558][INFO ][logstash.runner          ] Logstash shut down.

real	0m19.441s
user	0m0.019s
sys	0m0.019s

This is an automatic backport of pull request #18423 done by [Mergify](https://mergify.com).

* WIP: Rewrite Env2yaml in java instead of Go

Managing a Go toolchain for persisting ENV vars in logstash container artifacts
has become cumbersome. We already manage a java runtime so this commit presents
a path forward to use that instead of Go. The Go binary is faster than java (in
my testing Go would complete in around less than 200ms while java takes over
300ms). Given the container startup time is on the order of magnitute of seconds
this change should be inperceptable to consumers. The benefit from consolidating
in Java is worth the slightly lower performance.

* Use TreeMap in java to try to replicate lexicographical order

* Explicit imports and TreeMap everywher

* Go removals and ironbank workflow update

* More non-code removals

* Update based on codereview

Use snakeyaml-engine and some java flags for faster execution

* Build env2yaml in stage

Build env2yaml in a separate build stage for container artifacts. Include
its dependencies and manage separately from logstash. Continue to use the
java runtime in the final container to run the program, but manage the classpath
separately. Note this did not use gradle for dependency management because installing
that as a depdendcy was not worth it compared with downloading a jar directly.

* Use gradle to manage snakeyaml-engine dependency

Use gradle (and a dedicated gradle base image) for building env2yaml

* Refactor to build env2yaml with gradle rather than in docker build

Dont rely on compiling at docker build time, rather do it when logstash
compilation is done.

* Dont try to use snakeyaml from jruby

The complexity around trying to copy over the jar shipped with jruby is not worth
how easy it is to just manage it with gradle. This helps with keeping env2yaml contained.

* Add license for snakeyaml-engine

Licence from https://bitbucket.org/snakeyaml/snakeyaml-engine/src/master/LICENSE.txt

* Cleanup and bugfix

* Stop skipping empty env vars

I mistakenly thought I had observed this behavior in the go version.

* Remove quotes from interpolated values

Even though we set `.setDefaultScalarStyle(ScalarStyle.PLAIN)` snakeyaml-engine
ends up quoting `${}` values. This commit removes them as this was not the behavior
with the go version.

(cherry picked from commit b15c6c5)

# Conflicts:
#	docker/Makefile
#	docker/data/logstash/env2yaml/env2yaml.go
#	docker/templates/Dockerfile.erb
#	docker/templates/IronbankDockerfile.erb
#	rakelib/artifacts.rake
#	settings.gradle
@mergify mergify bot added backport conflicts Detected git conflicts labels Dec 2, 2025
@mergify
Copy link
Contributor Author

mergify bot commented Dec 2, 2025

Cherry-pick of b15c6c5 has failed:

On branch mergify/bp/8.19/pr-18423
Your branch is up to date with 'origin/8.19'.

You are currently cherry-picking commit b15c6c50f.
  (fix conflicts and run "git cherry-pick --continue")
  (use "git cherry-pick --skip" to skip this patch)
  (use "git cherry-pick --abort" to cancel the cherry-pick operation)

Changes to be committed:
	modified:   .gitignore
	modified:   build.gradle
	new file:   docker/data/logstash/env2yaml/build.gradle
	new file:   docker/data/logstash/env2yaml/env2yaml
	deleted:    docker/data/logstash/env2yaml/go.mod
	deleted:    docker/data/logstash/env2yaml/go.sum
	new file:   docker/data/logstash/env2yaml/src/main/java/org/logstash/env2yaml/Env2Yaml.java
	deleted:    docker/ironbank/go/src/env2yaml/go.mod
	deleted:    docker/ironbank/go/src/env2yaml/go.sum
	deleted:    docker/ironbank/go/src/env2yaml/vendor/modules.txt
	modified:   docker/templates/hardening_manifest.yaml.erb
	modified:   tools/dependencies-report/src/main/resources/licenseMapping.csv
	new file:   tools/dependencies-report/src/main/resources/notices/org.snakeyaml!snakeyaml-engine-NOTICE.txt

Unmerged paths:
  (use "git add/rm <file>..." as appropriate to mark resolution)
	both modified:   docker/Makefile
	deleted by them: docker/data/logstash/env2yaml/env2yaml.go
	both modified:   docker/templates/Dockerfile.erb
	deleted by us:   docker/templates/IronbankDockerfile.erb
	both modified:   rakelib/artifacts.rake
	both modified:   settings.gradle

To fix up this pull request, you can check it out locally. See documentation: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/checking-out-pull-requests-locally

@mergify mergify bot mentioned this pull request Dec 2, 2025
5 tasks
@donoghuc
Copy link
Member

donoghuc commented Dec 3, 2025

Working through the backport. The template file is significantly different than in 9/main 😅

@donoghuc
Copy link
Member

donoghuc commented Dec 4, 2025

run exhaustive tests

@donoghuc
Copy link
Member

donoghuc commented Dec 4, 2025

Manual build testing:

  1. normal artifact:
➜  logstash git:(1e7afbd2ab) ✗ ARCH="aarch64" rake artifact:docker
To honour the JVM settings for this build a single-use Daemon process will be forked. For more on this, please refer to https://docs.gradle.org/8.7/userguide/gradle_daemon.html#sec:disabling_the_daemon in the Gradle documentation.
Daemon will be stopped at the end of the build

> Task :downloadJRuby
Download https://repo1.maven.org/maven2/org/jruby/jruby-dist/9.4.9.0/jruby-dist-9.4.9.0-bin.tar.gz

> Task :logstash-core:compileJava
Note: Processing Log4j annotations
Note: Annotations processed
Note: Processing Log4j annotations
Note: No elements to process

BUILD SUCCESSFUL in 30s
42 actionable tasks: 39 executed, 3 up-to-date
Using system java: /Users/cas/.jenv/shims/java
Skipping bundler install...
Building logstash-core using gradle
./gradlew assemble
To honour the JVM settings for this build a single-use Daemon process will be forked. For more on this, please refer to https://docs.gradle.org/8.7/userguide/gradle_daemon.html#sec:disabling_the_daemon in the Gradle documentation.
Daemon will be stopped at the end of the build

> Task :downloadJRuby UP-TO-DATE
Download https://repo1.maven.org/maven2/org/jruby/jruby-dist/9.4.9.0/jruby-dist-9.4.9.0-bin.tar.gz

BUILD SUCCESSFUL in 3s
41 actionable tasks: 2 executed, 39 up-to-date
[plugin:install-default] Installing default plugins
Installing logstash-codec-avro, logstash-codec-cef, logstash-codec-collectd, logstash-codec-dots, logstash-codec-edn, logstash-codec-edn_lines, logstash-codec-es_bulk, logstash-codec-fluent, logstash-codec-graphite, logstash-codec-json, logstash-codec-json_lines, logstash-codec-line, logstash-codec-msgpack, logstash-codec-multiline, logstash-codec-netflow, logstash-codec-plain, logstash-codec-rubydebug, logstash-filter-aggregate, logstash-filter-anonymize, logstash-filter-cidr, logstash-filter-clone, logstash-filter-csv, logstash-filter-date, logstash-filter-de_dot, logstash-filter-dissect, logstash-filter-dns, logstash-filter-drop, logstash-filter-elastic_integration, logstash-filter-elasticsearch, logstash-filter-fingerprint, logstash-filter-geoip, logstash-filter-grok, logstash-filter-http, logstash-filter-json, logstash-filter-kv, logstash-filter-memcached, logstash-filter-metrics, logstash-filter-mutate, logstash-filter-prune, logstash-filter-ruby, logstash-filter-sleep, logstash-filter-split, logstash-filter-syslog_pri, logstash-filter-throttle, logstash-filter-translate, logstash-filter-truncate, logstash-filter-urldecode, logstash-filter-useragent, logstash-filter-uuid, logstash-filter-xml, logstash-input-azure_event_hubs, logstash-input-beats, logstash-input-couchdb_changes, logstash-input-dead_letter_queue, logstash-input-elasticsearch, logstash-input-exec, logstash-input-file, logstash-input-ganglia, logstash-input-gelf, logstash-input-generator, logstash-input-graphite, logstash-input-heartbeat, logstash-input-http, logstash-input-http_poller, logstash-input-jms, logstash-input-pipe, logstash-input-redis, logstash-input-stdin, logstash-input-syslog, logstash-input-tcp, logstash-input-twitter, logstash-input-udp, logstash-input-unix, logstash-integration-elastic_enterprise_search, logstash-input-elastic_serverless_forwarder, logstash-integration-jdbc, logstash-integration-kafka, logstash-integration-logstash, logstash-integration-rabbitmq, logstash-integration-snmp, logstash-integration-aws, logstash-output-csv, logstash-output-elasticsearch, logstash-output-email, logstash-output-file, logstash-output-graphite, logstash-output-http, logstash-output-lumberjack, logstash-output-nagios, logstash-output-null, logstash-output-pipe, logstash-output-redis, logstash-output-stdout, logstash-output-tcp, logstash-output-udp, logstash-output-webhdfs
Preserving Gemfile gem options for plugin logstash-codec-avro
Preserving Gemfile gem options for plugin logstash-codec-cef
Preserving Gemfile gem options for plugin logstash-codec-collectd
Preserving Gemfile gem options for plugin logstash-codec-dots
Preserving Gemfile gem options for plugin logstash-codec-edn
Preserving Gemfile gem options for plugin logstash-codec-edn_lines
Preserving Gemfile gem options for plugin logstash-codec-es_bulk
Preserving Gemfile gem options for plugin logstash-codec-fluent
Preserving Gemfile gem options for plugin logstash-codec-graphite
Preserving Gemfile gem options for plugin logstash-codec-json
Preserving Gemfile gem options for plugin logstash-codec-json_lines
Preserving Gemfile gem options for plugin logstash-codec-line
Preserving Gemfile gem options for plugin logstash-codec-msgpack
Preserving Gemfile gem options for plugin logstash-codec-multiline
Preserving Gemfile gem options for plugin logstash-codec-netflow
Preserving Gemfile gem options for plugin logstash-codec-plain
Preserving Gemfile gem options for plugin logstash-codec-rubydebug
Preserving Gemfile gem options for plugin logstash-filter-aggregate
Preserving Gemfile gem options for plugin logstash-filter-anonymize
Preserving Gemfile gem options for plugin logstash-filter-cidr
Preserving Gemfile gem options for plugin logstash-filter-clone
Preserving Gemfile gem options for plugin logstash-filter-csv
Preserving Gemfile gem options for plugin logstash-filter-date
Preserving Gemfile gem options for plugin logstash-filter-de_dot
Preserving Gemfile gem options for plugin logstash-filter-dissect
Preserving Gemfile gem options for plugin logstash-filter-dns
Preserving Gemfile gem options for plugin logstash-filter-drop
Preserving Gemfile gem options for plugin logstash-filter-elastic_integration
Preserving Gemfile gem options for plugin logstash-filter-elasticsearch
Preserving Gemfile gem options for plugin logstash-filter-fingerprint
Preserving Gemfile gem options for plugin logstash-filter-geoip
Preserving Gemfile gem options for plugin logstash-filter-grok
Preserving Gemfile gem options for plugin logstash-filter-http
Preserving Gemfile gem options for plugin logstash-filter-json
Preserving Gemfile gem options for plugin logstash-filter-kv
Preserving Gemfile gem options for plugin logstash-filter-memcached
Preserving Gemfile gem options for plugin logstash-filter-metrics
Preserving Gemfile gem options for plugin logstash-filter-mutate
Preserving Gemfile gem options for plugin logstash-filter-prune
Preserving Gemfile gem options for plugin logstash-filter-ruby
Preserving Gemfile gem options for plugin logstash-filter-sleep
Preserving Gemfile gem options for plugin logstash-filter-split
Preserving Gemfile gem options for plugin logstash-filter-syslog_pri
Preserving Gemfile gem options for plugin logstash-filter-throttle
Preserving Gemfile gem options for plugin logstash-filter-translate
Preserving Gemfile gem options for plugin logstash-filter-truncate
Preserving Gemfile gem options for plugin logstash-filter-urldecode
Preserving Gemfile gem options for plugin logstash-filter-useragent
Preserving Gemfile gem options for plugin logstash-filter-uuid
Preserving Gemfile gem options for plugin logstash-filter-xml
Preserving Gemfile gem options for plugin logstash-input-azure_event_hubs
Preserving Gemfile gem options for plugin logstash-input-beats
Preserving Gemfile gem options for plugin logstash-input-couchdb_changes
Preserving Gemfile gem options for plugin logstash-input-dead_letter_queue
Preserving Gemfile gem options for plugin logstash-input-elasticsearch
Preserving Gemfile gem options for plugin logstash-input-exec
Preserving Gemfile gem options for plugin logstash-input-file
Preserving Gemfile gem options for plugin logstash-input-ganglia
Preserving Gemfile gem options for plugin logstash-input-gelf
Preserving Gemfile gem options for plugin logstash-input-generator
Preserving Gemfile gem options for plugin logstash-input-graphite
Preserving Gemfile gem options for plugin logstash-input-heartbeat
Preserving Gemfile gem options for plugin logstash-input-http
Preserving Gemfile gem options for plugin logstash-input-http_poller
Preserving Gemfile gem options for plugin logstash-input-jms
Preserving Gemfile gem options for plugin logstash-input-pipe
Preserving Gemfile gem options for plugin logstash-input-redis
Preserving Gemfile gem options for plugin logstash-input-stdin
Preserving Gemfile gem options for plugin logstash-input-syslog
Preserving Gemfile gem options for plugin logstash-input-tcp
Preserving Gemfile gem options for plugin logstash-input-twitter
Preserving Gemfile gem options for plugin logstash-input-udp
Preserving Gemfile gem options for plugin logstash-input-unix
Preserving Gemfile gem options for plugin logstash-integration-elastic_enterprise_search
Preserving Gemfile gem options for plugin logstash-input-elastic_serverless_forwarder
Preserving Gemfile gem options for plugin logstash-integration-jdbc
Preserving Gemfile gem options for plugin logstash-integration-kafka
Preserving Gemfile gem options for plugin logstash-integration-logstash
Preserving Gemfile gem options for plugin logstash-integration-rabbitmq
Preserving Gemfile gem options for plugin logstash-integration-snmp
Preserving Gemfile gem options for plugin logstash-integration-aws
Preserving Gemfile gem options for plugin logstash-output-csv
Preserving Gemfile gem options for plugin logstash-output-elasticsearch
Preserving Gemfile gem options for plugin logstash-output-email
Preserving Gemfile gem options for plugin logstash-output-file
Preserving Gemfile gem options for plugin logstash-output-graphite
Preserving Gemfile gem options for plugin logstash-output-http
Preserving Gemfile gem options for plugin logstash-output-lumberjack
Preserving Gemfile gem options for plugin logstash-output-nagios
Preserving Gemfile gem options for plugin logstash-output-null
Preserving Gemfile gem options for plugin logstash-output-pipe
Preserving Gemfile gem options for plugin logstash-output-redis
Preserving Gemfile gem options for plugin logstash-output-stdout
Preserving Gemfile gem options for plugin logstash-output-tcp
Preserving Gemfile gem options for plugin logstash-output-udp
Preserving Gemfile gem options for plugin logstash-output-webhdfs
Installation successful
cleaned orphaned dependency ruby-maven (3.9.3)
[artifact:archives] Building tar.gz/zip of default plugins for OS: linux, arch: arm64
[artifact:tar] building build/logstash-8.19.9-SNAPSHOT-linux-aarch64.tar.gz
[artifact:archives] Building tar.gz/zip of default plugins for OS: darwin, arch: arm64
[artifact:tar] building build/logstash-8.19.9-SNAPSHOT-darwin-aarch64.tar.gz
[docker] Building docker image
➜  logstash git:(1e7afbd2ab) ✗ docker image ls
                                                                                                                           i Info →   U  In Use
IMAGE                                                      ID             DISK USAGE   CONTENT SIZE   EXTRA
docker.elastic.co/logstash/logstash-full:8.19.9-SNAPSHOT   687c92a718b8       1.59GB          555MB
docker.elastic.co/logstash/logstash:8.19.9-SNAPSHOT        687c92a718b8       1.59GB          555MB
python:3                                                   595140b76899       1.61GB          403MB
➜  logstash git:(1e7afbd2ab) ✗ docker run --rm -e PIPELINE_WORKERS=3 -e LOGSTASH_KEYSTORE_PASS="" 687c92a718b8 -e 'input { generator { count => 1 } } output { stdout { codec => rubydebug } }'
2025/12/04 00:15:07 Setting 'pipeline.workers' from environment.
Using bundled JDK: /usr/share/logstash/jdk
Sending Logstash logs to /usr/share/logstash/logs which is now configured via log4j2.properties
[2025-12-04T00:15:11,166][WARN ][org.logstash.deprecation.settings.DeprecatedAlias] The setting `http.host` is a deprecated alias for `api.http.host` and will be removed in version 9. Please use `api.http.host` instead
[2025-12-04T00:15:11,172][INFO ][logstash.runner          ] Log4j configuration path used is: /usr/share/logstash/config/log4j2.properties
[2025-12-04T00:15:11,172][WARN ][deprecation.logstash.runner] 'pipeline.buffer.type' setting is not explicitly defined.Before moving to 9.x set it to 'heap' and tune heap size upward, or set it to 'direct' to maintain existing behavior.
[2025-12-04T00:15:11,173][INFO ][logstash.runner          ] Starting Logstash {"logstash.version"=>"8.19.9", "jruby.version"=>"jruby 9.4.9.0 (3.1.4) 2024-11-04 547c6b150e OpenJDK 64-Bit Server VM 21.0.9+10-LTS on 21.0.9+10-LTS +indy +jit [aarch64-linux]"}
[2025-12-04T00:15:11,173][INFO ][logstash.runner          ] JVM bootstrap flags: [-Xms1g, -Xmx1g, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -Djruby.compile.invokedynamic=true, -XX:+HeapDumpOnOutOfMemoryError, -Djava.security.egd=file:/dev/urandom, -Dlog4j2.isThreadContextMapInheritable=true, -Dls.cgroup.cpuacct.path.override=/, -Dls.cgroup.cpu.path.override=/, -Djruby.regexp.interruptible=true, -Djdk.io.File.enableADS=true, --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED, --add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED, --add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED, --add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED, --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED, --add-opens=java.base/java.security=ALL-UNNAMED, --add-opens=java.base/java.io=ALL-UNNAMED, --add-opens=java.base/java.nio.channels=ALL-UNNAMED, --add-opens=java.base/sun.nio.ch=ALL-UNNAMED, --add-opens=java.management/sun.management=ALL-UNNAMED, -Dio.netty.allocator.maxOrder=11]
[2025-12-04T00:15:11,186][INFO ][org.logstash.jackson.StreamReadConstraintsUtil] Jackson default value override `logstash.jackson.stream-read-constraints.max-string-length` configured to `200000000` (logstash default)
[2025-12-04T00:15:11,187][INFO ][org.logstash.jackson.StreamReadConstraintsUtil] Jackson default value override `logstash.jackson.stream-read-constraints.max-number-length` configured to `10000` (logstash default)
[2025-12-04T00:15:11,187][INFO ][org.logstash.jackson.StreamReadConstraintsUtil] Jackson default value override `logstash.jackson.stream-read-constraints.max-nesting-depth` configured to `1000` (logstash default)
[2025-12-04T00:15:11,190][INFO ][logstash.settings        ] Creating directory {:setting=>"path.queue", :path=>"/usr/share/logstash/data/queue"}
[2025-12-04T00:15:11,192][INFO ][logstash.settings        ] Creating directory {:setting=>"path.dead_letter_queue", :path=>"/usr/share/logstash/data/dead_letter_queue"}
[2025-12-04T00:15:11,249][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
[2025-12-04T00:15:11,257][INFO ][logstash.agent           ] No persistent UUID file found. Generating new UUID {:uuid=>"9dc8e362-ba6b-4d0f-9715-e6ed283a1af9", :path=>"/usr/share/logstash/data/uuid"}
[2025-12-04T00:15:11,404][WARN ][logstash.monitoringextension.pipelineregisterhook] xpack.monitoring.enabled has not been defined, but found elasticsearch configuration. Please explicitly set `xpack.monitoring.enabled: true` in logstash.yml
[2025-12-04T00:15:11,404][WARN ][deprecation.logstash.monitoringextension.pipelineregisterhook] Internal collectors option for Logstash monitoring is deprecated and targeted for removal in the next major version.
Please configure Elastic Agent to monitor Logstash. Documentation can be found at:
https://www.elastic.co/guide/en/logstash/current/monitoring-with-elastic-agent.html
[2025-12-04T00:15:11,491][INFO ][logstash.licensechecker.licensereader] Elasticsearch pool URLs updated {:changes=>{:removed=>[], :added=>[http://elasticsearch:9200/]}}
[2025-12-04T00:15:11,507][INFO ][logstash.licensechecker.licensereader] Failed to perform request {:message=>"elasticsearch: Name or service not known", :exception=>Manticore::ResolutionFailure, :cause=>#<Java::JavaNet::UnknownHostException: elasticsearch: Name or service not known>}
[2025-12-04T00:15:11,508][WARN ][logstash.licensechecker.licensereader] Attempted to resurrect connection to dead ES instance, but got an error {:url=>"http://elasticsearch:9200/", :exception=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :message=>"Elasticsearch Unreachable: [http://elasticsearch:9200/][Manticore::ResolutionFailure] elasticsearch: Name or service not known"}
[2025-12-04T00:15:11,510][INFO ][logstash.licensechecker.licensereader] Failed to perform request {:message=>"elasticsearch", :exception=>Manticore::ResolutionFailure, :cause=>#<Java::JavaNet::UnknownHostException: elasticsearch>}
[2025-12-04T00:15:11,511][WARN ][logstash.licensechecker.licensereader] Marking url as dead. Last error: [LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError] Elasticsearch Unreachable: [http://elasticsearch:9200/][Manticore::ResolutionFailure] elasticsearch {:url=

Ironbank artifact:

➜  logstash git:(91f4b34bc1) ✗ rake artifact:dockerfile_ironbank
Using system java: /Users/cas/.jenv/shims/java
Skipping bundler install...
Building logstash-core using gradle
./gradlew assemble
To honour the JVM settings for this build a single-use Daemon process will be forked. For more on this, please refer to https://docs.gradle.org/8.7/userguide/gradle_daemon.html#sec:disabling_the_daemon in the Gradle documentation.
Daemon will be stopped at the end of the build

> Task :downloadJRuby UP-TO-DATE
Download https://repo1.maven.org/maven2/org/jruby/jruby-dist/9.4.9.0/jruby-dist-9.4.9.0-bin.tar.gz

BUILD SUCCESSFUL in 3s
41 actionable tasks: 2 executed, 39 up-to-date
[plugin:install-default] Installing default plugins
Installing logstash-codec-avro, logstash-codec-cef, logstash-codec-collectd, logstash-codec-dots, logstash-codec-edn, logstash-codec-edn_lines, logstash-codec-es_bulk, logstash-codec-fluent, logstash-codec-graphite, logstash-codec-json, logstash-codec-json_lines, logstash-codec-line, logstash-codec-msgpack, logstash-codec-multiline, logstash-codec-netflow, logstash-codec-plain, logstash-codec-rubydebug, logstash-filter-aggregate, logstash-filter-anonymize, logstash-filter-cidr, logstash-filter-clone, logstash-filter-csv, logstash-filter-date, logstash-filter-de_dot, logstash-filter-dissect, logstash-filter-dns, logstash-filter-drop, logstash-filter-elastic_integration, logstash-filter-elasticsearch, logstash-filter-fingerprint, logstash-filter-geoip, logstash-filter-grok, logstash-filter-http, logstash-filter-json, logstash-filter-kv, logstash-filter-memcached, logstash-filter-metrics, logstash-filter-mutate, logstash-filter-prune, logstash-filter-ruby, logstash-filter-sleep, logstash-filter-split, logstash-filter-syslog_pri, logstash-filter-throttle, logstash-filter-translate, logstash-filter-truncate, logstash-filter-urldecode, logstash-filter-useragent, logstash-filter-uuid, logstash-filter-xml, logstash-input-azure_event_hubs, logstash-input-beats, logstash-input-couchdb_changes, logstash-input-dead_letter_queue, logstash-input-elasticsearch, logstash-input-exec, logstash-input-file, logstash-input-ganglia, logstash-input-gelf, logstash-input-generator, logstash-input-graphite, logstash-input-heartbeat, logstash-input-http, logstash-input-http_poller, logstash-input-jms, logstash-input-pipe, logstash-input-redis, logstash-input-stdin, logstash-input-syslog, logstash-input-tcp, logstash-input-twitter, logstash-input-udp, logstash-input-unix, logstash-integration-elastic_enterprise_search, logstash-input-elastic_serverless_forwarder, logstash-integration-jdbc, logstash-integration-kafka, logstash-integration-logstash, logstash-integration-rabbitmq, logstash-integration-snmp, logstash-integration-aws, logstash-output-csv, logstash-output-elasticsearch, logstash-output-email, logstash-output-file, logstash-output-graphite, logstash-output-http, logstash-output-lumberjack, logstash-output-nagios, logstash-output-null, logstash-output-pipe, logstash-output-redis, logstash-output-stdout, logstash-output-tcp, logstash-output-udp, logstash-output-webhdfs
Preserving Gemfile gem options for plugin logstash-codec-avro
Preserving Gemfile gem options for plugin logstash-codec-cef
Preserving Gemfile gem options for plugin logstash-codec-collectd
Preserving Gemfile gem options for plugin logstash-codec-dots
Preserving Gemfile gem options for plugin logstash-codec-edn
Preserving Gemfile gem options for plugin logstash-codec-edn_lines
Preserving Gemfile gem options for plugin logstash-codec-es_bulk
Preserving Gemfile gem options for plugin logstash-codec-fluent
Preserving Gemfile gem options for plugin logstash-codec-graphite
Preserving Gemfile gem options for plugin logstash-codec-json
Preserving Gemfile gem options for plugin logstash-codec-json_lines
Preserving Gemfile gem options for plugin logstash-codec-line
Preserving Gemfile gem options for plugin logstash-codec-msgpack
Preserving Gemfile gem options for plugin logstash-codec-multiline
Preserving Gemfile gem options for plugin logstash-codec-netflow
Preserving Gemfile gem options for plugin logstash-codec-plain
Preserving Gemfile gem options for plugin logstash-codec-rubydebug
Preserving Gemfile gem options for plugin logstash-filter-aggregate
Preserving Gemfile gem options for plugin logstash-filter-anonymize
Preserving Gemfile gem options for plugin logstash-filter-cidr
Preserving Gemfile gem options for plugin logstash-filter-clone
Preserving Gemfile gem options for plugin logstash-filter-csv
Preserving Gemfile gem options for plugin logstash-filter-date
Preserving Gemfile gem options for plugin logstash-filter-de_dot
Preserving Gemfile gem options for plugin logstash-filter-dissect
Preserving Gemfile gem options for plugin logstash-filter-dns
Preserving Gemfile gem options for plugin logstash-filter-drop
Preserving Gemfile gem options for plugin logstash-filter-elastic_integration
Preserving Gemfile gem options for plugin logstash-filter-elasticsearch
Preserving Gemfile gem options for plugin logstash-filter-fingerprint
Preserving Gemfile gem options for plugin logstash-filter-geoip
Preserving Gemfile gem options for plugin logstash-filter-grok
Preserving Gemfile gem options for plugin logstash-filter-http
Preserving Gemfile gem options for plugin logstash-filter-json
Preserving Gemfile gem options for plugin logstash-filter-kv
Preserving Gemfile gem options for plugin logstash-filter-memcached
Preserving Gemfile gem options for plugin logstash-filter-metrics
Preserving Gemfile gem options for plugin logstash-filter-mutate
Preserving Gemfile gem options for plugin logstash-filter-prune
Preserving Gemfile gem options for plugin logstash-filter-ruby
Preserving Gemfile gem options for plugin logstash-filter-sleep
Preserving Gemfile gem options for plugin logstash-filter-split
Preserving Gemfile gem options for plugin logstash-filter-syslog_pri
Preserving Gemfile gem options for plugin logstash-filter-throttle
Preserving Gemfile gem options for plugin logstash-filter-translate
Preserving Gemfile gem options for plugin logstash-filter-truncate
Preserving Gemfile gem options for plugin logstash-filter-urldecode
Preserving Gemfile gem options for plugin logstash-filter-useragent
Preserving Gemfile gem options for plugin logstash-filter-uuid
Preserving Gemfile gem options for plugin logstash-filter-xml
Preserving Gemfile gem options for plugin logstash-input-azure_event_hubs
Preserving Gemfile gem options for plugin logstash-input-beats
Preserving Gemfile gem options for plugin logstash-input-couchdb_changes
Preserving Gemfile gem options for plugin logstash-input-dead_letter_queue
Preserving Gemfile gem options for plugin logstash-input-elasticsearch
Preserving Gemfile gem options for plugin logstash-input-exec
Preserving Gemfile gem options for plugin logstash-input-file
Preserving Gemfile gem options for plugin logstash-input-ganglia
Preserving Gemfile gem options for plugin logstash-input-gelf
Preserving Gemfile gem options for plugin logstash-input-generator
Preserving Gemfile gem options for plugin logstash-input-graphite
Preserving Gemfile gem options for plugin logstash-input-heartbeat
Preserving Gemfile gem options for plugin logstash-input-http
Preserving Gemfile gem options for plugin logstash-input-http_poller
Preserving Gemfile gem options for plugin logstash-input-jms
Preserving Gemfile gem options for plugin logstash-input-pipe
Preserving Gemfile gem options for plugin logstash-input-redis
Preserving Gemfile gem options for plugin logstash-input-stdin
Preserving Gemfile gem options for plugin logstash-input-syslog
Preserving Gemfile gem options for plugin logstash-input-tcp
Preserving Gemfile gem options for plugin logstash-input-twitter
Preserving Gemfile gem options for plugin logstash-input-udp
Preserving Gemfile gem options for plugin logstash-input-unix
Preserving Gemfile gem options for plugin logstash-integration-elastic_enterprise_search
Preserving Gemfile gem options for plugin logstash-input-elastic_serverless_forwarder
Preserving Gemfile gem options for plugin logstash-integration-jdbc
Preserving Gemfile gem options for plugin logstash-integration-kafka
Preserving Gemfile gem options for plugin logstash-integration-logstash
Preserving Gemfile gem options for plugin logstash-integration-rabbitmq
Preserving Gemfile gem options for plugin logstash-integration-snmp
Preserving Gemfile gem options for plugin logstash-integration-aws
Preserving Gemfile gem options for plugin logstash-output-csv
Preserving Gemfile gem options for plugin logstash-output-elasticsearch
Preserving Gemfile gem options for plugin logstash-output-email
Preserving Gemfile gem options for plugin logstash-output-file
Preserving Gemfile gem options for plugin logstash-output-graphite
Preserving Gemfile gem options for plugin logstash-output-http
Preserving Gemfile gem options for plugin logstash-output-lumberjack
Preserving Gemfile gem options for plugin logstash-output-nagios
Preserving Gemfile gem options for plugin logstash-output-null
Preserving Gemfile gem options for plugin logstash-output-pipe
Preserving Gemfile gem options for plugin logstash-output-redis
Preserving Gemfile gem options for plugin logstash-output-stdout
Preserving Gemfile gem options for plugin logstash-output-tcp
Preserving Gemfile gem options for plugin logstash-output-udp
Preserving Gemfile gem options for plugin logstash-output-webhdfs
Installation successful
[dockerfiles] Building ironbank Dockerfiles
Dockerfiles created in /Users/cas/elastic-repos/logstash/build
➜  logstash git:(91f4b34bc1) ✗ cd build/ironbank
➜  ironbank git:(91f4b34bc1) ✗ sed -i '' 's/linux-x86_64\.tar\.gz/linux-aarch64.tar.gz/g' Dockerfile
➜  ironbank git:(91f4b34bc1) ✗ cp ../logstash-8.19.9-SNAPSHOT-linux-aarch64.tar.gz .
➜  ironbank git:(91f4b34bc1) ✗ docker build \
  --build-arg BASE_REGISTRY=docker.io \
  --build-arg BASE_IMAGE=redhat/ubi9 \
  --build-arg BASE_TAG=9.4 \
  -t logstash-ironbank:test .
[+] Building 40.9s (15/15) FINISHED                                                                                       docker:desktop-linux
 => [internal] load build definition from Dockerfile                                                                                      0.0s
 => => transferring dockerfile: 1.90kB                                                                                                    0.0s
 => [internal] load metadata for docker.io/redhat/ubi9:9.4                                                                                0.2s
 => [internal] load .dockerignore                                                                                                         0.0s
 => => transferring context: 2B                                                                                                           0.0s
 => [ 1/10] FROM docker.io/redhat/ubi9:9.4@sha256:ee0b908e958a1822afc57e5d386d1ea128eebe492cb2e01b6903ee19c133ea75                        3.1s
 => => resolve docker.io/redhat/ubi9:9.4@sha256:ee0b908e958a1822afc57e5d386d1ea128eebe492cb2e01b6903ee19c133ea75                          0.0s
 => => sha256:2f96caed8c701f83533a430c874ce02b0e27edfea8aa57e7e82a60a6b2fba09d 77.34MB / 77.34MB                                          2.1s
 => => extracting sha256:2f96caed8c701f83533a430c874ce02b0e27edfea8aa57e7e82a60a6b2fba09d                                                 1.0s
 => [internal] load build context                                                                                                         2.6s
 => => transferring context: 470.03MB                                                                                                     2.6s
 => [ 2/10] WORKDIR /usr/share                                                                                                            0.3s
 => [ 3/10] COPY scripts/config/* config/                                                                                                 0.0s
 => [ 4/10] COPY scripts/pipeline/default.conf pipeline/logstash.conf                                                                     0.0s
 => [ 5/10] COPY scripts/bin/docker-entrypoint /usr/local/bin/                                                                            0.0s
 => [ 6/10] COPY logstash-8.19.9-SNAPSHOT-linux-aarch64.tar.gz /tmp/logstash.tar.gz                                                       0.2s
 => [ 7/10] RUN dnf -y upgrade &&   dnf install -y procps findutils tar gzip which shadow-utils &&   dnf clean all &&   groupadd --gid   14.9s
 => [ 8/10] COPY --chown=logstash:root scripts/env2yaml/classes /usr/share/logstash/env2yaml/classes/                                     0.1s
 => [ 9/10] COPY --chown=logstash:root scripts/env2yaml/lib /usr/share/logstash/env2yaml/lib/                                             0.0s
 => [10/10] COPY --chmod=0755 scripts/env2yaml/env2yaml /usr/local/bin/env2yaml                                                           0.0s
 => exporting to image                                                                                                                   21.9s
 => => exporting layers                                                                                                                  17.4s
 => => exporting manifest sha256:4703f2103c506758bbf3bd0dd53bde409b1ff12c034e5633dd4714ce8a4c603c                                         0.0s
 => => exporting config sha256:acb03a8ee0f398cdd41bc5a846e9a897d8fe9ae3939fcf9eb51748835507524d                                           0.0s
 => => exporting attestation manifest sha256:46677e670b28c52261582919c7a22d51de2cb32be09455ee82fc4b7f594532be                             0.0s
 => => exporting manifest list sha256:136cc763b0a2b582aaa033e69c7f5f633b87e89090348bd87dfbef7e50daaa9f                                    0.0s
 => => naming to docker.io/library/logstash-ironbank:test                                                                                 0.0s
 => => unpacking to docker.io/library/logstash-ironbank:test                                                                              4.4s

 1 warning found (use docker --debug to expand):
 - LegacyKeyValueFormat: "ENV key=value" should be used instead of legacy "ENV key value" format (line 12)
➜  ironbank git:(91f4b34bc1) ✗ docker run --rm \
  -e PIPELINE_WORKERS=3 \
  -e LOGSTASH_KEYSTORE_PASS="" \
  logstash-ironbank:test \
  -e 'input { generator { count => 1 } } output { stdout { codec => rubydebug } }'
2025/12/04 00:26:39 Setting 'pipeline.workers' from environment.
Using bundled JDK: /usr/share/logstash/jdk
Sending Logstash logs to /usr/share/logstash/logs which is now configured via log4j2.properties
[2025-12-04T00:26:43,220][WARN ][org.logstash.deprecation.settings.DeprecatedAlias] The setting `http.host` is a deprecated alias for `api.http.host` and will be removed in version 9. Please use `api.http.host` instead
[2025-12-04T00:26:43,225][INFO ][logstash.runner          ] Log4j configuration path used is: /usr/share/logstash/config/log4j2.properties
[2025-12-04T00:26:43,226][WARN ][deprecation.logstash.runner] 'pipeline.buffer.type' setting is not explicitly defined.Before moving to 9.x set it to 'heap' and tune heap size upward, or set it to 'direct' to maintain existing behavior.
[2025-12-04T00:26:43,226][INFO ][logstash.runner          ] Starting Logstash {"logstash.version"=>"8.19.9", "jruby.version"=>"jruby 9.4.9.0 (3.1.4) 2024-11-04 547c6b150e OpenJDK 64-Bit Server VM 21.0.9+10-LTS on 21.0.9+10-LTS +indy +jit [aarch64-linux]"}
[2025-12-04T00:26:43,227][INFO ][logstash.runner          ] JVM bootstrap flags: [-Xms1g, -Xmx1g, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -Djruby.compile.invokedynamic=true, -XX:+HeapDumpOnOutOfMemoryError, -Djava.security.egd=file:/dev/urandom, -Dlog4j2.isThreadContextMapInheritable=true, -Dls.cgroup.cpuacct.path.override=/, -Dls.cgroup.cpu.path.override=/, -Djruby.regexp.interruptible=true, -Djdk.io.File.enableADS=true, --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED, --add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED, --add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED, --add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED, --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED, --add-opens=java.base/java.security=ALL-UNNAMED, --add-opens=java.base/java.io=ALL-UNNAMED, --add-opens=java.base/java.nio.channels=ALL-UNNAMED, --add-opens=java.base/sun.nio.ch=ALL-UNNAMED, --add-opens=java.management/sun.management=ALL-UNNAMED, -Dio.netty.allocator.maxOrder=11]
[2025-12-04T00:26:43,241][INFO ][org.logstash.jackson.StreamReadConstraintsUtil] Jackson default value override `logstash.jackson.stream-read-constraints.max-string-length` configured to `200000000` (logstash default)
[2025-12-04T00:26:43,241][INFO ][org.logstash.jackson.StreamReadConstraintsUtil] Jackson default value override `logstash.jackson.stream-read-constraints.max-number-length` configured to `10000` (logstash default)
[2025-12-04T00:26:43,241][INFO ][org.logstash.jackson.StreamReadConstraintsUtil] Jackson default value override `logstash.jackson.stream-read-constraints.max-nesting-depth` configured to `1000` (logstash default)
[2025-12-04T00:26:43,245][INFO ][logstash.settings        ] Creating directory {:setting=>"path.queue", :path=>"/usr/share/logstash/data/queue"}
[2025-12-04T00:26:43,247][INFO ][logstash.settings        ] Creating directory {:setting=>"path.dead_letter_queue", :path=>"/usr/share/logstash/data/dead_letter_queue"}
[2025-12-04T00:26:43,304][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
[2025-12-04T00:26:43,311][INFO ][logstash.agent           ] No persistent UUID file found. Generating new UUID {:uuid=>"d7f7e391-afae-4cc6-9460-e7403a9553b1", :path=>"/usr/share/logstash/data/uuid"}
[2025-12-04T00:26:43,463][WARN ][logstash.monitoringextension.pipelineregisterhook] xpack.monitoring.enabled has not been defined, but found elasticsearch configuration. Please explicitly set `xpack.monitoring.enabled: true` in logstash.yml
[2025-12-04T00:26:43,463][WARN ][deprecation.logstash.monitoringextension.pipelineregisterhook] Internal collectors option for Logstash monitoring is deprecated and targeted for removal in the next major version.
Please configure Elastic Agent to monitor Logstash. Documentation can be found at:
https://www.elastic.co/guide/en/logstash/current/monitoring-with-elastic-agent.html
[2025-12-04T00:26:43,577][INFO ][logstash.licensechecker.licensereader] Elasticsearch pool URLs updated {:changes=>{:removed=>[], :added=>[http://elasticsearch:9200/]}}
[2025-12-04T00:26:43,595][INFO ][logstash.licensechecker.licensereader] Failed to perform request {:message=>"elasticsearch: Name or service not known", :exception=>Manticore::ResolutionFailure, :cause=>#<Java::JavaNet::UnknownHostException: elasticsearch: Name or service not known>}
[2025-12-04T00:26:43,595][WARN ][logstash.licensechecker.licensereader] Attempted to resurrect connection to dead ES instance, but got an error {:url=>"http://elasticsearch:9200/", :exception=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :message=>"Elasticsearch Unreachable: [http://elasticsearch:9200/][Manticore::ResolutionFailure] elasticsearch: Name or service not known"}
[2025-12-04T00:26:43,599][INFO ][logstash.licensechecker.licensereader] Failed to perform request {:message=>"elasticsearch", :exception=>Manticore::ResolutionFailure, :cause=>#<Java::JavaNet::UnknownHostException: elasticsearch>}
[2025-12-04T00:26:43,600][WARN ][logstash.licensechecker.licensereader] Marking url as dead. Last error: [LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError] Elasticsearch Unreachable: [http://elasticsearch:9200/][Manticore::ResolutionFailure] elasticsearch {:url=>http://elasticsearch:9200/, :error_message=>"Elasticsearch Unreachable: [http://elasticsearch:9200/][Manticore::ResolutionFailure] elasticsearch", :error_class=>"LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError"}
[2025-12-04T00:26:43,600][WARN ][logstash.licensechecker.licensereader] Attempt to fetch Elasticsearch cluster info failed. Sleeping for 0.02 {:fail_count=>1, :exception=>"Elasticsearch Unreachable: [http://elasticsearch:9200/][Manticore::ResolutionFailure] elasticsearch"}
[2025-12-04T00:26:43,622][ERROR][logstash.licensechecker.licensereader] Unable to retrieve Elasticsearch cluster info. {:message=>"No Available connections", :exception=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::NoConnectionAvailableError}
[2025-12-04T00:26:43,623][ERROR][logstash.licensechecker.licensereader] Unable to retrieve license information from license server {:message=>"No Available connections"}
[2025-12-04T00:26:43,627][ERROR][logstash.monitoring.internalpipelinesource] Failed to fetch X-Pack information from Elasticsearch. This is likely due to failure to reach a live Elasticsearch cluster.
[2025-12-04T00:26:43,656][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600, :ssl_enabled=>false}
[2025-12-04T00:26:43,711][INFO ][org.reflections.Reflections] Reflections took 41 ms to scan 1 urls, producing 150 keys and 530 values
[2025-12-04T00:26:43,765][INFO ][logstash.javapipeline    ] Pipeline `main` is configured with `pipeline.ecs_compatibility: v8` setting. All plugins in this pipeline will default to `ecs_compatibility => v8` unless explicitly configured otherwise.
[2025-12-04T00:26:43,773][INFO ][logstash.javapipeline    ][main] Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>3, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50, "pipeline.max_inflight"=>375, "pipeline.sources"=>["config string"], :thread=>"#<Thread:0x36cf184d /usr/share/logstash/logstash-core/lib/logstash/java_pipeline.rb:138 run>"}
[2025-12-04T00:26:43,958][INFO ][logstash.javapipeline    ][main] Pipeline Java execution initialization time {"seconds"=>0.19}
[2025-12-04T00:26:43,960][INFO ][logstash.javapipeline    ][main] Pipeline started {"pipeline.id"=>"main"}
[2025-12-04T00:26:43,965][INFO ][logstash.agent           ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
{
         "event" => {
        "original" => "Hello world!",
        "sequence" => 0
    },
       "message" => "Hello world!",
    "@timestamp" => 2025-12-04T00:26:43.962325962Z,
      "@version" => "1",
          "host" => {
        "name" => "ad30dcd78594"
    }
}
[2025-12-04T00:26:44,131][INFO ][logstash.javapipeline    ][main] Pipeline terminated {"pipeline.id"=>"main"}
[2025-12-04T00:26:44,477][INFO ][logstash.pipelinesregistry] Removed pipeline from registry successfully {:pipeline_id=>:main}
[2025-12-04T00:26:44,485][INFO ][logstash.runner          ] Logstash shut down.

@donoghuc donoghuc requested a review from jsvd December 4, 2025 00:34
@mergify
Copy link
Contributor Author

mergify bot commented Dec 8, 2025

This pull request has not been merged yet. Could you please review and merge it @donoghuc? 🙏

@yaauie
Copy link
Member

yaauie commented Dec 8, 2025

🤔: docker/data/logstash/env2yaml/env2yaml.go still exists on the head branch; is this intentional?

@donoghuc
Copy link
Member

donoghuc commented Dec 8, 2025

Oops! Yeah good catch @yaauie 😅 that should for sure have been removed. I must have accidentally reverted that in my merge conflict resolution effort.

@elasticmachine
Copy link
Collaborator

💚 Build Succeeded

History

cc @donoghuc

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport conflicts Detected git conflicts

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants