apiVersion: opentelemetry.io/v1beta1 kind: OpenTelemetryCollector metadata: name: openobserve-collector-agent namespace: openobserve-collector spec: managementState: managed image: ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-contrib:0.127.0 config: exporters: otlphttp/openobserve: endpoint: http://openobserve-openobserve-standalone.openobserve.svc.cluster.local:5080 headers: Authorization: ${OPENOBSERVE_AUTH} logs_endpoint: http://openobserve-openobserve-standalone.openobserve.svc.cluster.local:5080/api/default/v1/logs metrics_endpoint: http://openobserve-openobserve-standalone.openobserve.svc.cluster.local:5080/api/default/v1/metrics traces_endpoint: http://openobserve-openobserve-standalone.openobserve.svc.cluster.local:5080/api/default/v1/traces # HTTP client configuration to match OpenObserve HTTP/1.1 compression: gzip max_idle_conns: 50 max_idle_conns_per_host: 5 idle_conn_timeout: 120s read_buffer_size: 8192 write_buffer_size: 8192 otlphttp/openobserve_k8s_events: endpoint: http://openobserve-openobserve-standalone.openobserve.svc.cluster.local:5080 headers: Authorization: ${OPENOBSERVE_AUTH} stream-name: k8s_events logs_endpoint: http://openobserve-openobserve-standalone.openobserve.svc.cluster.local:5080/api/default/v1/logs # HTTP client configuration to match OpenObserve HTTP/1.1 compression: gzip max_idle_conns: 50 max_idle_conns_per_host: 5 idle_conn_timeout: 120s read_buffer_size: 8192 write_buffer_size: 8192 extensions: zpages: {} processors: batch: send_batch_size: 5000 timeout: 30s send_batch_max_size: 6000 metadata_keys: - k8s.namespace.name - k8s.pod.name k8sattributes: auth_type: serviceAccount extract: labels: - from: pod key: app.kubernetes.io/name tag_name: service.name - from: pod key: app.kubernetes.io/component tag_name: k8s.app.component metadata: - k8s.pod.name - k8s.namespace.name - k8s.node.name filter: node_from_env_var: K8S_NODE_NAME passthrough: false pod_association: - sources: - from: resource_attribute name: k8s.pod.uid - sources: - from: resource_attribute name: k8s.pod.name - from: resource_attribute name: k8s.namespace.name - from: resource_attribute name: k8s.node.name - sources: - from: resource_attribute name: k8s.pod.ip - sources: - from: resource_attribute name: k8s.pod.name - from: resource_attribute name: k8s.namespace.name - sources: - from: connection attributes: actions: - key: k8s_node_name from_attribute: k8s.node.name action: upsert groupbyattrs/final: keys: - k8s_node_name - direction metricstransform: transforms: - include: system.network.io match_type: strict action: update new_name: system_network_io - include: system.cpu.time match_type: strict action: update new_name: k8s_node_cpu_time - include: system.cpu.utilization match_type: strict action: update new_name: k8s_node_cpu_utilization - include: k8s.node.cpu.utilization match_type: strict action: update new_name: k8s_node_cpu_utilization - include: system.memory.usage match_type: strict action: update new_name: system_memory_usage - include: system.memory.utilization match_type: strict action: update new_name: k8s_node_memory_utilization - include: system.filesystem.utilization match_type: strict action: update new_name: k8s_node_filesystem_utilization - include: container_fs_reads_total match_type: strict action: update new_name: container_fs_reads_total - include: container_fs_writes_total match_type: strict action: update new_name: container_fs_writes_total - include: k8s.pod.cpu_request_utilization match_type: strict action: update new_name: k8s_pod_cpu_request_utilization - include: k8s.pod.cpu_limit_utilization match_type: strict action: update new_name: k8s_pod_cpu_limit_utilization - include: k8s.pod.memory_request_utilization match_type: strict action: update new_name: k8s_pod_memory_request_utilization - include: k8s.pod.memory_limit_utilization match_type: strict action: update new_name: k8s_pod_memory_limit_utilization - include: k8s.container.cpu_request_utilization match_type: strict action: update new_name: k8s_container_cpu_request_utilization - include: k8s.container.cpu_limit_utilization match_type: strict action: update new_name: k8s_container_cpu_limit_utilization - include: k8s.container.memory_request_utilization match_type: strict action: update new_name: k8s_container_memory_request_utilization - include: k8s.container.memory_limit_utilization match_type: strict action: update new_name: k8s_container_memory_limit_utilization resourcedetection: detectors: - system - env - k8snode override: true system: hostname_sources: - os - dns # Filter out high-cardinality, low-value metrics filter/drop_noisy_metrics: metrics: exclude: match_type: regexp metric_names: - ".*_bucket$" # Drop histogram buckets for non-critical metrics - "go_.*" # Drop Go runtime metrics - "promhttp_.*" # Drop Prometheus HTTP metrics - "process_.*" # Drop process metrics - "container_spec_.*" # Drop container spec metrics - "container_tasks_state" # Drop task state metrics # Add intelligent trace sampling to reduce from 100% to ~15-20% tail_sampling: decision_wait: 10s num_traces: 50000 expected_new_traces_per_sec: 10 policies: # Always sample error traces (100%) - name: errors type: status_code status_code: status_codes: [ERROR] # Always sample slow traces >1s (100%) - name: slow-traces type: latency latency: threshold_ms: 1000 # Always sample traces from critical namespaces (100%) - name: critical-namespaces type: string_attribute string_attribute: key: k8s.namespace.name values: [kube-system, openobserve, cert-manager, ingress-nginx, longhorn-system] # Sample 5% of normal traces (reduced from 10% for resource optimization) - name: probabilistic type: probabilistic probabilistic: sampling_percentage: 5 receivers: filelog/std: exclude: - /var/log/pods/default_daemonset-collector*_*/opentelemetry-collector/*.log include: - /var/log/pods/*/*/*.log include_file_name: false include_file_path: true operators: - id: get-format routes: - expr: body matches "^\\{" output: parser-docker - expr: body matches "^[^ Z]+ " output: parser-crio - expr: body matches "^[^ Z]+Z" output: parser-containerd type: router - id: parser-crio output: extract_metadata_from_filepath regex: ^(?P