Replace <DD_API_KEY> with your actual Datadog API key.
Configure the OTel Collector
OTel Operator를 배포한 후 Collector 배포를 트리거하는 OpenTelemetryCollector 리소스를 생성하세요.
node-collector.yaml 파일을 사용하여 OpenTelemetryCollector DaemonSet 구성을 지정합니다.
node-collector.yaml
apiVersion:opentelemetry.io/v1beta1kind:OpenTelemetryCollectormetadata:name:node-collectorspec:# Deploy 1 instance per node, that will collect telemetry from that node's podsmode:daemonsetcommand:['otel-agent','run']# Will no longer be necessary from 7.82.0 onwardsconfig:exporters:datadog:api:key:${env:DD_API_KEY}site:${env:DD_SITE}sending_queue:batch:flush_timeout:10sservice:telemetry:resource:k8s.cluster.name:${env:K8S_CLUSTER_NAME}env:- name:DD_API_KEYvalueFrom:secretKeyRef:key:api-keyname:datadog-apikey- name:DD_SITEvalueFrom:secretKeyRef:key:sitename:datadog-apikey- name:DD_OTELCOLLECTOR_CONVERTER_FEATURESvalue:datadog,pprof,zpages,prometheus,infraattributes- name:K8S_CLUSTER_NAMEvalue:<CLUSTER_NAME># vvv Will no longer be necessary from 7.83.0 onwards vvv- name:DD_OTEL_STANDALONEvalue:'true'# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^# vvv Will no longer be necessary from 7.82.0 onwards vvv- name:DD_OTELCOLLECTOR_ENABLEDvalue:'true'# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
<CLUSTER_NAME>을 클러스터 이름으로 바꿉니다.
원하는 모든 신호에 대해 OTLP 수신기와 Datadog 익스포터를 추가합니다. 애플리케이션 포드가 동일한 노드에서 실행 중인 Collector 인스턴스에 도달할 수 있도록 hostPort를 통해 노드에서 OTLP 포트를 게시합니다.
node-collector.yaml
# [...]spec:# [...]# Publish the OTLP ports on the node's network interfaceports:- name:otlp-grpcport:4317protocol:TCPhostPort:4317- name:otlp-httpport:4318protocol:TCPhostPort:4318config:receivers:otlp:protocols:grpc:endpoint:0.0.0.0:4317http:endpoint:0.0.0.0:4318# [...]service:# [...]pipelines:logs:receivers:['otlp']exporters:['datadog']metrics:receivers:['otlp']exporters:['datadog']traces:receivers:['otlp']exporters:['datadog']
(선택 사항) 추가 기능을 활성화합니다.
이 기능을 활성화하면 추가 비용이 발생할 수 있습니다. 진행하기 전에 가격 페이지를 검토하고 고객 성공 관리자와 상담하세요.
node-collector.yaml
spec:config:receivers:host_metrics:collection_interval:15sscrapers:cpu:{}load:{}memory:{}network:{}disk:{}kubelet_stats:auth_type:serviceAccountcollection_interval:15sendpoint:${env:K8S_NODE_NAME}:10250node:${env:K8S_NODE_NAME}metric_groups:- pod- container- volumeprocessors:infraattributes:cardinality:2resource/add-cluster-name:attributes:- key:k8s.cluster.namevalue:${env:K8S_CLUSTER_NAME}action:upsertconnectors:datadog/connector:traces:compute_top_level_by_span_kind:truepeer_tags_aggregation:truecompute_stats_by_span_kind:trueextensions:health_check:endpoint:"${env:K8S_POD_IP}:13133"# [...]service:# [...]extensions:['health_check']pipelines:logs:# [...]processors:['resource/add-cluster-name','infraattributes']metrics:receivers:['host_metrics','otlp','kubelet_stats','datadog/connector']processors:['resource/add-cluster-name','infraattributes']# [...]traces:# [...]processors:['resource/add-cluster-name','infraattributes']exporters:['datadog','datadog/connector']env:# [...]- name:K8S_POD_IPvalueFrom:fieldRef:apiVersion:v1fieldPath:status.podIP# K8S_NODE_NAME is added automatically by the operator
(선택 사항) 노드의 파일 시스템에서 컨테이너 로그를 수집합니다.
로그 수집을 활성화하면 추가 비용이 발생할 수 있습니다. 진행하기 전에 가격 페이지를 검토하고 고객 성공 관리자와 상담하세요.
filelog 수신기는 노드에서 컨테이너 로그를 읽습니다. Operator가 호스트 경로를 자동으로 마운팅하지 않으므로 로그 디렉터리를 읽기 전용 볼륨으로 추가합니다.
node-collector.yaml
spec:config:receivers:filelog:include:- /var/log/pods/*/*/*.log# Exclude the Collector's own logs to avoid a feedback loopexclude:- /var/log/pods/*_node-collector-collector-*_*/otc-container/*.logstart_at:endinclude_file_path:trueinclude_file_name:falseretry_on_failure:enabled:trueoperators:- id:container-parsertype:containermax_log_size:102400# [...]service:# [...]pipelines:logs:receivers:['otlp','filelog']# [...]# Mount the node's log directories into the Collector pod (read-only)volumes:- name:varlogpodshostPath:path:/var/log/pods- name:varlibdockercontainershostPath:path:/var/lib/docker/containersvolumeMounts:- name:varlogpodsmountPath:/var/log/podsreadOnly:true- name:varlibdockercontainersmountPath:/var/lib/docker/containersreadOnly:true
완성된 node-collector.yaml 파일
node-collector.yaml 파일은 다음과 유사해야 합니다.
node-collector.yaml
apiVersion:opentelemetry.io/v1beta1kind:OpenTelemetryCollectormetadata:name:node-collectorspec:# Deploy 1 instance per node, that will collect telemetry from that node's podsmode:daemonsetcommand:['otel-agent','run']# Will no longer be necessary from 7.82.0 onwards# Publish the OTLP ports on the node's network interfaceports:- name:otlp-grpcport:4317protocol:TCPhostPort:4317- name:otlp-httpport:4318protocol:TCPhostPort:4318config:receivers:otlp:protocols:grpc:endpoint:0.0.0.0:4317http:endpoint:0.0.0.0:4318host_metrics:collection_interval:15sscrapers:cpu:{}load:{}memory:{}network:{}disk:{}kubelet_stats:auth_type:serviceAccountcollection_interval:15sendpoint:${env:K8S_NODE_NAME}:10250node:${env:K8S_NODE_NAME}metric_groups:- pod- container- volumefilelog:include:- /var/log/pods/*/*/*.logexclude:- /var/log/pods/*_node-collector-collector-*_*/otc-container/*.logstart_at:endinclude_file_path:trueinclude_file_name:falseretry_on_failure:enabled:trueoperators:- id:container-parsertype:containermax_log_size:102400processors:infraattributes:cardinality:2resource/add-cluster-name:attributes:- key:k8s.cluster.namevalue:${env:K8S_CLUSTER_NAME}action:upsertconnectors:datadog/connector:traces:compute_top_level_by_span_kind:truepeer_tags_aggregation:truecompute_stats_by_span_kind:trueexporters:datadog:api:key:${env:DD_API_KEY}site:${env:DD_SITE}sending_queue:batch:flush_timeout:10sextensions:health_check:endpoint:"${env:K8S_POD_IP}:13133"service:telemetry:resource:k8s.cluster.name:${env:K8S_CLUSTER_NAME}extensions:['health_check']pipelines:logs:receivers:['otlp','filelog']processors:['resource/add-cluster-name','infraattributes']exporters:['datadog']metrics:receivers:['host_metrics','otlp','kubelet_stats','datadog/connector']processors:['resource/add-cluster-name','infraattributes']exporters:['datadog']traces:receivers:['otlp']processors:['resource/add-cluster-name','infraattributes']exporters:['datadog','datadog/connector']env:- name:DD_API_KEYvalueFrom:secretKeyRef:key:api-keyname:datadog-apikey- name:DD_SITEvalueFrom:secretKeyRef:key:sitename:datadog-apikey- name:DD_OTELCOLLECTOR_CONVERTER_FEATURESvalue:datadog,pprof,zpages,prometheus,infraattributes- name:K8S_CLUSTER_NAMEvalue:<CLUSTER_NAME>- name:K8S_POD_IPvalueFrom:fieldRef:apiVersion:v1fieldPath:status.podIP# K8S_NODE_NAME is added automatically by the operator# vvv Will no longer be necessary from 7.83.0 onwards vvv- name:DD_OTEL_STANDALONEvalue:'true'# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^# vvv Will no longer be necessary from 7.82.0 onwards vvv- name:DD_OTELCOLLECTOR_ENABLEDvalue:'true'# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^# Mount the node's log directories for the filelog receiver (read-only)volumes:- name:varlogpodshostPath:path:/var/log/pods- name:varlibdockercontainershostPath:path:/var/lib/docker/containersvolumeMounts:- name:varlogpodsmountPath:/var/log/podsreadOnly:true- name:varlibdockercontainersmountPath:/var/lib/docker/containersreadOnly:true
mode:daemonsetimage:repository:datadog/ddot-collectortag:7.83.1ports:jaeger-compact:enabled:falsejaeger-grpc:enabled:falsejaeger-thrift:enabled:falsezipkin:enabled:false# Can be removed from 7.82.0 onwardscommand:name:opt/datadog-agent/embedded/bin/otel-agent
FED의 경우 tag: 7.83.1-fips 설정을 통해 FIPS 규정 준수 DDOT 이미지를 사용합니다. FIPS 규정 준수를 참조하세요.
Collector Helm 차트는 기본적으로 각 노드에서 OTLP 포트를 게시하므로(hostPort: 4317 - gRPC, hostPort: 4318 - HTTP) 애플리케이션 포드가 동일한 노드에서 실행 중인 Collector 인스턴스에 도달할 수 있습니다. 애플리케이션 구성을 참조하세요.
Datadog 익스포터 및 API 키 시크릿을 구성합니다.
node-collector-values.yaml
config:exporters:datadog:api:key:${env:DD_API_KEY}site:${env:DD_SITE}sending_queue:batch:flush_timeout:10sextraEnvs:- name:DD_API_KEYvalueFrom:secretKeyRef:key:api-keyname:datadog-apikey- name:DD_SITEvalueFrom:secretKeyRef:key:sitename:datadog-apikey- name:DD_OTELCOLLECTOR_CONVERTER_FEATURESvalue:datadog,pprof,zpages,prometheus,infraattributes- name:K8S_CLUSTER_NAMEvalue:<CLUSTER_NAME># vvv Will no longer be necessary from 7.83.0 onwards vvv- name:DD_OTEL_STANDALONEvalue:'true'# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^# vvv Will no longer be necessary from 7.82.0 onwards vvv- name:DD_OTELCOLLECTOR_ENABLEDvalue:'true'# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
mode:daemonset# vvv To be removed from 7.82.0 onwards vvvcommand:name:opt/datadog-agent/embedded/bin/otel-agent# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^image:repository:datadog/ddot-collectortag:7.83.1presets:hostMetrics:# Add an hostmetrics receiver to the metrics pipelineenabled:truekubeletMetrics:# Add a kubeletstats receiver to the metrics pipelineenabled:truelogsCollection:# Add a filelog receiver to the logs pipelineenabled:trueincludeCollectorLogs:falseconfig:connectors:datadog/connector:traces:compute_top_level_by_span_kind:truepeer_tags_aggregation:truecompute_stats_by_span_kind:trueexporters:datadog:api:key:${env:DD_API_KEY}site:${env:DD_SITE}sending_queue:batch:flush_timeout:10sprocessors:infraattributes:cardinality:2resource/add-cluster-name:attributes:- key:k8s.cluster.namevalue:${env:K8S_CLUSTER_NAME}action:upsertreceivers:otlp:protocols:grpc:endpoint:0.0.0.0:4317http:endpoint:0.0.0.0:4318service:extensions:- health_checkpipelines:logs:receivers:- otlpprocessors:- resource/add-cluster-name- infraattributesexporters:- datadogmetrics:receivers:- otlp- datadog/connectorprocessors:- resource/add-cluster-name- infraattributesexporters:- datadogtraces:receivers:- otlpprocessors:- resource/add-cluster-name- infraattributesexporters:- datadog- datadog/connectortelemetry:resource:k8s.cluster.name:${env:K8S_CLUSTER_NAME}extraEnvs:- name:DD_API_KEYvalueFrom:secretKeyRef:key:api-keyname:datadog-apikey- name:DD_SITEvalueFrom:secretKeyRef:key:sitename:datadog-apikey- name:DD_OTELCOLLECTOR_CONVERTER_FEATURESvalue:datadog,pprof,zpages,prometheus,infraattributes- name:K8S_CLUSTER_NAMEvalue:<CLUSTER_NAME># vvv Will no longer be necessary from 7.83.0 onwards vvv- name:DD_OTEL_STANDALONEvalue:'true'# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^# vvv Will no longer be necessary from 7.82.0 onwards vvv- name:DD_OTELCOLLECTOR_ENABLEDvalue:'true'# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ports:jaeger-compact:enabled:falsejaeger-grpc:enabled:falsejaeger-thrift:enabled:falsezipkin:enabled:false
Collector 배포
node-collector.yaml 파일을 적용하여 OpenTelemetryCollector 리소스를 생성하세요. Operator는 Collector를 DaemonSet로 배포하여 노드당 하나의 인스턴스를 실행합니다.
이후 변경 사항을 적용하려면 helm upgrade node-collector open-telemetry/opentelemetry-collector -f node-collector-values.yaml을 실행하세요.
DDOT와 함께 코어 Datadog Agent 설치
독립형 DDOT Collector와 동일한 노드에서 코어 Datadog Agent를 실행하려는 경우(예: DDOT가 OTLP 수집을 처리하는 동안 코어 Agent를 통해 인프라 메트릭, APM 또는 로그를 수집하려는 경우) Datadog Operator를 사용하여 별도로 설치할 수 있습니다.
기본적으로 Datadog Operator Helm 차트는 DatadogAgent 리소스를 Operator가 설치된 네임스페이스에서만 감시합니다(watchNamespaces: []). 만약 DatadogAgent 리소스가 Operator와 다른 네임스페이스에 있는 경우(예: OpenTelemetryCollector 리소스의 네임스페이스와 분리하려는 경우), watchNamespaces 를 DatadogAgent 리소스가 생성된 네임스페이스를 포함하도록 설정하세요.
애플리케이션 컨테이너는 동일한 노드에서 실행 중인 DDOT Collector로 데이터를 전송해야 합니다. Collector가 hostPort를 통해 노드에서 OTLP 포트를 게시하므로 애플리케이션은 노드의 IP 주소(status.hostIP)를 통해 로컬 Collector에 도달할 수 있습니다.
OTEL_EXPORTER_OTLP_ENDPOINT 환경 변수가 아직 설정되어 있지 않은 경우 애플리케이션의 Deployment 매니페스트 파일에 추가합니다.