From 95d1816a339d316abc59bb2c9dd64c9e85cc60bc Mon Sep 17 00:00:00 2001 From: Vitalii Parfonov Date: Mon, 7 Sep 2026 11:47:20 +0300 Subject: [PATCH] Vector v0.47 in CLO 6.0 Signed-off-by: Vitalii Parfonov --- Dockerfile.macos-dev | 51 +++++++++++++++++++ Makefile | 12 +++-- bundle/image-references | 2 +- ...cluster-logging.clusterserviceversion.yaml | 6 +-- config/manager/manager.yaml | 2 +- config/overlays/stable/deployment_patch.yaml | 2 +- hack/deploy-image.sh | 27 ++++++++-- hack/generate-bundle.sh | 2 +- hack/get-openshift-client.sh | 2 +- hack/revert-bundle.sh | 2 +- hack/run-linter | 2 +- .../functional-benchmarker/config/options.go | 2 +- internal/generator/vector/conf/complex.toml | 4 +- .../vector/conf/complex_http_receiver.toml | 4 +- internal/generator/vector/conf/container.toml | 4 +- internal/generator/vector/conf/global_test.go | 8 +-- .../generator/vector/output/common/secret.go | 4 +- .../vector/output/kafka/kafka_tuning.toml | 2 +- .../output/syslog/rfc3164_with_defaults.toml | 19 ++++--- .../generator/vector/output/syslog/syslog.go | 25 ++++++--- .../output/syslog/tcp_with_defaults.toml | 7 ++- .../vector/output/syslog/tcp_with_tuning.toml | 7 ++- .../syslog/tls_with_field_references.toml | 1 + .../vector/output/syslog/xyz_defaults.toml | 6 ++- olm_deploy/scripts/catalog-build.sh | 19 +++++-- olm_deploy/scripts/catalog-deploy.sh | 2 +- olm_deploy/scripts/catalog-uninstall.sh | 2 +- olm_deploy/scripts/env.sh | 4 +- olm_deploy/scripts/operator-install.sh | 2 +- olm_deploy/scripts/operator-uninstall.sh | 2 +- olm_deploy/scripts/registry-init.sh | 2 +- olm_deploy/scripts/wait_for_deployment.sh | 4 +- .../loki/application_logs_vector_test.go | 10 +++- .../outputs/loki/audit_logs_vector_test.go | 2 + test/helpers/loki/receiver.go | 5 +- 35 files changed, 193 insertions(+), 64 deletions(-) create mode 100644 Dockerfile.macos-dev diff --git a/Dockerfile.macos-dev b/Dockerfile.macos-dev new file mode 100644 index 0000000000..a7a1c11a0d --- /dev/null +++ b/Dockerfile.macos-dev @@ -0,0 +1,51 @@ +# Dev Dockerfile for building on Apple Silicon Macs. +# +# The original Dockerfile compiles Go inside the container, which requires +# QEMU amd64 emulation on ARM Macs. QEMU crashes with segfaults during +# `go mod download` (network syscall emulation issue). This Dockerfile skips +# the in-container Go build and instead expects pre-built binaries at +# bin/cluster-logging-operator and bin/must-gather, cross-compiled natively +# on the host. +# +# Usage: +# GOOS=linux GOARCH=amd64 make build +# podman build -t $(IMAGE_TAG) . -f Dockerfile.macos-dev + +FROM registry.access.redhat.com/ubi9/ubi:latest AS packages + +RUN mkdir -p /mnt/rootfs && \ + dnf install -y --installroot=/mnt/rootfs \ + --releasever=9 \ + --setopt=install_weak_deps=false \ + --nodocs \ + openssl-libs \ + ca-certificates \ + rsync \ + file \ + xz && \ + dnf --installroot=/mnt/rootfs clean all && \ + mkdir -p /mnt/rootfs/tmp/ocp-clo && \ + chmod og+w /mnt/rootfs/tmp/ocp-clo + +FROM --platform=linux/amd64 registry.access.redhat.com/ubi9/ubi-micro + +COPY --from=packages /mnt/rootfs/ / +COPY bin/cluster-logging-operator /usr/bin/ +COPY bin/must-gather /usr/bin/ + +RUN ln -s /usr/bin/must-gather /usr/bin/gather + +USER 1000 +WORKDIR /usr/bin +CMD ["/usr/bin/cluster-logging-operator"] + +LABEL \ + io.k8s.display-name="Cluster Logging Operator" \ + io.k8s.description="This is a component of OpenShift Container Platform that manages the lifecycle of the Aggregated logging stack." \ + io.openshift.tags="openshift,logging" \ + com.redhat.delivery.appregistry="false" \ + maintainer="AOS Logging " \ + License="Apache-2.0" \ + name="openshift-logging/cluster-logging-rhel9-operator" \ + com.redhat.component="cluster-logging-operator-container" \ + io.openshift.maintainer.product="OpenShift Container Platform" diff --git a/Makefile b/Makefile index 0ddc986c4d..06eb30c964 100644 --- a/Makefile +++ b/Makefile @@ -46,7 +46,7 @@ export LOGGING_VERSION?=6.0 export VERSION=$(LOGGING_VERSION).0 export NAMESPACE?=openshift-logging -IMAGE_LOGGING_VECTOR?=quay.io/openshift-logging/vector:v0.37.1 +IMAGE_LOGGING_VECTOR?=quay.io/openshift-logging/vector:v0.47.0 IMAGE_LOGFILEMETRICEXPORTER?=quay.io/openshift-logging/log-file-metric-exporter:6.0 IMAGE_LOGGING_EVENTROUTER?=quay.io/openshift-logging/eventrouter:0.3 endif # ifdef OVERLAY @@ -173,10 +173,16 @@ clean: spotless: clean go clean -cache -testcache +ifeq ($(shell uname -sm),Darwin arm64) +DOCKERFILE?=Dockerfile.macos-dev +else +DOCKERFILE?=Dockerfile +endif + .PHONY: image image: .target/image -.target/image: .target $(GEN_TIMESTAMP) $(shell find must-gather version bundle .bingo api internal -type f 2>/dev/null) Dockerfile go.mod go.sum - podman build -t $(IMAGE_TAG) . -f Dockerfile +.target/image: .target $(GEN_TIMESTAMP) $(shell find must-gather version bundle .bingo api internal -type f 2>/dev/null) $(DOCKERFILE) go.mod go.sum + podman build -t $(IMAGE_TAG) . -f $(DOCKERFILE) touch $@ # Notes: diff --git a/bundle/image-references b/bundle/image-references index 538d5d602b..16e41255c9 100644 --- a/bundle/image-references +++ b/bundle/image-references @@ -6,7 +6,7 @@ spec: - name: vector-rhel9 from: kind: DockerImage - name: quay.io/openshift-logging/vector:v0.37.1 + name: quay.io/openshift-logging/vector:v0.47.0 - name: log-file-metric-exporter-rhel9 from: kind: DockerImage diff --git a/bundle/manifests/cluster-logging.clusterserviceversion.yaml b/bundle/manifests/cluster-logging.clusterserviceversion.yaml index 201cff6a88..6548881635 100644 --- a/bundle/manifests/cluster-logging.clusterserviceversion.yaml +++ b/bundle/manifests/cluster-logging.clusterserviceversion.yaml @@ -82,7 +82,7 @@ metadata: categories: OpenShift Optional, Logging & Tracing certified: "false" containerImage: quay.io/openshift-logging/cluster-logging-operator:latest - createdAt: "2026-02-05T14:25:39Z" + createdAt: "2026-09-04T15:15:04Z" description: The Red Hat OpenShift Logging Operator for OCP provides a means for configuring and managing log collection and forwarding. features.operators.openshift.io/cnf: "false" @@ -2000,7 +2000,7 @@ spec: - name: OPERATOR_NAME value: cluster-logging-operator - name: RELATED_IMAGE_VECTOR - value: quay.io/openshift-logging/vector:v0.37.1 + value: quay.io/openshift-logging/vector:v0.47.0 - name: RELATED_IMAGE_LOG_FILE_METRIC_EXPORTER value: quay.io/openshift-logging/log-file-metric-exporter:6.0 image: quay.io/openshift-logging/cluster-logging-operator:latest @@ -2047,7 +2047,7 @@ spec: provider: name: Red Hat relatedImages: - - image: quay.io/openshift-logging/vector:v0.37.1 + - image: quay.io/openshift-logging/vector:v0.47.0 name: vector - image: quay.io/openshift-logging/log-file-metric-exporter:6.0 name: log-file-metric-exporter diff --git a/config/manager/manager.yaml b/config/manager/manager.yaml index ef32ed5a41..d7e49a4767 100644 --- a/config/manager/manager.yaml +++ b/config/manager/manager.yaml @@ -46,6 +46,6 @@ spec: - name: OPERATOR_NAME value: "cluster-logging-operator" - name: RELATED_IMAGE_VECTOR - value: quay.io/openshift-logging/vector:v0.37.1 + value: quay.io/openshift-logging/vector:v0.47.0 - name: RELATED_IMAGE_LOG_FILE_METRIC_EXPORTER value: quay.io/openshift-logging/log-file-metric-exporter:6.0 diff --git a/config/overlays/stable/deployment_patch.yaml b/config/overlays/stable/deployment_patch.yaml index f4cce19090..5b18a86a9c 100644 --- a/config/overlays/stable/deployment_patch.yaml +++ b/config/overlays/stable/deployment_patch.yaml @@ -15,7 +15,7 @@ spec: env: # EDIT HERE: change the 'value' fields to the related images you want to use. - name: RELATED_IMAGE_VECTOR - value: quay.io/openshift-logging/vector:v0.37.1 + value: quay.io/openshift-logging/vector:v0.47.0 - name: RELATED_IMAGE_FLUENTD value: quay.io/openshift-logging/fluentd:5.9.0 - name: RELATED_IMAGE_LOG_FILE_METRIC_EXPORTER diff --git a/hack/deploy-image.sh b/hack/deploy-image.sh index 0fa56bdaec..e657e2eea1 100755 --- a/hack/deploy-image.sh +++ b/hack/deploy-image.sh @@ -1,18 +1,35 @@ -#!/bin/bash +#!/usr/bin/env bash set -euo pipefail echo "Setting up port-forwarding to remote registry ..." -coproc oc -n openshift-image-registry port-forward service/image-registry 5000:5000 +coproc oc -n openshift-image-registry port-forward --address 0.0.0.0 service/image-registry 5000:5000 trap "kill -15 $COPROC_PID" EXIT read PORT_FORWARD_STDOUT <&"${COPROC[0]}" if [[ "$PORT_FORWARD_STDOUT" =~ ^Forwarding.*5000$ ]] ; then + # On macOS, podman runs in a VM and can't reach host's 127.0.0.1. + # Use host.containers.internal to reach the host from the VM. + if [[ "$(uname -s)" == "Darwin" ]]; then + REGISTRY_HOST="host.containers.internal" + else + REGISTRY_HOST="127.0.0.1" + fi + user=$(oc whoami | sed s/://) + token=$(oc whoami -t) echo "Login to registry..." - podman login --tls-verify=false -u ${user} -p $(oc whoami -t) 127.0.0.1:5000 + podman login --tls-verify=false -u ${user} -p ${token} 127.0.0.1:5000 + if [[ "$(uname -s)" == "Darwin" ]]; then + # Copy auth entry so push inside the VM can authenticate via host.containers.internal + AUTH_FILE="${XDG_RUNTIME_DIR:-${HOME}/.config}/containers/auth.json" + if [[ -f "${AUTH_FILE}" ]]; then + jq '.auths["host.containers.internal:5000"] = .auths["127.0.0.1:5000"]' "${AUTH_FILE}" > "${AUTH_FILE}.tmp" && mv "${AUTH_FILE}.tmp" "${AUTH_FILE}" + fi + fi - echo "Pushing image ${IMAGE_TAG} ..." - if podman push --tls-verify=false ${IMAGE_TAG} ; then + PUSH_TAG="${IMAGE_TAG/127.0.0.1/${REGISTRY_HOST}}" + echo "Pushing image ${IMAGE_TAG} to ${PUSH_TAG} ..." + if podman push --tls-verify=false ${IMAGE_TAG} ${PUSH_TAG} ; then oc -n openshift get imagestreams | grep cluster-logging-operator fi else diff --git a/hack/generate-bundle.sh b/hack/generate-bundle.sh index 544439509a..a5ec6ca93a 100755 --- a/hack/generate-bundle.sh +++ b/hack/generate-bundle.sh @@ -1,4 +1,4 @@ -#!/usr/bin/bash +#!/usr/bin/env bash source .bingo/variables.env diff --git a/hack/get-openshift-client.sh b/hack/get-openshift-client.sh index 44e21e15be..52f9a49adb 100755 --- a/hack/get-openshift-client.sh +++ b/hack/get-openshift-client.sh @@ -1,4 +1,4 @@ -#!/usr/bin/bash +#!/usr/bin/env bash # Download latest release of openshift-client, intended for use by ../Makefile set -e diff --git a/hack/revert-bundle.sh b/hack/revert-bundle.sh index f77a7ea6aa..0f8af90b95 100755 --- a/hack/revert-bundle.sh +++ b/hack/revert-bundle.sh @@ -1,4 +1,4 @@ -#!/usr/bin/bash +#!/usr/bin/env bash git diff --no-ext-diff --quiet -I'^ createdAt: ' bundle/manifests/cluster-logging.clusterserviceversion.yaml if ((! $?)) ; then diff --git a/hack/run-linter b/hack/run-linter index 4ba44d57c5..09973cf8ac 100755 --- a/hack/run-linter +++ b/hack/run-linter @@ -1,4 +1,4 @@ -#!/usr/bin/sh +#!/usr/bin/env bash set -euo pipefail diff --git a/internal/cmd/functional-benchmarker/config/options.go b/internal/cmd/functional-benchmarker/config/options.go index 7a9ccfa805..df926d1f6f 100644 --- a/internal/cmd/functional-benchmarker/config/options.go +++ b/internal/cmd/functional-benchmarker/config/options.go @@ -17,7 +17,7 @@ import ( const ( LogStressorImage = "quay.io/openshift-logging/cluster-logging-load-client:0.2" - imageVector = "quay.io/openshift-logging/vector:v0.37.1" + imageVector = "quay.io/openshift-logging/vector:v0.47.0" ) type Options struct { diff --git a/internal/generator/vector/conf/complex.toml b/internal/generator/vector/conf/complex.toml index 4d6bd846ac..86052ab277 100644 --- a/internal/generator/vector/conf/complex.toml +++ b/internal/generator/vector/conf/complex.toml @@ -6,8 +6,8 @@ enabled = true # Load sensitive data from files [secret.kubernetes_secret] -type = "file" -base_path = "/var/run/ocp-collector/secrets" +type = "directory" +path = "/var/run/ocp-collector/secrets" [sources.internal_metrics] type = "internal_metrics" diff --git a/internal/generator/vector/conf/complex_http_receiver.toml b/internal/generator/vector/conf/complex_http_receiver.toml index d61c9fab39..0fc9c8dc54 100644 --- a/internal/generator/vector/conf/complex_http_receiver.toml +++ b/internal/generator/vector/conf/complex_http_receiver.toml @@ -6,8 +6,8 @@ enabled = true # Load sensitive data from files [secret.kubernetes_secret] -type = "file" -base_path = "/var/run/ocp-collector/secrets" +type = "directory" +path = "/var/run/ocp-collector/secrets" [sources.internal_metrics] type = "internal_metrics" diff --git a/internal/generator/vector/conf/container.toml b/internal/generator/vector/conf/container.toml index 3dccec48ed..41e0a6c8e0 100644 --- a/internal/generator/vector/conf/container.toml +++ b/internal/generator/vector/conf/container.toml @@ -6,8 +6,8 @@ enabled = true # Load sensitive data from files [secret.kubernetes_secret] -type = "file" -base_path = "/var/run/ocp-collector/secrets" +type = "directory" +path = "/var/run/ocp-collector/secrets" [sources.internal_metrics] type = "internal_metrics" diff --git a/internal/generator/vector/conf/global_test.go b/internal/generator/vector/conf/global_test.go index 14c818e831..ad68f72984 100644 --- a/internal/generator/vector/conf/global_test.go +++ b/internal/generator/vector/conf/global_test.go @@ -21,8 +21,8 @@ enabled = true # Load sensitive data from files [secret.kubernetes_secret] -type = "file" -base_path = "/var/run/ocp-collector/secrets" +type = "directory" +path = "/var/run/ocp-collector/secrets" `, ).To(EqualConfigFrom(Global(constants.OpenshiftNS, "my-forwarder"))) }) @@ -37,8 +37,8 @@ enabled = true # Load sensitive data from files [secret.kubernetes_secret] -type = "file" -base_path = "/var/run/ocp-collector/secrets" +type = "directory" +path = "/var/run/ocp-collector/secrets" `, ).To(EqualConfigFrom(Global(constants.OpenshiftNS, constants.SingletonName))) diff --git a/internal/generator/vector/output/common/secret.go b/internal/generator/vector/output/common/secret.go index fa71bbcf16..96e42da467 100644 --- a/internal/generator/vector/output/common/secret.go +++ b/internal/generator/vector/output/common/secret.go @@ -20,8 +20,8 @@ func (sec VectorSecret) Template() string { return `{{define "` + sec.Name() + `" -}} # {{.Desc}} [secret.{{.ComponentID}}] -type = "file" -base_path = "{{.BasePath}}" +type = "directory" +path = "{{.BasePath}}" {{end}}` } diff --git a/internal/generator/vector/output/kafka/kafka_tuning.toml b/internal/generator/vector/output/kafka/kafka_tuning.toml index 1b323b8d1c..8468d19477 100644 --- a/internal/generator/vector/output/kafka/kafka_tuning.toml +++ b/internal/generator/vector/output/kafka/kafka_tuning.toml @@ -24,4 +24,4 @@ max_bytes = 10000000 [sinks.kafka_receiver.buffer] type = "disk" when_full = "block" -max_size = 268435488 \ No newline at end of file +max_size = 268435488 diff --git a/internal/generator/vector/output/syslog/rfc3164_with_defaults.toml b/internal/generator/vector/output/syslog/rfc3164_with_defaults.toml index 22540e73bf..5cc637c34e 100644 --- a/internal/generator/vector/output/syslog/rfc3164_with_defaults.toml +++ b/internal/generator/vector/output/syslog/rfc3164_with_defaults.toml @@ -7,13 +7,18 @@ if .log_type == "infrastructure" && .log_source == "node" { ._syslog.proc_id = to_string!(.systemd.t.PID || "") } if .log_source == "container" { - ._syslog.tag = join!([.kubernetes.namespace_name, .kubernetes.pod_name, .kubernetes.container_name], "") - #Remove non-alphanumeric characters - ._syslog.tag = replace(._syslog.tag, r'[^a-zA-Z0-9]', "") - #Truncate the sanitized tag to 32 characters - ._syslog.tag = truncate(._syslog.tag, 32) - ._syslog.severity = .level - ._syslog.facility = "user" + ._syslog.tag, err = join([.kubernetes.namespace_name, .kubernetes.pod_name, .kubernetes.container_name], "") + if err != null { + log("K8s metadata (namespace, pod, or container) missing; syslog.tag set to empty", level: "error") + ._syslog.tag = "" + } else { + #Remove non-alphanumeric characters + ._syslog.tag = replace(._syslog.tag, r'[^a-zA-Z0-9]', "") + #Truncate the sanitized tag to 32 characters + ._syslog.tag = truncate(._syslog.tag, 32) + } + ._syslog.severity = .level + ._syslog.facility = "user" } if .log_type == "audit" { ._syslog.tag = .log_source diff --git a/internal/generator/vector/output/syslog/syslog.go b/internal/generator/vector/output/syslog/syslog.go index ecf6a6b3cd..35a4ecc2ca 100644 --- a/internal/generator/vector/output/syslog/syslog.go +++ b/internal/generator/vector/output/syslog/syslog.go @@ -40,15 +40,25 @@ const ( nodeProcIdRFC5424 = `._syslog.proc_id = to_string!(.systemd.t.PID || "-")` // Default values for Syslog fields for application logType and infrastructure logType if source 'container' - containerAppName = `._syslog.app_name = join!([.kubernetes.namespace_name, .kubernetes.pod_name, .kubernetes.container_name], "_")` + containerAppName = `._syslog.app_name, err = join([.kubernetes.namespace_name, .kubernetes.pod_name, .kubernetes.container_name], "_") +if err != null { + log("K8s metadata (namespace, pod, or container) missing; syslog.appname set to '-'", level: "error") + ._syslog.app_name = "-" +} +` containerFacility = `._syslog.facility = "user"` containerSeverity = `._syslog.severity = .level` containerProcId = `._syslog.proc_id = to_string!(.kubernetes.pod_id || "-")` - containerTag = `._syslog.tag = join!([.kubernetes.namespace_name, .kubernetes.pod_name, .kubernetes.container_name], "") -#Remove non-alphanumeric characters -._syslog.tag = replace(._syslog.tag, r'[^a-zA-Z0-9]', "") -#Truncate the sanitized tag to 32 characters -._syslog.tag = truncate(._syslog.tag, 32) + containerTag = `._syslog.tag, err = join([.kubernetes.namespace_name, .kubernetes.pod_name, .kubernetes.container_name], "") +if err != null { + log("K8s metadata (namespace, pod, or container) missing; syslog.tag set to empty", level: "error") + ._syslog.tag = "" +} else { + #Remove non-alphanumeric characters + ._syslog.tag = replace(._syslog.tag, r'[^a-zA-Z0-9]', "") + #Truncate the sanitized tag to 32 characters + ._syslog.tag = truncate(._syslog.tag, 32) +} ` // Default values for Syslog fields for audit logType @@ -85,6 +95,9 @@ type = "socket" inputs = {{.Inputs}} address = "{{.Address}}" mode = "{{.Mode}}" +{{if eq .Mode "tcp"}} +keepalive.time_secs = 60 +{{end}} {{end}}` } diff --git a/internal/generator/vector/output/syslog/tcp_with_defaults.toml b/internal/generator/vector/output/syslog/tcp_with_defaults.toml index fafa40817d..f7f968218c 100644 --- a/internal/generator/vector/output/syslog/tcp_with_defaults.toml +++ b/internal/generator/vector/output/syslog/tcp_with_defaults.toml @@ -8,7 +8,11 @@ if .log_type == "infrastructure" && .log_source == "node" { ._syslog.proc_id = to_string!(.systemd.t.PID || "-") } if .log_source == "container" { - ._syslog.app_name = join!([.kubernetes.namespace_name, .kubernetes.pod_name, .kubernetes.container_name], "_") + ._syslog.app_name, err = join([.kubernetes.namespace_name, .kubernetes.pod_name, .kubernetes.container_name], "_") + if err != null { + log("K8s metadata (namespace, pod, or container) missing; syslog.appname set to '-'", level: "error") + ._syslog.app_name = "-" + } ._syslog.proc_id = to_string!(.kubernetes.pod_id || "-") ._syslog.severity = .level ._syslog.facility = "user" @@ -26,6 +30,7 @@ type = "socket" inputs = ["example_parse_encoding"] address = "logserver:514" mode = "tcp" +keepalive.time_secs = 60 [sinks.example.encoding] codec = "syslog" diff --git a/internal/generator/vector/output/syslog/tcp_with_tuning.toml b/internal/generator/vector/output/syslog/tcp_with_tuning.toml index 55ad8f2185..4fe6860a3f 100644 --- a/internal/generator/vector/output/syslog/tcp_with_tuning.toml +++ b/internal/generator/vector/output/syslog/tcp_with_tuning.toml @@ -9,7 +9,11 @@ if .log_type == "infrastructure" && .log_source == "node" { ._syslog.proc_id = to_string!(.systemd.t.PID || "-") } if .log_source == "container" { - ._syslog.app_name = join!([.kubernetes.namespace_name, .kubernetes.pod_name, .kubernetes.container_name], "_") + ._syslog.app_name, err = join([.kubernetes.namespace_name, .kubernetes.pod_name, .kubernetes.container_name], "_") + if err != null { + log("K8s metadata (namespace, pod, or container) missing; syslog.appname set to '-'", level: "error") + ._syslog.app_name = "-" + } ._syslog.proc_id = to_string!(.kubernetes.pod_id || "-") ._syslog.severity = .level ._syslog.facility = "user" @@ -27,6 +31,7 @@ type = "socket" inputs = ["example_parse_encoding"] address = "logserver:514" mode = "tcp" +keepalive.time_secs = 60 [sinks.example.encoding] codec = "syslog" diff --git a/internal/generator/vector/output/syslog/tls_with_field_references.toml b/internal/generator/vector/output/syslog/tls_with_field_references.toml index a2d68cb792..3d5feac448 100644 --- a/internal/generator/vector/output/syslog/tls_with_field_references.toml +++ b/internal/generator/vector/output/syslog/tls_with_field_references.toml @@ -21,6 +21,7 @@ type = "socket" inputs = ["example_parse_encoding"] address = "logserver:6514" mode = "tcp" +keepalive.time_secs = 60 [sinks.example.encoding] codec = "syslog" diff --git a/internal/generator/vector/output/syslog/xyz_defaults.toml b/internal/generator/vector/output/syslog/xyz_defaults.toml index 6fb15b166d..172aa88f09 100644 --- a/internal/generator/vector/output/syslog/xyz_defaults.toml +++ b/internal/generator/vector/output/syslog/xyz_defaults.toml @@ -8,7 +8,11 @@ if .log_type == "infrastructure" && .log_source == "node" { ._syslog.proc_id = to_string!(.systemd.t.PID || "-") } if .log_source == "container" { - ._syslog.app_name = join!([.kubernetes.namespace_name, .kubernetes.pod_name, .kubernetes.container_name], "_") + ._syslog.app_name, err = join([.kubernetes.namespace_name, .kubernetes.pod_name, .kubernetes.container_name], "_") + if err != null { + log("K8s metadata (namespace, pod, or container) missing; syslog.appname set to '-'", level: "error") + ._syslog.app_name = "-" + } ._syslog.proc_id = to_string!(.kubernetes.pod_id || "-") ._syslog.severity = .level ._syslog.facility = "user" diff --git a/olm_deploy/scripts/catalog-build.sh b/olm_deploy/scripts/catalog-build.sh index 87dac44eeb..215b346331 100755 --- a/olm_deploy/scripts/catalog-build.sh +++ b/olm_deploy/scripts/catalog-build.sh @@ -1,17 +1,28 @@ -#!/bin/sh -x +#!/usr/bin/env bash set -eo pipefail IMAGE_CLUSTER_LOGGING_OPERATOR_REGISTRY=${IMAGE_CLUSTER_LOGGING_OPERATOR_REGISTRY:-$LOCAL_IMAGE_CLUSTER_LOGGING_OPERATOR_REGISTRY} echo "Building operator registry image ${IMAGE_CLUSTER_LOGGING_OPERATOR_REGISTRY}" -podman build -f olm_deploy/operatorregistry/Dockerfile -t ${IMAGE_CLUSTER_LOGGING_OPERATOR_REGISTRY} . +podman build --platform linux/amd64 -f olm_deploy/operatorregistry/Dockerfile -t ${IMAGE_CLUSTER_LOGGING_OPERATOR_REGISTRY} . if [ -n "${LOCAL_IMAGE_CLUSTER_LOGGING_OPERATOR_REGISTRY}" ] ; then - coproc oc -n openshift-image-registry port-forward service/image-registry 5000:5000 + coproc oc -n openshift-image-registry port-forward --address 0.0.0.0 service/image-registry 5000:5000 trap "kill -15 $COPROC_PID" EXIT read PORT_FORWARD_STDOUT <&"${COPROC[0]}" if [[ "$PORT_FORWARD_STDOUT" =~ ^Forwarding.*5000$ ]] ; then user=$(oc whoami | sed s/://) - podman login --tls-verify=false -u ${user} -p $(oc whoami -t) 127.0.0.1:5000 + token=$(oc whoami -t) + podman login --tls-verify=false -u ${user} -p ${token} 127.0.0.1:5000 + if [[ "$(uname -s)" == "Darwin" ]]; then + # Copy auth entry so push inside the VM can authenticate via host.containers.internal + AUTH_FILE="${XDG_RUNTIME_DIR:-${HOME}/.config}/containers/auth.json" + if [[ -f "${AUTH_FILE}" ]]; then + jq '.auths["host.containers.internal:5000"] = .auths["127.0.0.1:5000"]' "${AUTH_FILE}" > "${AUTH_FILE}.tmp" && mv "${AUTH_FILE}.tmp" "${AUTH_FILE}" + fi + PUSH_TAG="${IMAGE_CLUSTER_LOGGING_OPERATOR_REGISTRY/127.0.0.1/host.containers.internal}" + podman tag ${IMAGE_CLUSTER_LOGGING_OPERATOR_REGISTRY} ${PUSH_TAG} + IMAGE_CLUSTER_LOGGING_OPERATOR_REGISTRY="${PUSH_TAG}" + fi else echo "Unexpected message from oc port-forward: $PORT_FORWARD_STDOUT" fi diff --git a/olm_deploy/scripts/catalog-deploy.sh b/olm_deploy/scripts/catalog-deploy.sh index c7eb7d2493..33366cc96c 100755 --- a/olm_deploy/scripts/catalog-deploy.sh +++ b/olm_deploy/scripts/catalog-deploy.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash set -eou pipefail source $(dirname "${BASH_SOURCE[0]}")/env.sh diff --git a/olm_deploy/scripts/catalog-uninstall.sh b/olm_deploy/scripts/catalog-uninstall.sh index bc67f82774..5e7d26cbd2 100755 --- a/olm_deploy/scripts/catalog-uninstall.sh +++ b/olm_deploy/scripts/catalog-uninstall.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash set -eou pipefail source $(dirname "${BASH_SOURCE[0]}")/env.sh diff --git a/olm_deploy/scripts/env.sh b/olm_deploy/scripts/env.sh index e528587da4..d1806e4f79 100755 --- a/olm_deploy/scripts/env.sh +++ b/olm_deploy/scripts/env.sh @@ -1,9 +1,9 @@ -#!/bin/sh +#!/usr/bin/env bash set -eou pipefail LOGGING_VERSION=${LOGGING_VERSION:-6.0} -LOGGING_VECTOR_VERSION=${LOGGING_VECTOR_VERSION:-v0.37.1} +LOGGING_VECTOR_VERSION=${LOGGING_VECTOR_VERSION:-v0.47.0} LOGGING_LOG_FILE_METRIC_EXPORTER_VERSION=${LOGGING_LOG_FILE_METRIC_EXPORTER_VERSION:-6.0} LOGGING_IS=${LOGGING_IS:-openshift-logging} diff --git a/olm_deploy/scripts/operator-install.sh b/olm_deploy/scripts/operator-install.sh index 252101b75a..f5967333fe 100755 --- a/olm_deploy/scripts/operator-install.sh +++ b/olm_deploy/scripts/operator-install.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash set -eou pipefail source $(dirname "${BASH_SOURCE[0]}")/env.sh diff --git a/olm_deploy/scripts/operator-uninstall.sh b/olm_deploy/scripts/operator-uninstall.sh index 2fb0b0f99a..4e877b60b0 100755 --- a/olm_deploy/scripts/operator-uninstall.sh +++ b/olm_deploy/scripts/operator-uninstall.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash set -eou pipefail source $(dirname "${BASH_SOURCE[0]}")/env.sh diff --git a/olm_deploy/scripts/registry-init.sh b/olm_deploy/scripts/registry-init.sh index 6daf97ad4b..bec1cd9cbd 100755 --- a/olm_deploy/scripts/registry-init.sh +++ b/olm_deploy/scripts/registry-init.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash set -eou pipefail source $(dirname "${BASH_SOURCE[0]}")/env.sh diff --git a/olm_deploy/scripts/wait_for_deployment.sh b/olm_deploy/scripts/wait_for_deployment.sh index 1d4ae6ddb0..885f8ee131 100755 --- a/olm_deploy/scripts/wait_for_deployment.sh +++ b/olm_deploy/scripts/wait_for_deployment.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash set -eou pipefail # $1 - namespace @@ -18,4 +18,4 @@ until [[ "$retries" -le "0" ]]; do sleep 3 done -exit 1 \ No newline at end of file +exit 1 diff --git a/test/functional/outputs/loki/application_logs_vector_test.go b/test/functional/outputs/loki/application_logs_vector_test.go index d3afa4899b..507620b6c5 100644 --- a/test/functional/outputs/loki/application_logs_vector_test.go +++ b/test/functional/outputs/loki/application_logs_vector_test.go @@ -103,8 +103,10 @@ var _ = Describe("[Functional][Outputs][Loki] Forwarding to Loki", func() { "kubernetes_labels_prefix_cloud_com_platform_stage": "dev", "kubernetes_host": f.Pod.Spec.NodeName, } + want["service_name"] = "unknown_service" + labels := result[0].Stream - Expect(len(labels)).To(Equal(8)) + Expect(len(labels)).To(Equal(9)) Expect(labels).To(BeEquivalentTo(want)) }) @@ -135,8 +137,12 @@ var _ = Describe("[Functional][Outputs][Loki] Forwarding to Loki", func() { "log_type": string(obs.InputTypeApplication), "openshift_log_type": string(obs.InputTypeApplication), } + + // quick fix since unable to disable service_name and detected_level discovery via functional test arguments + want["service_name"] = f.Pod.Spec.Containers[0].Name + labels := result[0].Stream - Expect(len(labels)).To(Equal(10)) + Expect(len(labels)).To(Equal(11)) Expect(labels).To(BeEquivalentTo(want)) }) }) diff --git a/test/functional/outputs/loki/audit_logs_vector_test.go b/test/functional/outputs/loki/audit_logs_vector_test.go index 7f37a29c16..68133c566a 100644 --- a/test/functional/outputs/loki/audit_logs_vector_test.go +++ b/test/functional/outputs/loki/audit_logs_vector_test.go @@ -54,6 +54,8 @@ var _ = Describe("[Functional][Outputs][Loki] Forwarding to Loki", func() { "openshift_log_type": string(obs.InputTypeAudit), "k8s_node_name": f.Pod.Spec.NodeName, } + expLabels["service_name"] = "unknown_service" + actualLabels := r[0].Stream Expect(actualLabels).To(BeEquivalentTo(expLabels), "Exp. labels to be added to the log record") } diff --git a/test/helpers/loki/receiver.go b/test/helpers/loki/receiver.go index 8c120d6dd5..fa83e4003f 100644 --- a/test/helpers/loki/receiver.go +++ b/test/helpers/loki/receiver.go @@ -26,7 +26,7 @@ import ( ) const ( - Image = "grafana/loki:2.8.4" + Image = "grafana/loki:3.3.2" Port = int32(3100) lokiReceiver = "loki-receiver" ) @@ -51,6 +51,8 @@ func NewReceiver(ns, name string) *Receiver { ready: make(chan struct{}), } runtime.Labels(r.Pod)[lokiReceiver] = name + // TODO: need a custom config in order to disable service_name discovery + // "-validation.discover-service-name=" empty list does not work as expected using flag r.Pod.Spec.Containers = []corev1.Container{{ Name: name, Image: Image, @@ -61,6 +63,7 @@ func NewReceiver(ns, name string) *Receiver { "-server.grpc-max-recv-msg-size-bytes", "20971520", "-distributor.ingestion-rate-limit-mb", "200", "-distributor.ingestion-burst-size-mb", "200", + "-validation.discover-log-levels=false", }, SecurityContext: &corev1.SecurityContext{ AllowPrivilegeEscalation: utils.GetPtr(false),