k8s/base/1_configmap.yaml (189 lines of code) (raw):

apiVersion: v1 data: collector.yaml: | # Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. exporters: googlecloud: log: default_log_name: opentelemetry-collector user_agent: Google-Cloud-OTLP manifests:0.3.0 OpenTelemetry Collector Built By Google/0.122.1 (linux/amd64) googlemanagedprometheus: user_agent: Google-Cloud-OTLP manifests:0.3.0 OpenTelemetry Collector Built By Google/0.122.1 (linux/amd64) # The otlphttp exporter is used to send traces to Google Cloud Trace using OTLP http/proto # The otlp exporter could also be used to send them using OTLP grpc otlphttp: encoding: proto endpoint: https://telemetry.googleapis.com # Use the googleclientauth extension to authenticate with Google credentials auth: authenticator: googleclientauth extensions: health_check: endpoint: ${env:MY_POD_IP}:13133 googleclientauth: processors: filter/self-metrics: metrics: include: match_type: strict metric_names: - otelcol_process_uptime - otelcol_process_memory_rss - otelcol_grpc_io_client_completed_rpcs - otelcol_googlecloudmonitoring_point_count batch: send_batch_max_size: 200 send_batch_size: 200 timeout: 5s k8sattributes: extract: metadata: - k8s.namespace.name - k8s.deployment.name - k8s.statefulset.name - k8s.daemonset.name - k8s.cronjob.name - k8s.job.name - k8s.replicaset.name - k8s.node.name - k8s.pod.name - k8s.pod.uid - k8s.pod.start_time passthrough: false pod_association: - sources: - from: resource_attribute name: k8s.pod.ip - sources: - from: resource_attribute name: k8s.pod.uid - sources: - from: connection memory_limiter: check_interval: 1s limit_percentage: 65 spike_limit_percentage: 20 metricstransform/self-metrics: transforms: - action: update include: otelcol_process_uptime operations: - action: add_label new_label: version new_value: Google-Cloud-OTLP manifests:0.3.0 OpenTelemetry Collector Built By Google/0.122.1 (linux/amd64) resourcedetection: detectors: [gcp] timeout: 10s transform/collision: metric_statements: - context: datapoint statements: - set(attributes["exported_location"], attributes["location"]) - delete_key(attributes, "location") - set(attributes["exported_cluster"], attributes["cluster"]) - delete_key(attributes, "cluster") - set(attributes["exported_namespace"], attributes["namespace"]) - delete_key(attributes, "namespace") - set(attributes["exported_job"], attributes["job"]) - delete_key(attributes, "job") - set(attributes["exported_instance"], attributes["instance"]) - delete_key(attributes, "instance") - set(attributes["exported_project_id"], attributes["project_id"]) - delete_key(attributes, "project_id") # The relative ordering of statements between ReplicaSet & Deployment and Job & CronJob are important. # The ordering of these controllers is decided based on the k8s controller documentation available at # https://kubernetes.io/docs/concepts/workloads/controllers. # The relative ordering of the other controllers in this list is inconsequential since they directly # create pods. transform/aco-gke: metric_statements: - context: datapoint statements: - set(attributes["top_level_controller_type"], "ReplicaSet") where resource.attributes["k8s.replicaset.name"] != nil - set(attributes["top_level_controller_name"], resource.attributes["k8s.replicaset.name"]) where resource.attributes["k8s.replicaset.name"] != nil - set(attributes["top_level_controller_type"], "Deployment") where resource.attributes["k8s.deployment.name"] != nil - set(attributes["top_level_controller_name"], resource.attributes["k8s.deployment.name"]) where resource.attributes["k8s.deployment.name"] != nil - set(attributes["top_level_controller_type"], "DaemonSet") where resource.attributes["k8s.daemonset.name"] != nil - set(attributes["top_level_controller_name"], resource.attributes["k8s.daemonset.name"]) where resource.attributes["k8s.daemonset.name"] != nil - set(attributes["top_level_controller_type"], "StatefulSet") where resource.attributes["k8s.statefulset.name"] != nil - set(attributes["top_level_controller_name"], resource.attributes["k8s.statefulset.name"]) where resource.attributes["k8s.statefulset.name"] != nil - set(attributes["top_level_controller_type"], "Job") where resource.attributes["k8s.job.name"] != nil - set(attributes["top_level_controller_name"], resource.attributes["k8s.job.name"]) where resource.attributes["k8s.job.name"] != nil - set(attributes["top_level_controller_type"], "CronJob") where resource.attributes["k8s.cronjob.name"] != nil - set(attributes["top_level_controller_name"], resource.attributes["k8s.cronjob.name"]) where resource.attributes["k8s.cronjob.name"] != nil # When sending telemetry to the GCP OTLP endpoint, the gcp.project_id resource attribute is required to be set to your project ID. resource/gcp_project_id: attributes: - key: gcp.project_id # MAKE SURE YOU REPLACE THIS WITH YOUR PROJECT ID value: ${GOOGLE_CLOUD_PROJECT} action: insert receivers: otlp: protocols: grpc: endpoint: ${env:MY_POD_IP}:4317 http: cors: allowed_origins: - http://* - https://* endpoint: ${env:MY_POD_IP}:4318 otlp/self-metrics: protocols: grpc: endpoint: ${env:MY_POD_IP}:14317 service: extensions: - health_check - googleclientauth pipelines: logs: exporters: - googlecloud processors: - k8sattributes - resourcedetection - memory_limiter - batch receivers: - otlp metrics/otlp: exporters: - googlemanagedprometheus processors: - k8sattributes - memory_limiter - resourcedetection - transform/collision - transform/aco-gke - batch receivers: - otlp metrics/self-metrics: exporters: - googlemanagedprometheus processors: - filter/self-metrics - metricstransform/self-metrics - k8sattributes - memory_limiter - resourcedetection - batch receivers: - otlp/self-metrics traces: exporters: - otlphttp processors: - k8sattributes - memory_limiter - resource/gcp_project_id - resourcedetection - batch receivers: - otlp telemetry: logs: encoding: json metrics: readers: - periodic: exporter: otlp: protocol: grpc endpoint: ${env:MY_POD_IP}:14317 kind: ConfigMap metadata: creationTimestamp: null name: collector-config namespace: opentelemetry