From d3ea673bee2110488ebca167694258c1486b0e4c Mon Sep 17 00:00:00 2001 From: zirain Date: Sat, 8 Mar 2025 12:17:28 +0800 Subject: [PATCH 1/2] use envoyalsreceiver Signed-off-by: zirain --- charts/gateway-addons-helm/Chart.lock | 6 +- charts/gateway-addons-helm/Chart.yaml | 2 +- charts/gateway-addons-helm/README.md | 11 +- charts/gateway-addons-helm/values.yaml | 55 +++-- examples/envoy-als/Dockerfile | 23 -- examples/envoy-als/Makefile | 8 - examples/envoy-als/go.mod | 27 -- examples/envoy-als/go.sum | 68 ------ examples/envoy-als/main.go | 111 --------- .../kubernetes/accesslog/als-accesslog.yaml | 2 +- examples/kubernetes/envoy-als.yaml | 231 ------------------ .../latest/install/gateway-addons-helm-api.md | 11 +- .../tasks/observability/proxy-accesslog.md | 10 +- test/e2e/testdata/accesslog-als.yaml | 53 +--- test/e2e/tests/accesslog.go | 32 +-- test/e2e/tests/utils.go | 29 --- test/helm/gateway-addons-helm/e2e.out.yaml | 38 ++- tools/make/examples.mk | 2 +- 18 files changed, 93 insertions(+), 626 deletions(-) delete mode 100644 examples/envoy-als/Dockerfile delete mode 100644 examples/envoy-als/Makefile delete mode 100644 examples/envoy-als/go.mod delete mode 100644 examples/envoy-als/go.sum delete mode 100644 examples/envoy-als/main.go delete mode 100644 examples/kubernetes/envoy-als.yaml diff --git a/charts/gateway-addons-helm/Chart.lock b/charts/gateway-addons-helm/Chart.lock index 4e15b355cb5..f53d6df48df 100644 --- a/charts/gateway-addons-helm/Chart.lock +++ b/charts/gateway-addons-helm/Chart.lock @@ -19,6 +19,6 @@ dependencies: version: 1.3.1 - name: opentelemetry-collector repository: https://open-telemetry.github.io/opentelemetry-helm-charts - version: 0.108.0 -digest: sha256:bc634c59972bfd4a01e0f4310a4949095752e659a9b5cb1d9c0fbe9a86f37011 -generated: "2024-10-25T10:55:26.755739+08:00" + version: 0.117.3 +digest: sha256:608111fd3d1ed5e0c0b7c3ae3d8648b5787752ae3326a15d9f6b4424d06fcc71 +generated: "2025-03-08T11:22:35.034042+08:00" diff --git a/charts/gateway-addons-helm/Chart.yaml b/charts/gateway-addons-helm/Chart.yaml index 3a2303ef8c9..216f9ededc6 100644 --- a/charts/gateway-addons-helm/Chart.yaml +++ b/charts/gateway-addons-helm/Chart.yaml @@ -51,5 +51,5 @@ dependencies: condition: tempo.enabled - name: opentelemetry-collector repository: https://open-telemetry.github.io/opentelemetry-helm-charts - version: 0.108.0 + version: 0.117.3 condition: opentelemetry-collector.enabled diff --git a/charts/gateway-addons-helm/README.md b/charts/gateway-addons-helm/README.md index 0f61f4b0978..fe4021bb1e1 100644 --- a/charts/gateway-addons-helm/README.md +++ b/charts/gateway-addons-helm/README.md @@ -26,7 +26,7 @@ An Add-ons Helm chart for Envoy Gateway | https://grafana.github.io/helm-charts | grafana | 8.0.0 | | https://grafana.github.io/helm-charts | loki | 4.8.0 | | https://grafana.github.io/helm-charts | tempo | 1.3.1 | -| https://open-telemetry.github.io/opentelemetry-helm-charts | opentelemetry-collector | 0.108.0 | +| https://open-telemetry.github.io/opentelemetry-helm-charts | opentelemetry-collector | 0.117.3 | | https://prometheus-community.github.io/helm-charts | prometheus | 25.21.0 | ## Usage @@ -118,6 +118,7 @@ To uninstall the chart: | opentelemetry-collector.config.processors.attributes.actions[0].key | string | `"loki.attribute.labels"` | | | opentelemetry-collector.config.processors.attributes.actions[0].value | string | `"k8s.pod.name, k8s.namespace.name"` | | | opentelemetry-collector.config.receivers.datadog.endpoint | string | `"[${env:MY_POD_IP}]:8126"` | | +| opentelemetry-collector.config.receivers.envoyals.endpoint | string | `"[${env:MY_POD_IP}]:9000"` | | | opentelemetry-collector.config.receivers.jaeger.protocols.grpc.endpoint | string | `"[${env:MY_POD_IP}]:14250"` | | | opentelemetry-collector.config.receivers.jaeger.protocols.thrift_compact.endpoint | string | `"[${env:MY_POD_IP}]:6831"` | | | opentelemetry-collector.config.receivers.jaeger.protocols.thrift_http.endpoint | string | `"[${env:MY_POD_IP}]:14268"` | | @@ -131,6 +132,7 @@ To uninstall the chart: | opentelemetry-collector.config.service.pipelines.logs.exporters[0] | string | `"loki"` | | | opentelemetry-collector.config.service.pipelines.logs.processors[0] | string | `"attributes"` | | | opentelemetry-collector.config.service.pipelines.logs.receivers[0] | string | `"otlp"` | | +| opentelemetry-collector.config.service.pipelines.logs.receivers[1] | string | `"envoyals"` | | | opentelemetry-collector.config.service.pipelines.metrics.exporters[0] | string | `"prometheus"` | | | opentelemetry-collector.config.service.pipelines.metrics.receivers[0] | string | `"datadog"` | | | opentelemetry-collector.config.service.pipelines.metrics.receivers[1] | string | `"otlp"` | | @@ -142,7 +144,14 @@ To uninstall the chart: | opentelemetry-collector.enabled | bool | `false` | | | opentelemetry-collector.fullnameOverride | string | `"otel-collector"` | | | opentelemetry-collector.image.repository | string | `"otel/opentelemetry-collector-contrib"` | | +| opentelemetry-collector.image.tag | string | `"0.121.0"` | | | opentelemetry-collector.mode | string | `"deployment"` | | +| opentelemetry-collector.ports.envoy-als.appProtocol | string | `"grpc"` | | +| opentelemetry-collector.ports.envoy-als.containerPort | int | `9000` | | +| opentelemetry-collector.ports.envoy-als.enabled | bool | `true` | | +| opentelemetry-collector.ports.envoy-als.hostPort | int | `9000` | | +| opentelemetry-collector.ports.envoy-als.protocol | string | `"TCP"` | | +| opentelemetry-collector.ports.envoy-als.servicePort | int | `9000` | | | prometheus.alertmanager.enabled | bool | `false` | | | prometheus.enabled | bool | `true` | | | prometheus.kube-state-metrics.enabled | bool | `false` | | diff --git a/charts/gateway-addons-helm/values.yaml b/charts/gateway-addons-helm/values.yaml index bd50f976fb8..d314d4985ba 100644 --- a/charts/gateway-addons-helm/values.yaml +++ b/charts/gateway-addons-helm/values.yaml @@ -21,9 +21,9 @@ grafana: dashboardproviders.yaml: apiVersion: 1 providers: - - name: 'envoy-gateway' + - name: "envoy-gateway" orgId: 1 - folder: 'envoy-gateway' + folder: "envoy-gateway" type: file disableDeletion: false editable: true @@ -32,7 +32,6 @@ grafana: dashboardsConfigMaps: envoy-gateway: "grafana-dashboards" - # Values for Prometheus dependency prometheus: enabled: true @@ -61,7 +60,6 @@ prometheus: repository: prom/prometheus securityContext: {} - # Values for Fluent-bit dependency # TODO: remove fluent-bit dependency fluent-bit: @@ -109,12 +107,12 @@ fluent-bit: Keep_Log Off K8S-Logging.Parser On K8S-Logging.Exclude On - + [FILTER] Name grep Match kube.* Regex $kubernetes['container_name'] ^envoy$ - + [FILTER] Name parser Match kube.* @@ -131,7 +129,6 @@ fluent-bit: Port 3100 Labels job=fluentbit, app=$kubernetes['labels']['app'], k8s_namespace_name=$kubernetes['namespace_name'], k8s_pod_name=$kubernetes['pod_name'], k8s_container_name=$kubernetes['container_name'] - # Values for Loki dependency loki: enabled: true @@ -146,7 +143,7 @@ loki: commonConfig: replication_factor: 1 storage: - type: 'filesystem' + type: "filesystem" rulerConfig: storage: type: "local" @@ -193,40 +190,40 @@ alloy: discovery.kubernetes "pod" { role = "pod" } - + // discovery.relabel rewrites the label set of the input targets by applying one or more relabeling rules. // If no rules are defined, then the input targets are exported as-is. discovery.relabel "pod_logs" { targets = discovery.kubernetes.pod.targets - + // Label creation - "namespace" field from "__meta_kubernetes_namespace" rule { source_labels = ["__meta_kubernetes_namespace"] action = "replace" target_label = "namespace" } - + // Label creation - "pod" field from "__meta_kubernetes_pod_name" rule { source_labels = ["__meta_kubernetes_pod_name"] action = "replace" target_label = "pod" } - + // Label creation - "container" field from "__meta_kubernetes_pod_container_name" rule { source_labels = ["__meta_kubernetes_pod_container_name"] action = "replace" target_label = "container" } - + // Label creation - "app" field from "__meta_kubernetes_pod_label_app_kubernetes_io_name" rule { source_labels = ["__meta_kubernetes_pod_label_app_kubernetes_io_name"] action = "replace" target_label = "app" } - + // Label creation - "job" field from "__meta_kubernetes_namespace" and "__meta_kubernetes_pod_container_name" // Concatenate values __meta_kubernetes_namespace/__meta_kubernetes_pod_container_name rule { @@ -236,7 +233,7 @@ alloy: separator = "/" replacement = "$1" } - + // Label creation - "container" field from "__meta_kubernetes_pod_uid" and "__meta_kubernetes_pod_container_name" // Concatenate values __meta_kubernetes_pod_uid/__meta_kubernetes_pod_container_name.log rule { @@ -246,7 +243,7 @@ alloy: separator = "/" replacement = "/var/log/pods/*$1/*.log" } - + // Label creation - "container_runtime" field from "__meta_kubernetes_pod_container_id" rule { source_labels = ["__meta_kubernetes_pod_container_id"] @@ -256,7 +253,7 @@ alloy: replacement = "$1" } } - + // loki.source.kubernetes tails logs from Kubernetes containers using the Kubernetes API. loki.source.kubernetes "pod_logs" { targets = discovery.relabel.pod_logs.output @@ -273,7 +270,6 @@ alloy: forward_to = [loki.write.alloy.receiver] } - # Values for Tempo dependency tempo: @@ -282,14 +278,22 @@ tempo: service: type: LoadBalancer - # Values for OpenTelemetry-Collector dependency opentelemetry-collector: enabled: false + ports: + envoy-als: + enabled: true + containerPort: 9000 + servicePort: 9000 + hostPort: 9000 + protocol: TCP + appProtocol: grpc fullnameOverride: otel-collector mode: deployment image: repository: "otel/opentelemetry-collector-contrib" + tag: "0.121.0" config: exporters: prometheus: @@ -314,6 +318,8 @@ opentelemetry-collector: # Loki will convert this to k8s_pod_name label. value: k8s.pod.name, k8s.namespace.name receivers: + envoyals: + endpoint: "[${env:MY_POD_IP}]:9000" jaeger: protocols: grpc: @@ -335,11 +341,11 @@ opentelemetry-collector: prometheus: config: scrape_configs: - - job_name: opentelemetry-collector - scrape_interval: 10s - static_configs: - - targets: - - "[${env:MY_POD_IP}]:8888" + - job_name: opentelemetry-collector + scrape_interval: 10s + static_configs: + - targets: + - "[${env:MY_POD_IP}]:8888" service: telemetry: metrics: @@ -360,6 +366,7 @@ opentelemetry-collector: - attributes receivers: - otlp + - envoyals traces: exporters: - otlp diff --git a/examples/envoy-als/Dockerfile b/examples/envoy-als/Dockerfile deleted file mode 100644 index 842a84d6b7a..00000000000 --- a/examples/envoy-als/Dockerfile +++ /dev/null @@ -1,23 +0,0 @@ -FROM golang:1.24.0 AS builder - -ARG GO_LDFLAGS="" - -WORKDIR /workspace -COPY go.mod go.sum ./ -RUN --mount=type=cache,target=/root/.cache/go-build --mount=type=cache,target=/go/pkg/mod \ - go mod download - -COPY . ./ -RUN --mount=type=cache,target=/root/.cache/go-build --mount=type=cache,target=/go/pkg/mod \ - CGO_ENABLED=0 \ - GOOS=${TARGETOS} \ - GOARCH=${TARGETARCH} \ - go build -o /bin/envoy-als -ldflags "${GO_LDFLAGS}" . - -# Make our production image -FROM gcr.io/distroless/static-debian11:nonroot -COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ -COPY --from=builder /bin/envoy-als / - -USER nonroot:nonroot -ENTRYPOINT ["/envoy-als"] diff --git a/examples/envoy-als/Makefile b/examples/envoy-als/Makefile deleted file mode 100644 index a8ca6cec25d..00000000000 --- a/examples/envoy-als/Makefile +++ /dev/null @@ -1,8 +0,0 @@ - -IMAGE_PREFIX ?= envoyproxy/gateway- -APP_NAME ?= envoy-als -TAG ?= latest - -.PHONY: docker-buildx -docker-buildx: - docker buildx build . -t $(IMAGE_PREFIX)$(APP_NAME):$(TAG) --build-arg GO_LDFLAGS="$(GO_LDFLAGS)" --load diff --git a/examples/envoy-als/go.mod b/examples/envoy-als/go.mod deleted file mode 100644 index 6cea3479c27..00000000000 --- a/examples/envoy-als/go.mod +++ /dev/null @@ -1,27 +0,0 @@ -module github.com/envoyproxy/gateway-envoy-als - -go 1.24.0 - -require ( - github.com/envoyproxy/go-control-plane/envoy v1.32.4 - github.com/prometheus/client_golang v1.21.1 - google.golang.org/grpc v1.71.0 -) - -require ( - github.com/beorn7/perks v1.0.1 // indirect - github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/cncf/xds/go v0.0.0-20241223141626-cff3c89139a3 // indirect - github.com/envoyproxy/protoc-gen-validate v1.2.1 // indirect - github.com/klauspost/compress v1.17.11 // indirect - github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect - github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/common v0.62.0 // indirect - github.com/prometheus/procfs v0.15.1 // indirect - golang.org/x/net v0.37.0 // indirect - golang.org/x/sys v0.31.0 // indirect - golang.org/x/text v0.23.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f // indirect - google.golang.org/protobuf v1.36.5 // indirect -) diff --git a/examples/envoy-als/go.sum b/examples/envoy-als/go.sum deleted file mode 100644 index c1238ad95bd..00000000000 --- a/examples/envoy-als/go.sum +++ /dev/null @@ -1,68 +0,0 @@ -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= -github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cncf/xds/go v0.0.0-20241223141626-cff3c89139a3 h1:boJj011Hh+874zpIySeApCX4GeOjPl9qhRF3QuIZq+Q= -github.com/cncf/xds/go v0.0.0-20241223141626-cff3c89139a3/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/envoyproxy/go-control-plane/envoy v1.32.4 h1:jb83lalDRZSpPWW2Z7Mck/8kXZ5CQAFYVjQcdVIr83A= -github.com/envoyproxy/go-control-plane/envoy v1.32.4/go.mod h1:Gzjc5k8JcJswLjAx1Zm+wSYE20UrLtt7JZMWiWQXQEw= -github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8= -github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU= -github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= -github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= -github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= -github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= -github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= -github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= -github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= -github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.21.1 h1:DOvXXTqVzvkIewV/CDPFdejpMCGeMcbGCQ8YOmu+Ibk= -github.com/prometheus/client_golang v1.21.1/go.mod h1:U9NM32ykUErtVBxdvD3zfi+EuFkkaBvMb09mIfe0Zgg= -github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= -github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= -github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ2Io= -github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I= -github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= -github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= -github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= -go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= -go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY= -go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI= -go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ= -go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE= -go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A= -go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU= -go.opentelemetry.io/otel/sdk/metric v1.34.0 h1:5CeK9ujjbFVL5c1PhLuStg1wxA7vQv7ce1EK0Gyvahk= -go.opentelemetry.io/otel/sdk/metric v1.34.0/go.mod h1:jQ/r8Ze28zRKoNRdkjCZxfs6YvBTG1+YIqyFVFYec5w= -go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k= -go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE= -golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= -golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= -golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f h1:OxYkA3wjPsZyBylwymxSHa7ViiW1Sml4ToBrncvFehI= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50= -google.golang.org/grpc v1.71.0 h1:kF77BGdPTQ4/JZWMlb9VpJ5pa25aqvVqogsxNHHdeBg= -google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= -google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= -google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/examples/envoy-als/main.go b/examples/envoy-als/main.go deleted file mode 100644 index 7bc72cb8501..00000000000 --- a/examples/envoy-als/main.go +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright Envoy Gateway Authors -// SPDX-License-Identifier: Apache-2.0 -// The full text of the Apache license is available in the LICENSE file at -// the root of the repo. - -package main - -import ( - "log" - "net" - "net/http" - - alsv2 "github.com/envoyproxy/go-control-plane/envoy/service/accesslog/v2" - alsv3 "github.com/envoyproxy/go-control-plane/envoy/service/accesslog/v3" - "github.com/prometheus/client_golang/prometheus" - "github.com/prometheus/client_golang/prometheus/promhttp" - - "google.golang.org/grpc" -) - -var LogCount = prometheus.NewCounterVec(prometheus.CounterOpts{ - Name: "log_count", - Help: "The total number of logs received.", -}, []string{"api_version"}) - -func init() { - // Register the summary and the histogram with Prometheus's default registry. - prometheus.MustRegister(LogCount) -} - -type ALSServer struct{} - -func (a *ALSServer) StreamAccessLogs(logStream alsv2.AccessLogService_StreamAccessLogsServer) error { - log.Println("Streaming als v2 logs") - for { - data, err := logStream.Recv() - if err != nil { - return err - } - - httpLogs := data.GetHttpLogs() - if httpLogs != nil { - LogCount.WithLabelValues("v2").Add(float64(len(httpLogs.LogEntry))) - } - - log.Printf("Received v2 log data: %s\n", data.String()) - } -} - -type ALSServerV3 struct{} - -func (a *ALSServerV3) StreamAccessLogs(logStream alsv3.AccessLogService_StreamAccessLogsServer) error { - log.Println("Streaming als v3 logs") - for { - data, err := logStream.Recv() - if err != nil { - return err - } - - httpLogs := data.GetHttpLogs() - if httpLogs != nil { - LogCount.WithLabelValues("v3").Add(float64(len(httpLogs.LogEntry))) - } - - log.Printf("Received v3 log data: %s\n", data.String()) - } -} - -func NewALSServer() *ALSServer { - return &ALSServer{} -} - -func NewALSServerV3() *ALSServerV3 { - return &ALSServerV3{} -} - -func main() { - mux := http.NewServeMux() - if err := addMonitor(mux); err != nil { - log.Printf("could not establish self-monitoring: %v\n", err) - } - - s := &http.Server{ - Addr: ":19001", - Handler: mux, - } - - go func() { - s.ListenAndServe() - }() - - listener, err := net.Listen("tcp", "0.0.0.0:8080") - if err != nil { - log.Fatalf("Failed to start listener on port 8080: %v", err) - } - - var opts []grpc.ServerOption - grpcServer := grpc.NewServer(opts...) - alsv2.RegisterAccessLogServiceServer(grpcServer, NewALSServer()) - alsv3.RegisterAccessLogServiceServer(grpcServer, NewALSServerV3()) - log.Println("Starting ALS Server") - if err := grpcServer.Serve(listener); err != nil { - log.Fatalf("grpc serve err: %v", err) - } -} - -func addMonitor(mux *http.ServeMux) error { - mux.Handle("/metrics", promhttp.HandlerFor(prometheus.DefaultGatherer, promhttp.HandlerOpts{EnableOpenMetrics: true})) - - return nil -} diff --git a/examples/kubernetes/accesslog/als-accesslog.yaml b/examples/kubernetes/accesslog/als-accesslog.yaml index 686c827f108..70bd098f586 100644 --- a/examples/kubernetes/accesslog/als-accesslog.yaml +++ b/examples/kubernetes/accesslog/als-accesslog.yaml @@ -28,7 +28,7 @@ spec: - type: ALS als: backendRefs: - - name: envoy-als + - name: otel-collector namespace: monitoring port: 9000 http: diff --git a/examples/kubernetes/envoy-als.yaml b/examples/kubernetes/envoy-als.yaml deleted file mode 100644 index 41e2d65ab52..00000000000 --- a/examples/kubernetes/envoy-als.yaml +++ /dev/null @@ -1,231 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: envoy-als -data: - go.mod: | - module envoy-als - go 1.22 - require ( - github.com/envoyproxy/go-control-plane v0.12.0 - github.com/prometheus/client_golang v1.19.1 - google.golang.org/grpc v1.64.0 - ) - - require ( - github.com/beorn7/perks v1.0.1 // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/cncf/xds/go v0.0.0-20240318125728-8a4994d93e50 // indirect - github.com/envoyproxy/protoc-gen-validate v1.0.4 // indirect - github.com/golang/protobuf v1.5.4 // indirect - github.com/prometheus/client_model v0.5.0 // indirect - github.com/prometheus/common v0.48.0 // indirect - github.com/prometheus/procfs v0.12.0 // indirect - golang.org/x/net v0.22.0 // indirect - golang.org/x/sys v0.18.0 // indirect - golang.org/x/text v0.14.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 // indirect - google.golang.org/protobuf v1.33.0 // indirect - ) - go.sum: | - github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= - github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= - github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= - github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= - github.com/cncf/xds/go v0.0.0-20240318125728-8a4994d93e50 h1:DBmgJDC9dTfkVyGgipamEh2BpGYxScCH1TOF1LL1cXc= - github.com/cncf/xds/go v0.0.0-20240318125728-8a4994d93e50/go.mod h1:5e1+Vvlzido69INQaVO6d87Qn543Xr6nooe9Kz7oBFM= - github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= - github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= - github.com/envoyproxy/go-control-plane v0.12.0 h1:4X+VP1GHd1Mhj6IB5mMeGbLCleqxjletLK6K0rbxyZI= - github.com/envoyproxy/go-control-plane v0.12.0/go.mod h1:ZBTaoJ23lqITozF0M6G4/IragXCQKCnYbmlmtHvwRG0= - github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= - github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= - github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= - github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= - github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= - github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= - github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE= - github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho= - github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= - github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= - github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE= - github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc= - github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= - github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= - golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= - golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= - golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= - golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= - golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= - golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= - google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 h1:NnYq6UN9ReLM9/Y01KWNOWyI5xQ9kbIms5GGJVwS/Yc= - google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= - google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY= - google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg= - google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= - google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= - main.go: | - package main - - import ( - "log" - "net" - "net/http" - - alsv2 "github.com/envoyproxy/go-control-plane/envoy/service/accesslog/v2" - alsv3 "github.com/envoyproxy/go-control-plane/envoy/service/accesslog/v3" - "github.com/prometheus/client_golang/prometheus" - "github.com/prometheus/client_golang/prometheus/promhttp" - - "google.golang.org/grpc" - ) - - var ( - LogCount = prometheus.NewCounterVec(prometheus.CounterOpts{ - Name: "log_count", - Help: "The total number of logs received.", - }, []string{"api_version"}) - ) - - func init() { - // Register the summary and the histogram with Prometheus's default registry. - prometheus.MustRegister(LogCount) - } - - type ALSServer struct { - } - - func (a *ALSServer) StreamAccessLogs(logStream alsv2.AccessLogService_StreamAccessLogsServer) error { - log.Println("Streaming als v2 logs") - for { - data, err := logStream.Recv() - if err != nil { - return err - } - - httpLogs := data.GetHttpLogs() - if httpLogs != nil { - LogCount.WithLabelValues("v2").Add(float64(len(httpLogs.LogEntry))) - } - - log.Printf("Received v2 log data: %s\n", data.String()) - } - } - - type ALSServerV3 struct { - } - - func (a *ALSServerV3) StreamAccessLogs(logStream alsv3.AccessLogService_StreamAccessLogsServer) error { - log.Println("Streaming als v3 logs") - for { - data, err := logStream.Recv() - if err != nil { - return err - } - - httpLogs := data.GetHttpLogs() - if httpLogs != nil { - LogCount.WithLabelValues("v3").Add(float64(len(httpLogs.LogEntry))) - } - - log.Printf("Received v3 log data: %s\n", data.String()) - } - } - - func NewALSServer() *ALSServer { - return &ALSServer{} - } - - func NewALSServerV3() *ALSServerV3 { - return &ALSServerV3{} - } - - func main() { - mux := http.NewServeMux() - if err := addMonitor(mux); err != nil { - log.Printf("could not establish self-monitoring: %v\n", err) - } - - s := &http.Server{ - Addr: ":19001", - Handler: mux, - } - - go func() { - s.ListenAndServe() - }() - - listener, err := net.Listen("tcp", "0.0.0.0:8080") - if err != nil { - log.Fatalf("Failed to start listener on port 8080: %v", err) - } - - var opts []grpc.ServerOption - grpcServer := grpc.NewServer(opts...) - alsv2.RegisterAccessLogServiceServer(grpcServer, NewALSServer()) - alsv3.RegisterAccessLogServiceServer(grpcServer, NewALSServerV3()) - log.Println("Starting ALS Server") - if err := grpcServer.Serve(listener); err != nil { - log.Fatalf("grpc serve err: %v", err) - } - } - - func addMonitor(mux *http.ServeMux) error { - mux.Handle("/metrics", promhttp.HandlerFor(prometheus.DefaultGatherer, promhttp.HandlerOpts{EnableOpenMetrics: true})) - - return nil - } ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: envoy-als -spec: - replicas: 1 - selector: - matchLabels: - app: envoy-als - template: - metadata: - annotations: - prometheus.io/scrape: "true" - prometheus.io/port: "19001" - labels: - app: envoy-als - spec: - containers: - - name: envoy-als - command: - - sh - - "-c" - - "cp -a /app /app-live && cd /app-live && go run . " - image: golang:1.22.3-alpine - ports: - - containerPort: 8080 - - containerPort: 19001 - volumeMounts: - - name: envoy-als - mountPath: /app - volumes: - - name: envoy-als - configMap: - name: envoy-als ---- -apiVersion: v1 -kind: Service -metadata: - name: envoy-als -spec: - selector: - app: envoy-als - type: LoadBalancer - ports: - - name: grpc-als - protocol: TCP - appProtocol: grpc - port: 8080 - targetPort: 8080 - - name: http-monitoring - protocol: TCP - port: 19001 - targetPort: 19001 diff --git a/site/content/en/latest/install/gateway-addons-helm-api.md b/site/content/en/latest/install/gateway-addons-helm-api.md index 606d0201405..13794b5d420 100644 --- a/site/content/en/latest/install/gateway-addons-helm-api.md +++ b/site/content/en/latest/install/gateway-addons-helm-api.md @@ -28,7 +28,7 @@ An Add-ons Helm chart for Envoy Gateway | https://grafana.github.io/helm-charts | grafana | 8.0.0 | | https://grafana.github.io/helm-charts | loki | 4.8.0 | | https://grafana.github.io/helm-charts | tempo | 1.3.1 | -| https://open-telemetry.github.io/opentelemetry-helm-charts | opentelemetry-collector | 0.108.0 | +| https://open-telemetry.github.io/opentelemetry-helm-charts | opentelemetry-collector | 0.117.3 | | https://prometheus-community.github.io/helm-charts | prometheus | 25.21.0 | ## Values @@ -97,6 +97,7 @@ An Add-ons Helm chart for Envoy Gateway | opentelemetry-collector.config.processors.attributes.actions[0].key | string | `"loki.attribute.labels"` | | | opentelemetry-collector.config.processors.attributes.actions[0].value | string | `"k8s.pod.name, k8s.namespace.name"` | | | opentelemetry-collector.config.receivers.datadog.endpoint | string | `"[${env:MY_POD_IP}]:8126"` | | +| opentelemetry-collector.config.receivers.envoyals.endpoint | string | `"[${env:MY_POD_IP}]:9000"` | | | opentelemetry-collector.config.receivers.jaeger.protocols.grpc.endpoint | string | `"[${env:MY_POD_IP}]:14250"` | | | opentelemetry-collector.config.receivers.jaeger.protocols.thrift_compact.endpoint | string | `"[${env:MY_POD_IP}]:6831"` | | | opentelemetry-collector.config.receivers.jaeger.protocols.thrift_http.endpoint | string | `"[${env:MY_POD_IP}]:14268"` | | @@ -110,6 +111,7 @@ An Add-ons Helm chart for Envoy Gateway | opentelemetry-collector.config.service.pipelines.logs.exporters[0] | string | `"loki"` | | | opentelemetry-collector.config.service.pipelines.logs.processors[0] | string | `"attributes"` | | | opentelemetry-collector.config.service.pipelines.logs.receivers[0] | string | `"otlp"` | | +| opentelemetry-collector.config.service.pipelines.logs.receivers[1] | string | `"envoyals"` | | | opentelemetry-collector.config.service.pipelines.metrics.exporters[0] | string | `"prometheus"` | | | opentelemetry-collector.config.service.pipelines.metrics.receivers[0] | string | `"datadog"` | | | opentelemetry-collector.config.service.pipelines.metrics.receivers[1] | string | `"otlp"` | | @@ -121,7 +123,14 @@ An Add-ons Helm chart for Envoy Gateway | opentelemetry-collector.enabled | bool | `false` | | | opentelemetry-collector.fullnameOverride | string | `"otel-collector"` | | | opentelemetry-collector.image.repository | string | `"otel/opentelemetry-collector-contrib"` | | +| opentelemetry-collector.image.tag | string | `"0.121.0"` | | | opentelemetry-collector.mode | string | `"deployment"` | | +| opentelemetry-collector.ports.envoy-als.appProtocol | string | `"grpc"` | | +| opentelemetry-collector.ports.envoy-als.containerPort | int | `9000` | | +| opentelemetry-collector.ports.envoy-als.enabled | bool | `true` | | +| opentelemetry-collector.ports.envoy-als.hostPort | int | `9000` | | +| opentelemetry-collector.ports.envoy-als.protocol | string | `"TCP"` | | +| opentelemetry-collector.ports.envoy-als.servicePort | int | `9000` | | | prometheus.alertmanager.enabled | bool | `false` | | | prometheus.enabled | bool | `true` | | | prometheus.kube-state-metrics.enabled | bool | `false` | | diff --git a/site/content/en/latest/tasks/observability/proxy-accesslog.md b/site/content/en/latest/tasks/observability/proxy-accesslog.md index 17d444b8636..cad48129ea5 100644 --- a/site/content/en/latest/tasks/observability/proxy-accesslog.md +++ b/site/content/en/latest/tasks/observability/proxy-accesslog.md @@ -145,10 +145,6 @@ curl -s "http://$LOKI_IP:3100/loki/api/v1/query_range" --data-urlencode "query={ Envoy Gateway can send logs to a backend implemented [gRPC access log service proto](https://www.envoyproxy.io/docs/envoy/latest/api-v3/service/accesslog/v3/als.proto). There's an example service [here](https://raw.githubusercontent.com/envoyproxy/gateway/main/examples/kubernetes/envoy-als.yaml), which simply count the log and export to prometheus endpoint. -```shell -kubectl apply -f https://raw.githubusercontent.com/envoyproxy/gateway/main/examples/kubernetes/envoy-als.yaml -n monitoring -``` - The following configuration sends logs to the gRPC access log service: ```shell @@ -178,9 +174,9 @@ spec: - type: ALS als: backendRefs: - - name: envoy-als + - name: otel-collector namespace: monitoring - port: 8080 + port: 9000 type: HTTP EOF ``` @@ -188,7 +184,7 @@ EOF Verify logs from envoy-als: ```shell -curl -s "http://$(kubectl get svc envoy-als -n monitoring -o jsonpath='{.status.loadBalancer.ingress[0].ip}'):19001/metrics" | grep log_count +curl -s "http://$LOKI_IP:3100/loki/api/v1/query_range" --data-urlencode "query={exporter=\"OTLP\"}" | jq '.data.result[0].values' ``` ## CEL Expressions diff --git a/test/e2e/testdata/accesslog-als.yaml b/test/e2e/testdata/accesslog-als.yaml index 2ee20baf298..6c19313a1b8 100644 --- a/test/e2e/testdata/accesslog-als.yaml +++ b/test/e2e/testdata/accesslog-als.yaml @@ -32,9 +32,9 @@ spec: - type: ALS als: backendRefs: - - name: envoy-als + - name: otel-collector namespace: monitoring - port: 8080 + port: 9000 type: HTTP shutdown: drainTimeout: 5s @@ -56,52 +56,3 @@ spec: backendRefs: - name: infra-backend-v1 port: 8080 ---- -# This is a trick to pass EnvoyProxy BackendRef check. -# In the future, plan to make OTel-collector support envoy ALS receiver, -# then we can remove this. -apiVersion: v1 -kind: Service -metadata: - name: envoy-als - namespace: monitoring -spec: - selector: - app: envoy-als - type: LoadBalancer - ports: - - name: grpc-als - protocol: TCP - appProtocol: grpc - port: 8080 - targetPort: 8080 - - name: http-monitoring - protocol: TCP - port: 19001 - targetPort: 19001 ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: envoy-als - namespace: monitoring -spec: - replicas: 1 - selector: - matchLabels: - app: envoy-als - template: - metadata: - annotations: - prometheus.io/scrape: "true" - prometheus.io/port: "19001" - labels: - app: envoy-als - spec: - containers: - - name: envoy-als - image: envoyproxy/gateway-envoy-als - imagePullPolicy: IfNotPresent - ports: - - containerPort: 8080 - - containerPort: 19001 diff --git a/test/e2e/tests/accesslog.go b/test/e2e/tests/accesslog.go index 26b5caa4aa2..ea577349574 100644 --- a/test/e2e/tests/accesslog.go +++ b/test/e2e/tests/accesslog.go @@ -174,27 +174,17 @@ var ALSTest = suite.ConformanceTest{ Description: "Make sure ALS access log is working", Manifests: []string{"testdata/accesslog-als.yaml"}, Test: func(t *testing.T, suite *suite.ConformanceTestSuite) { + labels := map[string]string{ + "exporter": "OTLP", + } + match := "common_properties" + t.Run("HTTP", func(t *testing.T) { ns := "gateway-conformance-infra" routeNN := types.NamespacedName{Name: "accesslog-als", Namespace: ns} gwNN := types.NamespacedName{Name: "accesslog-gtw", Namespace: ns} gwAddr := kubernetes.GatewayAndHTTPRoutesMustBeAccepted(t, suite.Client, suite.TimeoutConfig, suite.ControllerName, kubernetes.NewGatewayRef(gwNN), routeNN) - preCount := 0 - // make sure ALS server metric endpoint is ready - if err := wait.PollUntilContextTimeout(context.TODO(), time.Second, time.Minute, true, - func(ctx context.Context) (bool, error) { - curCount, err := ALSLogCount(suite) - if err != nil { - tlog.Logf(t, "failed to get log count from envoy als: %v", err) - return false, nil - } - preCount = curCount - return true, nil - }); err != nil { - t.Errorf("failed to get log count from envoy als: %v", err) - } - expectedResponse := httputils.ExpectedResponse{ Request: httputils.Request{ Path: "/als", @@ -210,17 +200,7 @@ var ALSTest = suite.ConformanceTest{ // make sure listener is ready httputils.MakeRequestAndExpectEventuallyConsistentResponse(t, suite.RoundTripper, suite.TimeoutConfig, gwAddr, expectedResponse) - if err := wait.PollUntilContextTimeout(context.TODO(), time.Second, time.Minute, true, - func(ctx context.Context) (bool, error) { - curCount, err := ALSLogCount(suite) - if err != nil { - tlog.Logf(t, "failed to get log count from envoy als: %v", err) - return false, nil - } - return preCount < curCount, nil - }); err != nil { - t.Errorf("failed to get log count from envoy als: %v", err) - } + runLogTest(t, suite, gwAddr, expectedResponse, labels, match, 0) }) }, } diff --git a/test/e2e/tests/utils.go b/test/e2e/tests/utils.go index 3466680982f..34b146afb0c 100644 --- a/test/e2e/tests/utils.go +++ b/test/e2e/tests/utils.go @@ -470,35 +470,6 @@ func WaitForLoadBalancerAddress(t *testing.T, client client.Client, timeout time return ipAddr, nil } -func ALSLogCount(suite *suite.ConformanceTestSuite) (int, error) { - metricPath, err := RetrieveURL(suite.Client, types.NamespacedName{ - Namespace: "monitoring", - Name: "envoy-als", - }, 19001, "/metrics") - if err != nil { - return -1, err - } - - countMetric, err := RetrieveMetric(metricPath, "log_count", time.Second) - if err != nil { - return -1, err - } - - // metric not found or empty - if countMetric == nil { - return 0, nil - } - - total := 0 - for _, m := range countMetric.Metric { - if m.Counter != nil && m.Counter.Value != nil { - total += int(*m.Counter.Value) - } - } - - return total, nil -} - func OverLimitCount(suite *suite.ConformanceTestSuite) (int, error) { cli, err := kubernetes.NewForRestConfig(suite.RestConfig) if err != nil { diff --git a/test/helm/gateway-addons-helm/e2e.out.yaml b/test/helm/gateway-addons-helm/e2e.out.yaml index 0c918893d5d..3dbd22b44d5 100644 --- a/test/helm/gateway-addons-helm/e2e.out.yaml +++ b/test/helm/gateway-addons-helm/e2e.out.yaml @@ -35,11 +35,12 @@ metadata: name: otel-collector namespace: monitoring labels: - helm.sh/chart: opentelemetry-collector-0.108.0 + helm.sh/chart: opentelemetry-collector-0.117.3 app.kubernetes.io/name: opentelemetry-collector app.kubernetes.io/instance: gateway-addons-helm - app.kubernetes.io/version: "0.111.0" + app.kubernetes.io/version: "0.120.0" app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: standalone-collector --- # Source: gateway-addons-helm/charts/prometheus/templates/serviceaccount.yaml apiVersion: v1 @@ -266,12 +267,12 @@ metadata: name: otel-collector namespace: monitoring labels: - helm.sh/chart: opentelemetry-collector-0.108.0 + helm.sh/chart: opentelemetry-collector-0.117.3 app.kubernetes.io/name: opentelemetry-collector app.kubernetes.io/instance: gateway-addons-helm - app.kubernetes.io/version: "0.111.0" + app.kubernetes.io/version: "0.120.0" app.kubernetes.io/managed-by: Helm - + app.kubernetes.io/component: standalone-collector data: relay: | exporters: @@ -302,6 +303,8 @@ data: receivers: datadog: endpoint: '[${env:MY_POD_IP}]:8126' + envoyals: + endpoint: '[${env:MY_POD_IP}]:9000' jaeger: protocols: grpc: @@ -337,6 +340,7 @@ data: - attributes receivers: - otlp + - envoyals metrics: exporters: - prometheus @@ -9726,17 +9730,22 @@ metadata: name: otel-collector namespace: monitoring labels: - helm.sh/chart: opentelemetry-collector-0.108.0 + helm.sh/chart: opentelemetry-collector-0.117.3 app.kubernetes.io/name: opentelemetry-collector app.kubernetes.io/instance: gateway-addons-helm - app.kubernetes.io/version: "0.111.0" + app.kubernetes.io/version: "0.120.0" app.kubernetes.io/managed-by: Helm - + app.kubernetes.io/component: standalone-collector component: standalone-collector spec: type: ClusterIP ports: + - name: envoy-als + port: 9000 + targetPort: 9000 + protocol: TCP + appProtocol: grpc - name: jaeger-compact port: 6831 targetPort: 6831 @@ -9941,12 +9950,12 @@ metadata: name: otel-collector namespace: monitoring labels: - helm.sh/chart: opentelemetry-collector-0.108.0 + helm.sh/chart: opentelemetry-collector-0.117.3 app.kubernetes.io/name: opentelemetry-collector app.kubernetes.io/instance: gateway-addons-helm - app.kubernetes.io/version: "0.111.0" + app.kubernetes.io/version: "0.120.0" app.kubernetes.io/managed-by: Helm - + app.kubernetes.io/component: standalone-collector spec: replicas: 1 revisionHistoryLimit: 10 @@ -9960,7 +9969,7 @@ spec: template: metadata: annotations: - checksum/config: 77c11cf41a890ec6a75a644880450d53887eca3e37511c3139cf0b3e8ebbe1ee + checksum/config: a9276313bdf453c98afdb35f387caf437a5763f8b6f45ff1b870f15ebd4a56fe labels: app.kubernetes.io/name: opentelemetry-collector @@ -9978,10 +9987,13 @@ spec: - --config=/conf/relay.yaml securityContext: {} - image: "otel/opentelemetry-collector-contrib:0.111.0" + image: "otel/opentelemetry-collector-contrib:0.121.0" imagePullPolicy: IfNotPresent ports: + - name: envoy-als + containerPort: 9000 + protocol: TCP - name: jaeger-compact containerPort: 6831 protocol: UDP diff --git a/tools/make/examples.mk b/tools/make/examples.mk index 2f1dcaee515..d4a8ff1556e 100644 --- a/tools/make/examples.mk +++ b/tools/make/examples.mk @@ -1,4 +1,4 @@ -EXAMPLE_APPS := extension-server envoy-ext-auth envoy-als grpc-ext-proc preserve-case-backend static-file-server +EXAMPLE_APPS := extension-server envoy-ext-auth grpc-ext-proc preserve-case-backend static-file-server EXAMPLE_IMAGE_PREFIX ?= envoyproxy/gateway- EXAMPLE_TAG ?= latest From ba8398f30e92b0a8ae9307a3f4421771b0d87f22 Mon Sep 17 00:00:00 2001 From: zirain Date: Sat, 8 Mar 2025 16:41:05 +0800 Subject: [PATCH 2/2] fix ipv6 Signed-off-by: zirain --- charts/gateway-addons-helm/README.md | 5 ++++- charts/gateway-addons-helm/values.yaml | 9 ++++++++- .../en/latest/install/gateway-addons-helm-api.md | 5 ++++- test/helm/gateway-addons-helm/e2e.out.yaml | 10 ++++++++-- tools/hack/create-cluster.sh | 2 ++ 5 files changed, 26 insertions(+), 5 deletions(-) diff --git a/charts/gateway-addons-helm/README.md b/charts/gateway-addons-helm/README.md index fe4021bb1e1..ce142f8e62d 100644 --- a/charts/gateway-addons-helm/README.md +++ b/charts/gateway-addons-helm/README.md @@ -140,7 +140,10 @@ To uninstall the chart: | opentelemetry-collector.config.service.pipelines.traces.receivers[0] | string | `"datadog"` | | | opentelemetry-collector.config.service.pipelines.traces.receivers[1] | string | `"otlp"` | | | opentelemetry-collector.config.service.pipelines.traces.receivers[2] | string | `"zipkin"` | | -| opentelemetry-collector.config.service.telemetry.metrics.address | string | `"[${env:MY_POD_IP}]:8888"` | | +| opentelemetry-collector.config.service.telemetry.metrics.address | string | `nil` | | +| opentelemetry-collector.config.service.telemetry.metrics.level | string | `"none"` | | +| opentelemetry-collector.config.service.telemetry.metrics.readers[0].pull.exporter.prometheus.host | string | `"localhost"` | | +| opentelemetry-collector.config.service.telemetry.metrics.readers[0].pull.exporter.prometheus.port | int | `8888` | | | opentelemetry-collector.enabled | bool | `false` | | | opentelemetry-collector.fullnameOverride | string | `"otel-collector"` | | | opentelemetry-collector.image.repository | string | `"otel/opentelemetry-collector-contrib"` | | diff --git a/charts/gateway-addons-helm/values.yaml b/charts/gateway-addons-helm/values.yaml index d314d4985ba..e4ab2aa8d44 100644 --- a/charts/gateway-addons-helm/values.yaml +++ b/charts/gateway-addons-helm/values.yaml @@ -349,7 +349,14 @@ opentelemetry-collector: service: telemetry: metrics: - address: "[${env:MY_POD_IP}]:8888" + level: none + address: null # Disable the deprecated setting + readers: + - pull: + exporter: + prometheus: + host: "localhost" + port: 8888 extensions: - health_check pipelines: diff --git a/site/content/en/latest/install/gateway-addons-helm-api.md b/site/content/en/latest/install/gateway-addons-helm-api.md index 13794b5d420..a3536a5bcac 100644 --- a/site/content/en/latest/install/gateway-addons-helm-api.md +++ b/site/content/en/latest/install/gateway-addons-helm-api.md @@ -119,7 +119,10 @@ An Add-ons Helm chart for Envoy Gateway | opentelemetry-collector.config.service.pipelines.traces.receivers[0] | string | `"datadog"` | | | opentelemetry-collector.config.service.pipelines.traces.receivers[1] | string | `"otlp"` | | | opentelemetry-collector.config.service.pipelines.traces.receivers[2] | string | `"zipkin"` | | -| opentelemetry-collector.config.service.telemetry.metrics.address | string | `"[${env:MY_POD_IP}]:8888"` | | +| opentelemetry-collector.config.service.telemetry.metrics.address | string | `nil` | | +| opentelemetry-collector.config.service.telemetry.metrics.level | string | `"none"` | | +| opentelemetry-collector.config.service.telemetry.metrics.readers[0].pull.exporter.prometheus.host | string | `"localhost"` | | +| opentelemetry-collector.config.service.telemetry.metrics.readers[0].pull.exporter.prometheus.port | int | `8888` | | | opentelemetry-collector.enabled | bool | `false` | | | opentelemetry-collector.fullnameOverride | string | `"otel-collector"` | | | opentelemetry-collector.image.repository | string | `"otel/opentelemetry-collector-contrib"` | | diff --git a/test/helm/gateway-addons-helm/e2e.out.yaml b/test/helm/gateway-addons-helm/e2e.out.yaml index 3dbd22b44d5..d591e897436 100644 --- a/test/helm/gateway-addons-helm/e2e.out.yaml +++ b/test/helm/gateway-addons-helm/e2e.out.yaml @@ -362,7 +362,13 @@ data: - zipkin telemetry: metrics: - address: '[${env:MY_POD_IP}]:8888' + level: none + readers: + - pull: + exporter: + prometheus: + host: localhost + port: 8888 --- # Source: gateway-addons-helm/charts/prometheus/templates/cm.yaml apiVersion: v1 @@ -9969,7 +9975,7 @@ spec: template: metadata: annotations: - checksum/config: a9276313bdf453c98afdb35f387caf437a5763f8b6f45ff1b870f15ebd4a56fe + checksum/config: 53f3948607b26e83438039b1f256f0aece7134365837af7b12fc6e34b0844dc1 labels: app.kubernetes.io/name: opentelemetry-collector diff --git a/tools/hack/create-cluster.sh b/tools/hack/create-cluster.sh index 18bfcb6cdfc..c6903478508 100755 --- a/tools/hack/create-cluster.sh +++ b/tools/hack/create-cluster.sh @@ -22,6 +22,8 @@ apiVersion: kind.x-k8s.io/v1alpha4 networking: ${CNI_CONFIG} ipFamily: ${IP_FAMILY} + # uncomment following line when use IPv6 on macos or windows + # apiServerAddress: 127.0.0.1 # it's to prevent inherit search domains from the host which slows down DNS resolution # and cause problems to IPv6 only clusters running on IPv4 host. dnsSearch: []