From 8e48a359906dfd62dd4aecf243f0b2a2095afc53 Mon Sep 17 00:00:00 2001 From: John T Skarbek Date: Fri, 16 Oct 2026 09:31:03 -0400 Subject: [PATCH] feat(alloy): expose OTLP ports by default Dogfood sets withOTLPReceiver and alloy.extraPorts together. The chart ignores the receiver ports if an operator sets only withOTLPReceiver. Declare the OTLP gRPC and HTTP ports in the chart defaults. They are inert until withOTLPReceiver is true. An operator now sets one value to enable the receiver. This depends on the default prometheus.io/port annotation. Without it, the new ports become scrape targets that share their labels with the Alloy HTTP port target, and the up series for Alloy flaps. --- README.md | 8 ++++++++ coder-observability/values.yaml | 11 +++++++++++ compiled/resources.yaml | 22 ++++++++++++++++++++++ 3 files changed, 41 insertions(+) diff --git a/README.md b/README.md index 60c2db0..be2b7b6 100644 --- a/README.md +++ b/README.md @@ -316,6 +316,14 @@ values which are defined [here](https://github.com/grafana/helm-charts/tree/main | alloy.alloy.configMap.key | string | `"config.river"` | | | alloy.alloy.configMap.name | string | `"collector-config"` | | | alloy.alloy.extraArgs[0] | string | `"--disable-reporting=true"` | | +| alloy.alloy.extraPorts[0].name | string | `"otlp-grpc"` | | +| alloy.alloy.extraPorts[0].port | int | `4317` | | +| alloy.alloy.extraPorts[0].protocol | string | `"TCP"` | | +| alloy.alloy.extraPorts[0].targetPort | int | `4317` | | +| alloy.alloy.extraPorts[1].name | string | `"otlp-http"` | | +| alloy.alloy.extraPorts[1].port | int | `4318` | | +| alloy.alloy.extraPorts[1].protocol | string | `"TCP"` | | +| alloy.alloy.extraPorts[1].targetPort | int | `4318` | | | alloy.alloy.mounts.dockercontainers | bool | `true` | | | alloy.alloy.mounts.varlog | bool | `true` | | | alloy.commonRelabellings | string | `"rule {\n source_labels = [\"__meta_kubernetes_namespace\"]\n target_label = \"namespace\"\n}\nrule {\n source_labels = [\"__meta_kubernetes_pod_name\"]\n target_label = \"pod\"\n}\n// coalesce the following labels and pick the first value; we'll use this to define the \"job\" label\nrule {\n source_labels = [\"__meta_kubernetes_pod_label_app_kubernetes_io_component\", \"app\", \"__meta_kubernetes_pod_container_name\"]\n separator = \"/\"\n target_label = \"__meta_app\"\n action = \"replace\"\n regex = \"^/*([^/]+?)(?:/.*)?$\" // split by the delimiter if it exists, we only want the first one\n replacement = \"${1}\"\n}\nrule {\n source_labels = [\"__meta_kubernetes_namespace\", \"__meta_kubernetes_pod_label_app_kubernetes_io_name\", \"__meta_app\"]\n separator = \"/\"\n target_label = \"job\"\n}\nrule {\n source_labels = [\"__meta_kubernetes_pod_container_name\"]\n target_label = \"container\"\n}\nrule {\n regex = \"__meta_kubernetes_pod_label_(statefulset_kubernetes_io_pod_name|controller_revision_hash)\"\n action = \"labeldrop\"\n}\nrule {\n regex = \"pod_template_generation\"\n action = \"labeldrop\"\n}\nrule {\n source_labels = [\"__meta_kubernetes_pod_phase\"]\n regex = \"Pending|Succeeded|Failed|Completed\"\n action = \"drop\"\n}\nrule {\n source_labels = [\"__meta_kubernetes_pod_node_name\"]\n action = \"replace\"\n target_label = \"node\"\n}\nrule {\n action = \"labelmap\"\n regex = \"__meta_kubernetes_pod_annotation_prometheus_io_param_(.+)\"\n replacement = \"__param_$1\"\n}"` | | diff --git a/coder-observability/values.yaml b/coder-observability/values.yaml index 586d247..4c6e9a0 100644 --- a/coder-observability/values.yaml +++ b/coder-observability/values.yaml @@ -207,6 +207,17 @@ alloy: mounts: varlog: true dockercontainers: true + # Expose the OTLP receiver ports on the alloy container and on the alloy and + # alloy-cluster Services. Nothing listens on them until withOTLPReceiver is true. + extraPorts: + - name: otlp-grpc + port: 4317 + targetPort: 4317 + protocol: TCP + - name: otlp-http + port: 4318 + targetPort: 4318 + protocol: TCP controller: type: daemonset podAnnotations: diff --git a/compiled/resources.yaml b/compiled/resources.yaml index 5d5d0d7..4f20dc9 100644 --- a/compiled/resources.yaml +++ b/compiled/resources.yaml @@ -11455,6 +11455,14 @@ spec: port: 12345 targetPort: 12345 protocol: "TCP" + - name: otlp-grpc + port: 4317 + targetPort: 4317 + protocol: TCP + - name: otlp-http + port: 4318 + targetPort: 4318 + protocol: TCP --- # Source: coder-observability/charts/alloy/templates/service.yaml apiVersion: v1 @@ -11479,6 +11487,14 @@ spec: port: 12345 targetPort: 12345 protocol: "TCP" + - name: otlp-grpc + port: 4317 + targetPort: 4317 + protocol: TCP + - name: otlp-http + port: 4318 + targetPort: 4318 + protocol: TCP --- # Source: coder-observability/charts/grafana/templates/service.yaml apiVersion: v1 @@ -12106,6 +12122,12 @@ spec: ports: - containerPort: 12345 name: http-metrics + - containerPort: 4317 + name: otlp-grpc + protocol: TCP + - containerPort: 4318 + name: otlp-http + protocol: TCP readinessProbe: httpGet: path: /-/ready