apiVersion: opentelemetry.io/v1beta1 kind: OpenTelemetryCollector metadata: name: openobserve-collector-gateway namespace: openobserve-collector spec: config: connectors: servicegraph: dimensions: - http.method latency_histogram_buckets: - 1 - 2 - 3 - 4 - 5 store: max_items: 10 ttl: 1s spanmetrics: aggregation_temporality: AGGREGATION_TEMPORALITY_CUMULATIVE dimensions: - default: GET name: http.method - name: http.status_code dimensions_cache_size: 1000 exemplars: enabled: true histogram: explicit: buckets: - 100us - 1ms - 2ms - 6ms - 10ms - 100ms - 250ms - 500ms - 1000ms - 1400ms - 2000ms - 5s - 10s - 30s - 60s - 120s - 300s - 600s metrics_flush_interval: 15s exporters: otlphttp/openobserve: endpoint: http://openobserve-openobserve-standalone.openobserve.svc.cluster.local:5080/api/default/ headers: Authorization: ${OPENOBSERVE_AUTH} stream-name: default # 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/api/default/ headers: Authorization: ${OPENOBSERVE_AUTH} stream-name: k8s_events # 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 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: k8s-app tag_name: service.name - from: pod key: app.kubernetes.io/instance tag_name: k8s.app.instance - from: pod key: app.kubernetes.io/version tag_name: service.version - from: pod key: app.kubernetes.io/component tag_name: k8s.app.component metadata: - k8s.namespace.name - k8s.pod.name - k8s.node.name - k8s.deployment.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 resourcedetection: detectors: - env override: true timeout: 2s metricstransform: transforms: - include: k8s.node.allocatable_cpu match_type: strict action: update new_name: machine_cpu_cores - include: k8s.node.allocatable_memory match_type: strict action: update new_name: machine_memory_bytes - include: k8s.node.condition_ready match_type: strict action: update new_name: k8s_node_condition_ready - include: k8s.node.condition_memory_pressure match_type: strict action: update new_name: k8s_node_condition_memory_pressure - include: k8s.node.condition_disk_pressure match_type: strict action: update new_name: k8s_node_condition_disk_pressure - include: k8s.node.condition_pid_pressure match_type: strict action: update new_name: k8s_node_condition_pid_pressure receivers: k8s_cluster: allocatable_types_to_report: - cpu - memory - storage collection_interval: 60s metrics: k8s.container.cpu_limit: enabled: false k8s.container.cpu_request: enabled: false k8s.container.memory_limit: enabled: false k8s.container.memory_request: enabled: false node_conditions_to_report: - Ready - MemoryPressure - DiskPressure - PIDPressure k8s_events: auth_type: serviceAccount k8sobjects: auth_type: serviceAccount objects: - field_selector: status.phase=Running interval: 15m mode: pull name: pods - group: events.k8s.io mode: watch name: events otlp: protocols: grpc: {} http: {} otlp/logs: protocols: http: endpoint: 0.0.0.0:4418 prometheus: config: global: scrape_interval: 30s evaluation_interval: 30s external_labels: {} scrape_configs: - job_name: 'nginx-ingress' static_configs: - targets: [':10254', ':10254', ':10254'] metrics_path: /metrics scrape_interval: 30s metric_relabel_configs: - source_labels: [__name__] regex: 'nginx_ingress_controller_.*' action: keep target_allocator: endpoint: http://openobserve-collector-gateway-targetallocator:80 interval: 30s collector_id: "${POD_NAME}" service: telemetry: metrics: address: 0.0.0.0:8888 pipelines: logs/fluentbit-forward: exporters: - otlphttp/openobserve processors: - batch receivers: - otlp/logs logs/k8s_events: exporters: - otlphttp/openobserve_k8s_events processors: - batch - k8sattributes - resourcedetection receivers: - k8s_events metrics: exporters: - otlphttp/openobserve processors: - batch - k8sattributes - resourcedetection - metricstransform receivers: - k8s_cluster - spanmetrics - servicegraph - prometheus # Re-enabled for ServiceMonitor scraping traces: exporters: - otlphttp/openobserve - spanmetrics - servicegraph processors: - batch - k8sattributes - resourcedetection receivers: - otlp daemonSetUpdateStrategy: {} deploymentUpdateStrategy: {} env: - name: K8S_NODE_NAME valueFrom: fieldRef: fieldPath: spec.nodeName - name: K8S_NODE_IP valueFrom: fieldRef: fieldPath: status.hostIP - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: OPENOBSERVE_AUTH valueFrom: secretKeyRef: name: openobserve-collector-credentials key: authorization image: ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-contrib:0.127.0 ingress: route: {} managementState: managed mode: statefulset observability: metrics: enableMetrics: true podDisruptionBudget: maxUnavailable: 1 replicas: 1 resources: requests: cpu: 200m memory: 512Mi limits: cpu: 500m memory: 1Gi serviceAccount: openobserve-collector targetAllocator: enabled: true serviceAccount: openobserve-collector prometheusCR: enabled: true serviceMonitorSelector: {} podMonitorSelector: {} scrapeConfigSelector: {} upgradeStrategy: automatic