diff --git a/elasticsearch/Dockerfile b/elasticsearch/Dockerfile index 1d50a08..a2e17e2 100644 --- a/elasticsearch/Dockerfile +++ b/elasticsearch/Dockerfile @@ -28,7 +28,7 @@ RUN set -eux; \ chmod 0555 /bin/tini WORKDIR /usr/share/elasticsearch -RUN arch="$(rpm --query --queryformat='%{ARCH}' rpm)" && curl -f --retry 10 -S -L --output /tmp/elasticsearch.tar.gz https://artifacts-no-kpi.elastic.co/downloads/elasticsearch/elasticsearch-9.1.8-linux-$arch.tar.gz +RUN arch="$(rpm --query --queryformat='%{ARCH}' rpm)" && curl -f --retry 10 -S -L --output /tmp/elasticsearch.tar.gz https://artifacts-no-kpi.elastic.co/downloads/elasticsearch/elasticsearch-9.1.9-linux-$arch.tar.gz RUN tar -zxf /tmp/elasticsearch.tar.gz --strip-components=1 && \ # Configure the distribution for Docker sed -i -e 's/ES_DISTRIBUTION_TYPE=tar/ES_DISTRIBUTION_TYPE=docker/' bin/elasticsearch-env && \ @@ -99,30 +99,30 @@ RUN chmod g=u /etc/passwd && \ EXPOSE 9200 9300 -LABEL org.label-schema.build-date="2025-11-26T22:06:37.615050576Z" \ +LABEL org.label-schema.build-date="2025-12-16T22:07:32.093242252Z" \ org.label-schema.license="Elastic-License-2.0" \ org.label-schema.name="Elasticsearch" \ org.label-schema.schema-version="1.0" \ org.label-schema.url="https://www.elastic.co/products/elasticsearch" \ org.label-schema.usage="https://www.elastic.co/guide/en/elasticsearch/reference/index.html" \ - org.label-schema.vcs-ref="50f58de526b746a6cc07f0cbec0e0d510f13ce52" \ + org.label-schema.vcs-ref="5cf7cb8c6f69b8c284f3ea738db6932703574d3d" \ org.label-schema.vcs-url="https://github.com/elastic/elasticsearch" \ org.label-schema.vendor="Elastic" \ - org.label-schema.version="9.1.8" \ - org.opencontainers.image.created="2025-11-26T22:06:37.615050576Z" \ + org.label-schema.version="9.1.9" \ + org.opencontainers.image.created="2025-12-16T22:07:32.093242252Z" \ org.opencontainers.image.documentation="https://www.elastic.co/guide/en/elasticsearch/reference/index.html" \ org.opencontainers.image.licenses="Elastic-License-2.0" \ - org.opencontainers.image.revision="50f58de526b746a6cc07f0cbec0e0d510f13ce52" \ + org.opencontainers.image.revision="5cf7cb8c6f69b8c284f3ea738db6932703574d3d" \ org.opencontainers.image.source="https://github.com/elastic/elasticsearch" \ org.opencontainers.image.title="Elasticsearch" \ org.opencontainers.image.url="https://www.elastic.co/products/elasticsearch" \ org.opencontainers.image.vendor="Elastic" \ - org.opencontainers.image.version="9.1.8" + org.opencontainers.image.version="9.1.9" LABEL name="Elasticsearch" \ maintainer="infra@elastic.co" \ vendor="Elastic" \ - version="9.1.8" \ + version="9.1.9" \ release="1" \ summary="Elasticsearch" \ description="You know, for search." diff --git a/kibana/Dockerfile b/kibana/Dockerfile index d8a3eaa..91d8cc9 100644 --- a/kibana/Dockerfile +++ b/kibana/Dockerfile @@ -17,7 +17,7 @@ RUN cd /tmp && \ arch="$(rpm --query --queryformat='%{ARCH}' rpm)" && \ curl -f --retry 8 -s -L \ --output kibana.tar.gz \ - https://artifacts.elastic.co/downloads/kibana/kibana-9.1.8-linux-${arch}.tar.gz && \ + https://artifacts.elastic.co/downloads/kibana/kibana-9.1.9-linux-${arch}.tar.gz && \ cd - RUN mkdir /usr/share/kibana @@ -103,30 +103,30 @@ RUN groupadd --gid 1000 kibana && \ --home-dir /usr/share/kibana --no-create-home \ kibana -LABEL org.label-schema.build-date="2025-11-26T17:31:50.353Z" \ +LABEL org.label-schema.build-date="2025-12-16T23:08:44.328Z" \ org.label-schema.license="Elastic License" \ org.label-schema.name="Kibana" \ org.label-schema.schema-version="1.0" \ org.label-schema.url="https://www.elastic.co/products/kibana" \ org.label-schema.usage="https://www.elastic.co/guide/en/kibana/reference/index.html" \ - org.label-schema.vcs-ref="6ecd757760927423daa344d901e634b43497e16d" \ + org.label-schema.vcs-ref="126c439648663caa7554075ebc3d1e9a6f8ad93c" \ org.label-schema.vcs-url="https://github.com/elastic/kibana" \ org.label-schema.vendor="Elastic" \ - org.label-schema.version="9.1.8" \ - org.opencontainers.image.created="2025-11-26T17:31:50.353Z" \ + org.label-schema.version="9.1.9" \ + org.opencontainers.image.created="2025-12-16T23:08:44.328Z" \ org.opencontainers.image.documentation="https://www.elastic.co/guide/en/kibana/reference/index.html" \ org.opencontainers.image.licenses="Elastic License" \ - org.opencontainers.image.revision="6ecd757760927423daa344d901e634b43497e16d" \ + org.opencontainers.image.revision="126c439648663caa7554075ebc3d1e9a6f8ad93c" \ org.opencontainers.image.source="https://github.com/elastic/kibana" \ org.opencontainers.image.title="Kibana" \ org.opencontainers.image.url="https://www.elastic.co/products/kibana" \ org.opencontainers.image.vendor="Elastic" \ - org.opencontainers.image.version="9.1.8" + org.opencontainers.image.version="9.1.9" LABEL name="Kibana" \ maintainer="infra@elastic.co" \ vendor="Elastic" \ - version="9.1.8" \ + version="9.1.9" \ release="1" \ summary="Kibana" \ description="Your window into the Elastic Stack." diff --git a/logstash/Dockerfile b/logstash/Dockerfile index 276bc94..60fbbdd 100644 --- a/logstash/Dockerfile +++ b/logstash/Dockerfile @@ -1,17 +1,6 @@ # This Dockerfile was generated from templates/Dockerfile.erb - -# Build env2yaml -FROM golang:1.25 AS builder-env2yaml - -COPY env2yaml/env2yaml.go env2yaml/go.mod env2yaml/go.sum /tmp/go/src/env2yaml/ - -WORKDIR /tmp/go/src/env2yaml - -RUN go build -trimpath - -# Build main image -# Minimal distributions do not ship with en language packs. + FROM redhat/ubi9-minimal:latest ENV ELASTIC_CONTAINER=true @@ -35,10 +24,10 @@ RUN groupadd --gid 1000 logstash && \ --no-create-home \ logstash && \ arch="$(rpm --query --queryformat='%{ARCH}' rpm)" && \ - curl -f -Lo logstash.tar.gz https://artifacts.elastic.co/downloads/logstash/logstash-9.1.8-linux-${arch}.tar.gz && \ + curl -f -Lo logstash.tar.gz https://artifacts.elastic.co/downloads/logstash/logstash-9.1.9-linux-${arch}.tar.gz && \ tar -zxf logstash.tar.gz -C /usr/share && \ rm logstash.tar.gz && \ - mv /usr/share/logstash-9.1.8 /usr/share/logstash && \ + mv /usr/share/logstash-9.1.9 /usr/share/logstash && \ chown -R logstash:root /usr/share/logstash && \ chmod -R g=u /usr/share/logstash && \ mkdir /licenses && \ @@ -47,7 +36,10 @@ RUN groupadd --gid 1000 logstash && \ find /usr/share/logstash -type d -exec chmod g+s {} \; && \ ln -s /usr/share/logstash /opt/logstash -COPY --from=builder-env2yaml /tmp/go/src/env2yaml/env2yaml /usr/local/bin/env2yaml + +COPY --chown=logstash:root env2yaml/classes /usr/share/logstash/env2yaml/classes/ +COPY --chown=logstash:root env2yaml/lib /usr/share/logstash/env2yaml/lib/ +COPY --chmod=0755 env2yaml/env2yaml /usr/local/bin/env2yaml COPY --chown=logstash:root config/pipelines.yml config/log4j2.properties config/log4j2.file.properties /usr/share/logstash/config/ COPY --chown=logstash:root config/logstash-full.yml /usr/share/logstash/config/logstash.yml COPY --chown=logstash:root pipeline/default.conf /usr/share/logstash/pipeline/logstash.conf @@ -59,20 +51,20 @@ USER 1000 EXPOSE 9600 5044 -LABEL org.label-schema.build-date=2025-11-25T19:41:48+00:00 \ +LABEL org.label-schema.build-date=2025-12-10T14:14:26+00:00 \ org.label-schema.license="Elastic License" \ org.label-schema.name="logstash" \ org.label-schema.schema-version="1.0" \ org.label-schema.url="https://www.elastic.co/products/logstash" \ org.label-schema.vcs-url="https://github.com/elastic/logstash" \ org.label-schema.vendor="Elastic" \ - org.label-schema.version="9.1.8" \ - org.opencontainers.image.created=2025-11-25T19:41:48+00:00 \ + org.label-schema.version="9.1.9" \ + org.opencontainers.image.created=2025-12-10T14:14:26+00:00 \ org.opencontainers.image.description="Logstash is a free and open server-side data processing pipeline that ingests data from a multitude of sources, transforms it, and then sends it to your favorite 'stash.'" \ org.opencontainers.image.licenses="Elastic License" \ org.opencontainers.image.title="logstash" \ org.opencontainers.image.vendor="Elastic" \ - org.opencontainers.image.version="9.1.8" \ + org.opencontainers.image.version="9.1.9" \ description="Logstash is a free and open server-side data processing pipeline that ingests data from a multitude of sources, transforms it, and then sends it to your favorite 'stash.'" \ license="Elastic License" \ maintainer="info@elastic.co" \ diff --git a/logstash/env2yaml/classes/org/logstash/env2yaml/Env2Yaml$SettingValidator.class b/logstash/env2yaml/classes/org/logstash/env2yaml/Env2Yaml$SettingValidator.class new file mode 100644 index 0000000..b791632 Binary files /dev/null and b/logstash/env2yaml/classes/org/logstash/env2yaml/Env2Yaml$SettingValidator.class differ diff --git a/logstash/env2yaml/classes/org/logstash/env2yaml/Env2Yaml.class b/logstash/env2yaml/classes/org/logstash/env2yaml/Env2Yaml.class new file mode 100644 index 0000000..03a09c9 Binary files /dev/null and b/logstash/env2yaml/classes/org/logstash/env2yaml/Env2Yaml.class differ diff --git a/logstash/env2yaml/env2yaml b/logstash/env2yaml/env2yaml new file mode 100644 index 0000000..c709c30 --- /dev/null +++ b/logstash/env2yaml/env2yaml @@ -0,0 +1,12 @@ +#!/bin/bash + +# Execute the env2yaml java program. Ensure the snakeyaml-engine jar is in the classpath. + +exec /usr/share/logstash/jdk/bin/java \ + -XX:+UseSerialGC \ + -Xms32m \ + -Xmx32m \ + -cp "/usr/share/logstash/env2yaml/classes:/usr/share/logstash/env2yaml/lib/*" \ + org.logstash.env2yaml.Env2Yaml "$@" + + diff --git a/logstash/env2yaml/env2yaml.go b/logstash/env2yaml/env2yaml.go deleted file mode 100644 index 95fc569..0000000 --- a/logstash/env2yaml/env2yaml.go +++ /dev/null @@ -1,198 +0,0 @@ -// env2yaml -// -// Merge environment variables into logstash.yml. -// For example, running Docker with: -// -// docker run -e pipeline.workers=6 -// -// or -// -// docker run -e PIPELINE_WORKERS=6 -// -// will cause logstash.yml to contain the line: -// -// pipeline.workers: 6 -package main - -import ( - "errors" - "fmt" - "io/ioutil" - "log" - "os" - "strings" - - "gopkg.in/yaml.v2" -) - -var validSettings = []string{ - "api.enabled", - "api.http.host", - "api.http.port", - "api.environment", - "node.name", - "path.data", - "pipeline.id", - "pipeline.workers", - "pipeline.output.workers", - "pipeline.batch.size", - "pipeline.batch.delay", - "pipeline.unsafe_shutdown", - "pipeline.ecs_compatibility", - "pipeline.ordered", - "pipeline.plugin_classloaders", - "pipeline.separate_logs", - "path.config", - "config.string", - "config.test_and_exit", - "config.reload.automatic", - "config.reload.interval", - "config.debug", - "config.support_escapes", - "config.field_reference.escape_style", - "queue.type", - "path.queue", - "queue.page_capacity", - "queue.max_events", - "queue.max_bytes", - "queue.checkpoint.acks", - "queue.checkpoint.writes", - "queue.checkpoint.interval", // remove it for #17155 - "queue.drain", - "dead_letter_queue.enable", - "dead_letter_queue.max_bytes", - "dead_letter_queue.flush_interval", - "dead_letter_queue.storage_policy", - "dead_letter_queue.retain.age", - "path.dead_letter_queue", - "log.level", - "log.format", - "log.format.json.fix_duplicate_message_fields", - "metric.collect", - "path.logs", - "path.plugins", - "api.auth.type", - "api.auth.basic.username", - "api.auth.basic.password", - "api.auth.basic.password_policy.mode", - "api.auth.basic.password_policy.length.minimum", - "api.auth.basic.password_policy.include.upper", - "api.auth.basic.password_policy.include.lower", - "api.auth.basic.password_policy.include.digit", - "api.auth.basic.password_policy.include.symbol", - "allow_superuser", - "monitoring.cluster_uuid", - "xpack.monitoring.allow_legacy_collection", - "xpack.monitoring.enabled", - "xpack.monitoring.collection.interval", - "xpack.monitoring.elasticsearch.hosts", - "xpack.monitoring.elasticsearch.username", - "xpack.monitoring.elasticsearch.password", - "xpack.monitoring.elasticsearch.proxy", - "xpack.monitoring.elasticsearch.api_key", - "xpack.monitoring.elasticsearch.cloud_auth", - "xpack.monitoring.elasticsearch.cloud_id", - "xpack.monitoring.elasticsearch.sniffing", - "xpack.monitoring.elasticsearch.ssl.certificate_authority", - "xpack.monitoring.elasticsearch.ssl.ca_trusted_fingerprint", - "xpack.monitoring.elasticsearch.ssl.verification_mode", - "xpack.monitoring.elasticsearch.ssl.truststore.path", - "xpack.monitoring.elasticsearch.ssl.truststore.password", - "xpack.monitoring.elasticsearch.ssl.keystore.path", - "xpack.monitoring.elasticsearch.ssl.keystore.password", - "xpack.monitoring.elasticsearch.ssl.certificate", - "xpack.monitoring.elasticsearch.ssl.key", - "xpack.monitoring.elasticsearch.ssl.cipher_suites", - "xpack.management.enabled", - "xpack.management.logstash.poll_interval", - "xpack.management.pipeline.id", - "xpack.management.elasticsearch.hosts", - "xpack.management.elasticsearch.username", - "xpack.management.elasticsearch.password", - "xpack.management.elasticsearch.proxy", - "xpack.management.elasticsearch.api_key", - "xpack.management.elasticsearch.cloud_auth", - "xpack.management.elasticsearch.cloud_id", - "xpack.management.elasticsearch.sniffing", - "xpack.management.elasticsearch.ssl.certificate_authority", - "xpack.management.elasticsearch.ssl.ca_trusted_fingerprint", - "xpack.management.elasticsearch.ssl.verification_mode", - "xpack.management.elasticsearch.ssl.truststore.path", - "xpack.management.elasticsearch.ssl.truststore.password", - "xpack.management.elasticsearch.ssl.keystore.path", - "xpack.management.elasticsearch.ssl.keystore.password", - "xpack.management.elasticsearch.ssl.certificate", - "xpack.management.elasticsearch.ssl.key", - "xpack.management.elasticsearch.ssl.cipher_suites", - "xpack.geoip.download.endpoint", - "xpack.geoip.downloader.enabled", -} - -// Given a setting name, return a downcased version with delimiters removed. -func squashSetting(setting string) string { - downcased := strings.ToLower(setting) - de_dotted := strings.Replace(downcased, ".", "", -1) - de_underscored := strings.Replace(de_dotted, "_", "", -1) - return de_underscored -} - -// Given a setting name like "pipeline.workers" or "PIPELINE_UNSAFE_SHUTDOWN", -// return the canonical setting name. eg. 'pipeline.unsafe_shutdown' -func normalizeSetting(setting string) (string, error) { - for _, validSetting := range validSettings { - if squashSetting(setting) == squashSetting(validSetting) { - return validSetting, nil - } - } - return "", errors.New("Invalid setting: " + setting) -} - -func main() { - if len(os.Args) != 2 { - log.Fatalf("usage: env2yaml FILENAME") - } - settingsFilePath := os.Args[1] - - settingsFile, err := ioutil.ReadFile(settingsFilePath) - if err != nil { - log.Fatalf("error: %v", err) - } - - // Read the original settings file into a map. - settings := make(map[string]interface{}) - err = yaml.Unmarshal(settingsFile, &settings) - if err != nil { - log.Fatalf("error: %v", err) - } - - // Merge any valid settings found in the environment. - foundNewSettings := false - for _, line := range os.Environ() { - kv := strings.SplitN(line, "=", 2) - key := kv[0] - setting, err := normalizeSetting(key) - if err == nil { - foundNewSettings = true - log.Printf("Setting '%s' from environment.", setting) - // we need to keep ${KEY} in the logstash.yml to let Logstash decide using ${KEY}'s value from either keystore or environment - settings[setting] = fmt.Sprintf("${%s}", key) - } - } - - if foundNewSettings { - output, err := yaml.Marshal(&settings) - if err != nil { - log.Fatalf("error: %v", err) - } - - stat, err := os.Stat(settingsFilePath) - if err != nil { - log.Fatalf("error: %v", err) - } - - err = ioutil.WriteFile(settingsFilePath, output, stat.Mode()) - if err != nil { - log.Fatalf("error: %v", err) - } - } -} diff --git a/logstash/env2yaml/go.mod b/logstash/env2yaml/go.mod deleted file mode 100644 index 7600007..0000000 --- a/logstash/env2yaml/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module logstash/env2yaml - -go 1.21 - -require gopkg.in/yaml.v2 v2.4.0 diff --git a/logstash/env2yaml/go.sum b/logstash/env2yaml/go.sum deleted file mode 100644 index 7534661..0000000 --- a/logstash/env2yaml/go.sum +++ /dev/null @@ -1,3 +0,0 @@ -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= diff --git a/logstash/env2yaml/lib/snakeyaml-engine-2.9.jar b/logstash/env2yaml/lib/snakeyaml-engine-2.9.jar new file mode 100644 index 0000000..ba1ec26 Binary files /dev/null and b/logstash/env2yaml/lib/snakeyaml-engine-2.9.jar differ