--- tags: Observability, open-telemetry --- # otel kubernetes install [官方安裝文件](https://opentelemetry.io/docs/collector/getting-started/) [官方的 k8s 安裝檔 (當下最新版本,會改變)](https://raw.githubusercontent.com/open-telemetry/opentelemetry-collector/main/examples/k8s/otel-config.yaml) ```yaml # REF: https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/examples/kubernetes/otel-collector.yaml # REF: https://raw.githubusercontent.com/open-telemetry/opentelemetry-collector/main/examples/k8s/otel-config.yaml # REF: https://juejin.cn/post/7128277655475978276 # REF: https://github.com/open-telemetry/opentelemetry-helm-charts/tree/main/charts/opentelemetry-collector --- apiVersion: v1 kind: ConfigMap metadata: name: otel-collector-config data: config.yaml: |- receivers: # https://github.com/open-telemetry/opentelemetry-collector/tree/main/receiver/otlpreceiver otlp: protocols: grpc: endpoint: 0.0.0.0:4317 http: endpoint: 0.0.0.0:4318 exporters: # https://github.com/open-telemetry/opentelemetry-collector/blob/main/exporter/loggingexporter/README.md logging: verbosity: normal # https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/exporter/lokiexporter/README.md loki: endpoint: http://loki-gateway.kube-monitor.svc.cluster.local/loki/api/v1/push tls: insecure: true # https://github.com/open-telemetry/opentelemetry-collector/blob/main/exporter/otlpexporter/README.md otlp/tempo: endpoint: http://tempo-distributor.kube-monitor.svc.cluster.local:4317 tls: insecure: true # https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/exporter/lokiexporter/README.md#labels processors: batch: # 把 OTLP 送出的 Attributes 設定為 Loki Label #attributes: # actions: # ##EFCore 語法轉出 - 尚未測試成功 # - action: insert # key: db_statement # from_attribute: db.statement # - action: insert # key: loki.attribute.labels # value: db_statement # ##EFCore 語法轉出 - 尚未測試成功 # 把 OTLP 送出的 Resource 設定為 Loki Label resource: attributes: - action: insert key: service_name from_attribute: service.name - action: insert key: service_env from_attribute: service.env - action: insert key: service_namespace from_attribute: service.namespace - action: insert key: service_version from_attribute: service.version - action: insert key: loki.resource.labels value: service_name, service_env, service_namespace, service_version service: pipelines: logs: receivers: [otlp] #processors: [resource, attributes] processors: [resource] exporters: [loki] traces: receivers: [otlp] processors: [] exporters: [otlp/tempo] --- apiVersion: apps/v1 kind: DaemonSet metadata: name: otel-collector labels: app: opentelemetry component: otel-collector spec: selector: matchLabels: app: opentelemetry component: otel-collector template: metadata: labels: app: opentelemetry component: otel-collector spec: containers: - name: otel-collector image: otel/opentelemetry-collector-contrib:0.70.0 resources: limits: cpu: 100m memory: 200Mi requests: cpu: 100m memory: 100Mi ports: - containerPort: 4318 # Default OpenTelemetry http receiver port. - containerPort: 4317 # Default OpenTelemetry receiver port. - containerPort: 8888 # Metrics. volumeMounts: - mountPath: /etc/otelcol-contrib/config.yaml name: data subPath: config.yaml readOnly: true terminationGracePeriodSeconds: 30 volumes: - name: data configMap: name: otel-collector-config --- apiVersion: v1 kind: Service metadata: name: otel-collector labels: app: opentelemetry component: otel-collector spec: ports: - name: otlp-grpc # Default endpoint for OpenTelemetry gRPC receiver. port: 4317 protocol: TCP targetPort: 4317 - name: otlp-http # Default endpoint for OpenTelemetry HTTP receiver. port: 4318 protocol: TCP targetPort: 4318 - name: metrics # Default endpoint for querying metrics. port: 8888 selector: component: otel-collector ```