5.2. 분산 추적 데이터 수집 구성 및 배포
Red Hat OpenShift distributed tracing data collection Operator는 분산 추적 데이터 수집 리소스를 생성하고 배포할 때 사용할 아키텍처 및 구성 설정을 정의하는 CRD(사용자 정의 리소스 정의) 파일을 사용합니다. 기본 구성을 설치하거나 파일을 수정할 수 있습니다.
5.2.1. OpenTelemetry 수집기 구성 옵션
OpenTelemetry Collector는 Telemetry 데이터에 액세스하는 세 가지 구성 요소로 구성됩니다.
- 수신자
- 내보내기 또는 풀 기반이 될 수 있는 수신자는 데이터가 수집기로 들어오는 방법입니다. 일반적으로 수신자는 지정된 형식으로 데이터를 수락하고 내부 형식으로 변환한 다음 해당 파이프라인에 정의된 프로세서 및 내보내기에 전달합니다. 기본적으로 수신자는 구성되지 않습니다. 하나 이상의 수신자를 구성해야 합니다. 수신자는 하나 이상의 데이터 소스를 지원할 수 있습니다.
- 프로세서
- 선택 사항: 프로세서가 수신되고 내보낼 때까지 데이터를 통해 실행됩니다. 기본적으로 프로세서는 사용할 수 없습니다. 모든 데이터 소스에 대해 프로세서를 활성화해야 합니다. 일부 프로세서는 모든 데이터 소스를 지원하는 것은 아닙니다. 데이터 소스에 따라 여러 프로세서가 활성화될 수 있습니다. 프로세서의 순서가 중요합니다.
- 내보내기
- 푸시 또는 풀 기반이 될 수 있는 내보내기는 하나 이상의 백엔드 또는 대상에 데이터를 보내는 방법입니다. 기본적으로 내보내기는 구성되지 않습니다. 하나 이상의 내보내기를 구성해야 합니다. 내보내기는 하나 이상의 데이터 소스를 지원할 수 있습니다. 내보내기는 기본 설정과 함께 사용할 수 있지만 대상 및 보안 설정을 지정하려면 많은 내보내기 구성이 필요합니다.
사용자 정의 리소스 YAML 파일에서 구성 요소의 여러 인스턴스를 정의할 수 있습니다. 구성하는 경우 YAML 파일의 spec.config.service
섹션에 정의된 파이프라인을 통해 이러한 구성 요소를 활성화해야 합니다. 필요한 구성 요소만 활성화하는 것이 좋습니다.
OpenTelemetry Collector 사용자 정의 리소스 파일의 예
apiVersion: opentelemetry.io/v1alpha1
kind: OpenTelemetryCollector
metadata:
name: cluster-collector
namespace: tracing-system
spec:
mode: deployment
ports:
- name: promexporter
port: 8889
protocol: TCP
config: |
receivers:
otlp:
protocols:
grpc:
http:
processors:
exporters:
jaeger:
endpoint: jaeger-production-collector-headless.tracing-system.svc:14250
tls:
ca_file: "/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt"
prometheus:
endpoint: 0.0.0.0:8889
resource_to_telemetry_conversion:
enabled: true # by default resource attributes are dropped
service: 1
pipelines:
traces:
receivers: [otlp]
processors: []
exporters: [jaeger]
metrics:
receivers: [otlp]
processors: []
exporters: [prometheus]
- 1
- 구성 요소가 구성되었지만
service
섹션에 정의되지 않은 경우 구성 요소가 활성화되지 않습니다.
매개변수 | 설명 | 값 | 기본값 |
---|---|---|---|
receivers: | 수신자는 데이터가 수집기로 들어오는 방법입니다. 기본적으로 수신자는 구성되지 않습니다. 구성을 유효한 것으로 간주하려면 하나 이상의 활성화된 수신자가 있어야 합니다. 수신자는 파이프라인에 추가하여 활성화됩니다. |
| 없음 |
processors: | 프로세서가 수신되고 내보낼 때까지 데이터를 통해 실행됩니다. 기본적으로 프로세서는 사용할 수 없습니다. | 없음 | |
exporters: | 내보내기는 하나 이상의 백엔드 또는 대상에 데이터를 보냅니다. 기본적으로 내보내기는 구성되지 않습니다. 구성을 유효한 것으로 간주하려면 하나 이상의 내보내기가 활성화되어 있어야 합니다. 내보내기를 파이프라인에 추가하여 사용할 수 있습니다. 내보내기는 기본 설정과 함께 사용할 수 있지만 대상 및 보안 설정을 지정하려면 많은 구성이 필요합니다. |
| 없음 |
service: pipelines: |
구성 요소는 | ||
service: pipelines: traces: receivers: |
| 없음 | |
service: pipelines: traces: processors: |
| 없음 | |
service: pipelines: traces: exporters: |
| 없음 | |
service: pipelines: metrics: receivers: |
| 없음 | |
service: pipelines: metrics: processors: |
| 없음 | |
service: pipelines: metrics: exporters: |
| 없음 |
5.2.1.1. OpenTelemetry 수집기 구성 요소
5.2.1.1.1. 수신자
5.2.1.1.1.1. OTLP 수신기
OTLP 수신기는 OTLP(OpenTelemetry Protocol)를 사용하여 데이터를 수집합니다.
- 지원 수준: 기술 프리뷰
- 지원되는 신호: 추적, 메트릭
활성화된 OTLP 수신자가 있는 OpenTelemetry 수집기 사용자 정의 리소스
config: | receivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 1 tls: 2 ca_file: ca.pem cert_file: cert.pem key_file: key.pem client_ca_file: client.pem 3 reload_interval: 1h 4 http: endpoint: 0.0.0.0:4318 5 tls: 6 service: pipelines: traces: receivers: [otlp] metrics: receivers: [otlp]
- 1
- OTLP gRPC 끝점입니다. 생략하면 기본값
0.0.0.0:4317
이 사용됩니다. - 2
- 서버 측 TLS 구성입니다. TLS 인증서의 경로를 정의합니다. 생략하면 TLS가 비활성화됩니다.
- 3
- 서버가 클라이언트 인증서를 확인하는 TLS 인증서의 경로입니다. 이렇게 하면
TLSConfig
에서ClientCA
및ClientAuth
의 값이RequireAndVerifyClientCert
로 설정됩니다. 자세한 내용은 Golang TLS 패키지 구성을 참조하십시오. - 4
- 인증서를 다시 로드하는 시간 간격을 지정합니다. 값을 설정하지 않으면 인증서가 다시 로드되지 않습니다.
RELOAD_
INTERVAL은ns
,us
(또는 Cryostats ),ms
,s
,m
,h
와 같은 유효한 시간 단위를 포함하는 문자열을 허용합니다. - 5
- OTLP HTTP 끝점입니다. 기본값은
0.0.0.0:4318
입니다. - 6
- 서버 측 TLS 구성입니다. 자세한 내용은
grpc
프로토콜 구성 섹션을 참조하십시오.
5.2.1.1.1.2. Jaeger 수신자
Jaeger 수신자는 Jaeger 형식으로 데이터를 수집합니다.
- 지원 수준: 기술 프리뷰
- 지원되는 신호: 추적
활성화된 Jaeger 수신자가 있는 OpenTelemetry 수집기 사용자 정의 리소스
config: | receivers: jaeger: protocols: grpc: endpoint: 0.0.0.0:14250 1 thrift_http: endpoint: 0.0.0.0:14268 2 thrift_compact: endpoint: 0.0.0.0:6831 3 thrift_binary: endpoint: 0.0.0.0:6832 4 tls: 5 service: pipelines: traces: receivers: [jaeger]
5.2.1.1.1.3. Zipkin Receiver
Zipkin 수신기는 Zipkin v1 및 v2 형식으로 데이터를 수집합니다.
- 지원 수준: 기술 프리뷰
- 지원되는 신호: 추적
Zipkin receiver가 활성화된 OpenTelemetry 수집기 사용자 정의 리소스
config: | receivers: zipkin: endpoint: 0.0.0.0:9411 1 tls: 2 service: pipelines: traces: receivers: [zipkin]
5.2.1.1.2. 프로세서
5.2.1.1.2.1. 일괄 프로세서
배치 프로세서는 Telemetry 정보를 전송하는 데 필요한 발신 연결 수를 줄이기 위해 데이터를 배치합니다.
- 지원 수준: 기술 프리뷰
- 지원되는 신호: 추적, 메트릭
배치 프로세서를 사용할 때 OpenTelemetry 수집기 사용자 정의 리소스의 예
config: | processor: batch: timeout: 5s send_batch_max_size: 10000 service: pipelines: traces: processors: [batch] metrics: processors: [batch]
매개변수 | 설명 | 기본값 |
---|---|---|
| 크기와 관계없이 특정 기간 후에 일괄 처리를 보냅니다. | 200ms |
| 지정된 수의 범위 또는 메트릭 후에 원격 분석 데이터의 배치를 보냅니다. | 8192 |
|
일괄 처리의 최대 허용 크기입니다. | 0 |
|
활성화하면 | [] |
|
| 1000 |
5.2.1.1.2.2. 메모리 제한 프로세서
메모리 제한 프로세서는 주기적으로 수집기의 메모리 사용량을 확인하고 소프트 메모리 제한에 도달할 때 데이터 처리를 일시 중지합니다. 일반적으로 수신자인 이전 구성 요소는 동일한 데이터 전송을 다시 시도해야 하며 들어오는 데이터에 백압을 적용할 수 있습니다. 메모리 사용량이 하드 제한을 초과하면 메모리 제한 프로세서가 가비지 수집을 강제 실행합니다.
- 지원 수준: 정식 출시일 (GA)
- 지원되는 신호: 추적, 메트릭, 로그
메모리 제한 프로세서를 사용할 때 OpenTelemetry 수집기 사용자 정의 리소스의 예
config: | processor: memory_limiter: check_interval: 1s limit_mib: 4000 spike_limit_mib: 800 service: pipelines: traces: processors: [batch] metrics: processors: [batch]
매개변수 | 설명 | 기본값 |
---|---|---|
|
메모리 사용량 측정 사이의 시간입니다. 최적의 값은 1s입니다. spiky 트래픽 패턴의 경우 |
|
| 힙에 할당된 MiB 단위의 최대 메모리 양인 하드 제한입니다. 일반적으로 OpenTelemetry 수집기의 총 메모리 사용량은 이 값보다 약 50MiB입니다. |
|
|
메모리 사용량의 최대 급증(MiB)입니다. 최적의 값은 |
|
|
|
|
|
|
|
5.2.1.1.2.3. 리소스 탐지 프로세서
리소스 탐지 프로세서는 OpenTelemetry의 리소스 의미 체계 표준과 일치하여 호스트 리소스 세부 정보를 식별하도록 설계되었습니다. 감지된 이 정보를 사용하여 원격 분석 데이터에서 리소스 값을 추가하거나 교체할 수 있습니다.
- 지원 수준: 기술 프리뷰
- 지원되는 신호: 추적, 메트릭
리소스 탐지 프로세서에 필요한 OpenShift Container Platform 권한
kind: ClusterRole metadata: name: otel-collector rules: - apiGroups: ["config.openshift.io"] resources: ["infrastructures", "infrastructures/status"] verbs: ["get", "watch", "list"]
리소스 탐지 프로세서를 사용한 OpenTelemetry 수집기
config: | processor: resourcedetection: detectors: [openshift] override: true service: pipelines: traces: processors: [resourcedetection] metrics: processors: [resourcedetection]
5.2.1.1.3. 내보내기
5.2.1.1.3.1. OTLP 내보내기
OTLP gRPC 내보내기는 OTLP(OpenTelemetry 프로토콜)를 사용하여 데이터를 내보냅니다.
- 지원 수준: 기술 프리뷰
- 지원되는 신호: 추적, 메트릭
활성화된 OTLP 내보내기가 활성화된 OpenTelemetry 수집기 사용자 정의 리소스
config: | exporters: otlp: endpoint: tempo-ingester:4317 1 tls: 2 ca_file: ca.pem cert_file: cert.pem key_file: key.pem insecure: false 3 insecure_skip_verify: false 4 reload_interval: 1h 5 server_name_override: <name> 6 headers: 7 X-Scope-OrgID: "dev" service: pipelines: traces: exporters: [otlp] metrics: exporters: [otlp]
- 1
- OTLP gRPC 끝점입니다.
https://
스키마를 사용하는 경우 클라이언트 전송 보안이 활성화되고tls
의비보안
설정을 덮어씁니다. - 2
- 클라이언트 측 TLS 구성입니다. TLS 인증서의 경로를 정의합니다.
- 3
true
로 설정된 경우 클라이언트 전송 보안을 비활성화합니다. 기본값은 기본적으로false
입니다.- 4
true
로 설정된 경우 인증서 확인을 건너뜁니다. 기본값은false
입니다.- 5
- 인증서를 다시 로드하는 시간 간격을 지정합니다. 값을 설정하지 않으면 인증서가 다시 로드되지 않습니다.
RELOAD_
INTERVAL은ns
,us
(또는 Cryostats ),ms
,s
,m
,h
와 같은 유효한 시간 단위를 포함하는 문자열을 허용합니다. - 6
- 요청의 권한 헤더 필드와 같은 권한의 가상 호스트 이름을 재정의합니다. 테스트에 이 값을 사용할 수 있습니다.
- 7
- 설정된 연결 중에 수행되는 모든 요청에 대해 헤더가 전송됩니다.
5.2.1.1.3.2. OTLP HTTP 내보내기
OTLP HTTP 내보내기는 OTLP(OpenTelemetry 프로토콜)를 사용하여 데이터를 내보냅니다.
- 지원 수준: 기술 프리뷰
- 지원되는 신호: 추적, 메트릭
활성화된 OTLP 내보내기가 활성화된 OpenTelemetry 수집기 사용자 정의 리소스
config: | exporters: otlphttp: endpoint: http://tempo-ingester:4318 1 tls: 2 headers: 3 X-Scope-OrgID: "dev" service: pipelines: traces: exporters: [otlphttp] metrics: expoters: [otlphttp]
5.2.1.1.3.3. Jaeger 내보내기
Jaeger 내보내기는 gRPC를 통해 Jaeger 프로토 형식을 사용하여 데이터를 내보냅니다.
- 지원 수준: 기술 프리뷰
- 지원되는 신호: 추적
활성화된 Jaeger 내보내기가 활성화된 OpenTelemetry 수집기 사용자 정의 리소스
config: | exporters: jaeger: endpoint: jaeger-all-in-one:14250 1 tls: 2 service: pipelines: traces: exporters: [jaeger]
5.2.1.1.3.4. 로깅 내보내기
로깅 내보내기는 데이터를 표준 출력에 출력합니다.
- 지원 수준: 기술 프리뷰
- 지원되는 신호: 추적, 메트릭
활성화된 로깅 내보내기가 있는 OpenTelemetry 수집기 사용자 정의 리소스
config: |
exporters:
logging:
verbosity: detailed 1
service:
pipelines:
traces:
exporters: [logging]
metrics:
exporters: [logging]
- 1
- 로깅 내보내기 세부 정보 표시:
세부
정보 또는일반
또는기본
.세부
정보로 설정하면 파이프라인 데이터가 세부적으로 기록됩니다. 기본값은Normal입니다
.
5.2.1.1.3.5. Prometheus 내보내기
Prometheus 내보내기는 Prometheus 또는 OpenMetrics 형식을 사용하여 데이터를 내보냅니다.
- 지원 수준: 기술 프리뷰
- 지원되는 신호: 메트릭
활성화된 Prometheus 내보내기가 포함된 OpenTelemetry 수집기 사용자 정의 리소스
ports: - name: promexporter 1 port: 8889 protocol: TCP config: | exporters: prometheus: endpoint: 0.0.0.0:8889 2 tls: 3 ca_file: ca.pem cert_file: cert.pem key_file: key.pem namespace: prefix 4 const_labels: 5 label1: value1 enable_open_metrics: true 6 resource_to_telemetry_conversion: 7 enabled: true metric_expiration: 180m 8 service: pipelines: metrics: exporters: [prometheus]
- 1
- 수집기 Pod 및 서비스에서 Prometheus 포트를 노출합니다.
ServiceMonitor
또는PodMonitor
사용자 정의 리소스의 포트 이름을 사용하여 Prometheus에서 메트릭 스크랩을 활성화할 수 있습니다. - 2
- 지표가 노출되는 네트워크 끝점입니다.
- 3
- 서버 측 TLS 구성입니다. TLS 인증서의 경로를 정의합니다.
- 4
- 설정된 경우 제공된 값 아래에 지표를 내보냅니다. 기본값이 없습니다.
- 5
- 내보낸 모든 메트릭에 적용되는 키-값 쌍 레이블입니다. 기본값이 없습니다.
- 6
true
인 경우 OpenMetrics 형식을 사용하여 메트릭을 내보냅니다. exemp declarations는 OpenMetrics 형식으로만 내보내지며 히스토그램 및 단조적 합계 메트릭 (예:counter
)에만 사용할 수 있습니다. 기본적으로 비활성되어 있습니다.- 7
enabled
가true
이면 모든 리소스 속성이 기본적으로 지표 레이블로 변환됩니다. 기본적으로 비활성되어 있습니다.- 8
- 업데이트 없이 메트릭이 노출되는 기간을 정의합니다. 기본값은
5m
입니다.
5.2.2. 모니터링 스택에 메트릭 전송
OpenTelemetry 수집기 지표 끝점을 스크랩하고 스크랩 중에 모니터링 스택이 추가한 중복 레이블을 제거하도록 모니터링 스택을 구성할 수 있습니다.
수집기 메트릭을 스크랩하도록 모니터링 스택을 구성하는 샘플 PodMonitor
CR(사용자 정의 리소스)
apiVersion: monitoring.coreos.com/v1 kind: PodMonitor metadata: name: otel-collector spec: selector: matchLabels: app.kubernetes.io/name: otel-collector podMetricsEndpoints: - port: metrics 1 - port: promexporter 2 relabelings: - action: labeldrop regex: pod - action: labeldrop regex: container - action: labeldrop regex: endpoint metricRelabelings: - action: labeldrop regex: instance - action: labeldrop regex: job