4장. 수집기 구성
4.1. 수집기 구성 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat build of OpenTelemetry Operator는 OpenTelemetry 리소스의 Red Hat 빌드를 생성하고 배포할 때 사용할 아키텍처 및 구성 설정을 정의하는 CRD(사용자 정의 리소스 정의) 파일을 사용합니다. 기본 구성을 설치하거나 파일을 수정할 수 있습니다.
4.1.1. 배포 모드 링크 복사링크가 클립보드에 복사되었습니다!
OpenTelemetryCollector 사용자 정의 리소스를 사용하면 OpenTelemetry Collector에 대해 다음 배포 모드 중 하나를 지정할 수 있습니다.
- Deployment
- 기본값.
- StatefulSet
- 예를 들어 수집기 파일 저장 확장 프로그램이나 테일 샘플링 프로세서를 사용할 때와 같이 상태 저장 워크로드를 실행해야 하는 경우 StatefulSet 배포 모드를 사용하세요.
- DaemonSet
- 예를 들어, 컨테이너 로그를 읽기 위해 Collector의 Filelog Receiver를 사용하여 모든 노드에서 원격 측정 데이터를 스크래핑해야 하는 경우 DaemonSet 배포 모드를 사용하세요.
- 사이드카
컨테이너 내부의 로그 파일에 액세스해야 하는 경우 Collector를 사이드카로 주입하고 Collector의 Filelog Receiver와
emptyDir과 같은 공유 볼륨을 사용합니다.로컬호스트를통해 원격 측정 데이터를 전송하도록 애플리케이션을 구성해야 하는 경우, Collector를 사이드카로 주입하고 암호화되고 인증된 연결을 통해 원격 측정 데이터를 외부 서비스로 전달하도록 Collector를 설정합니다. 사이드카로 주입되면 컬렉터는 애플리케이션과 동일한 포드에서 실행됩니다.참고사이드카 배포 모드를 선택하는 경우
OpenTelemetryCollector사용자 지정 리소스 CR에서spec.mode: sidecar필드를 설정하는 것 외에도sidecar.opentelemetry.io/inject주석을 Pod 주석이나 네임스페이스 주석으로 설정해야 합니다. 이 주석을 포드와 네임스페이스 모두에 설정하는 경우, 포드 주석이false또는OpenTelemetryCollectorCR 이름으로 설정된 경우 해당 주석이 우선합니다.포드 주석으로서
sidecar.opentelemetry.io/inject주석은 여러 값을 지원합니다.apiVersion: v1 kind: Pod metadata: ... annotations: sidecar.opentelemetry.io/inject: "<supported_value>"1 ...- 1
- 지원되는 값:
false- 수집기를 주입하지 않습니다. 주석이 없으면 이것이 기본값입니다.
true-
동일한 네임스페이스에 있는
OpenTelemetryCollectorCR의 구성을 Collector에 주입합니다. <collector_name>-
동일한 네임스페이스에 있는
<collector_name>OpenTelemetryCollectorCR의 구성을 Collector에 주입합니다. <namespace>/<collector_name>-
<네임스페이스>네임스페이스에<collector_name>OpenTelemetryCollectorCR 구성을 Collector에 주입합니다.
4.1.2. OpenTelemetry 수집기 구성 옵션 링크 복사링크가 클립보드에 복사되었습니다!
OpenTelemetry Collector는 Telemetry 데이터에 액세스하는 5가지 유형의 구성 요소로 구성됩니다.
- 수신자
- 프로세서
- 내보내기
- 커넥터
- 확장
사용자 정의 리소스 YAML 파일에서 구성 요소의 여러 인스턴스를 정의할 수 있습니다. 구성하는 경우 YAML 파일의 spec.config.service 섹션에 정의된 파이프라인을 통해 이러한 구성 요소를 활성화해야 합니다. 필요한 구성 요소만 활성화하는 것이 좋습니다.
OpenTelemetry Collector 사용자 정의 리소스 파일의 예
apiVersion: opentelemetry.io/v1beta1
kind: OpenTelemetryCollector
metadata:
name: cluster-collector
namespace: tracing-system
spec:
mode: deployment
observability:
metrics:
enableMetrics: true
config:
receivers:
otlp:
protocols:
grpc: {}
http: {}
processors: {}
exporters:
otlp:
endpoint: otel-collector-headless.tracing-system.svc:4317
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:
pipelines:
traces:
receivers: [otlp]
processors: []
exporters: [otlp]
metrics:
receivers: [otlp]
processors: []
exporters: [prometheus]
- 1
- 구성 요소가 구성되었지만
service섹션에 정의되지 않은 경우 구성 요소가 활성화되지 않습니다.
| 매개변수 | 설명 | 값 | Default |
|---|---|---|---|
| 수신자는 데이터가 수집기로 들어오는 방법입니다. 기본적으로 수신자는 설정되어 있지 않습니다. 구성이 유효한 것으로 간주되려면 하나 이상의 사용 가능한 수신자가 있어야 합니다. 파이프라인에 추가되면 수신자가 활성화됩니다. |
| 없음 |
| 프로세서는 내보낸 데이터를 통해 실행됩니다. 기본적으로 프로세서는 사용할 수 없습니다. |
| 없음 |
| 내보내기는 하나 이상의 백엔드 또는 대상에 데이터를 보냅니다. 기본적으로 내보내기는 구성되지 않습니다. 구성이 유효한 것으로 간주되려면 하나 이상의 활성화된 내보내기가 있어야 합니다. 파이프라인에 내보내기를 추가하여 사용할 수 있습니다. 내보내기는 기본 설정과 함께 사용할 수 있지만 대상 및 보안 설정을 지정하려면 많은 구성이 필요합니다. |
| 없음 |
| Connectors는 데이터를 end-of-pipeline 내보내기 도구로 사용하고 데이터를 초기-op-pipeline 수신자로 내보내 파이프라인 쌍을 결합합니다. 커넥터를 사용하여 소비된 데이터를 요약, 복제 또는 라우팅할 수 있습니다. |
| 없음 |
| Telemetry 데이터를 처리하지 않는 작업의 선택적 구성 요소입니다. |
| 없음 |
|
구성 요소는 | ||
|
| 없음 | |
|
| 없음 | |
|
| 없음 | |
|
| 없음 | |
|
| 없음 | |
|
| 없음 |
4.1.3. 프로파일 신호 링크 복사링크가 클립보드에 복사되었습니다!
Profile 신호는 코드 실행과 리소스 소비를 관찰하기 위한 새로운 원격 측정 데이터 형식입니다.
프로필 신호는 기술 미리보기 기능일 뿐입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat Technology Preview 기능의 지원 범위에 대한 자세한 내용은 다음 링크를 참조하세요.
Profile 신호를 사용하면 비효율적인 코드를 특정 함수까지 정확하게 찾아낼 수 있습니다. 이러한 프로파일링을 사용하면 특정 코드 줄까지 성능 병목 현상과 리소스 비효율성을 정확하게 파악할 수 있습니다. 이러한 고충실도 프로파일 데이터를 추적, 측정항목 및 로그와 연관시켜 프로덕션 환경에서 포괄적인 성능 분석과 타깃형 코드 최적화가 가능합니다.
프로파일링은 애플리케이션이나 운영 체제를 타겟으로 할 수 있습니다.
- 프로파일링을 사용하여 애플리케이션을 관찰하면 개발자가 코드 성능을 검증하고, 회귀를 방지하고, 메모리 및 CPU 사용과 같은 리소스 소비를 모니터링하여 비효율적인 코드를 식별하고 개선하는 데 도움이 됩니다.
- 프로파일링을 사용하여 운영 체제를 관찰하면 인프라, 시스템 호출, 커널 작업, I/O 대기 시간에 대한 통찰력을 얻을 수 있으며, 이를 통해 효율성과 비용 절감을 위해 인프라를 최적화하는 데 도움이 됩니다.
Profile 신호가 활성화된 OpenTelemetry Collector 사용자 정의 리소스
apiVersion: opentelemetry.io/v1beta1
kind: OpenTelemetryCollector
metadata:
name: otel-profiles-collector
namespace: otel-profile
spec:
args:
feature-gates: service.profilesSupport
config:
receivers:
otlp:
protocols:
grpc:
endpoint: '0.0.0.0:4317'
http:
endpoint: '0.0.0.0:4318'
exporters:
otlp/pyroscope:
endpoint: "pyroscope.pyroscope-monitoring.svc.cluster.local:4317"
service:
pipelines:
profiles:
receivers: [otlp]
exporters: [otlp/pyroscope]
# ...
4.1.4. 필요한 RBAC 리소스 자동 생성 링크 복사링크가 클립보드에 복사되었습니다!
일부 Collector 구성 요소에는 RBAC 리소스를 구성해야 합니다.
프로세스
OpenTelemetry Operator의 Red Hat 빌드가 자동으로 생성할 수 있도록
opentelemetry-operator-controller-manage서비스 계정에 다음 권한을 추가합니다.apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: generate-processors-rbac rules: - apiGroups: - rbac.authorization.k8s.io resources: - clusterrolebindings - clusterroles verbs: - create - delete - get - list - patch - update - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: generate-processors-rbac roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: generate-processors-rbac subjects: - kind: ServiceAccount name: opentelemetry-operator-controller-manager namespace: openshift-opentelemetry-operator
4.1.5. Target Allocator 링크 복사링크가 클립보드에 복사되었습니다!
대상 할당자는 OpenTelemetry Collector 인스턴스의 배포된 전체에서 스크래핑 대상을 분할하는 OpenTelemetry Operator의 선택적 구성 요소입니다. Target Allocator는 Prometheus PodMonitor 및 ServiceMonitor 사용자 정의 리소스(CR)와 통합됩니다. 대상 할당자가 활성화되면 OpenTelemetry Operator는 대상 할당자 서비스에 연결되는 활성화된 prometheus 수신기에 http_sd_config 필드를 추가합니다.
대상 할당자는 기술 미리보기 기능일 뿐입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat Technology Preview 기능의 지원 범위에 대한 자세한 내용은 다음 링크를 참조하세요.
활성화된 대상 할당기를 사용한 OpenTelemetryCollector CR 예제
apiVersion: opentelemetry.io/v1beta1
kind: OpenTelemetryCollector
metadata:
name: otel
namespace: observability
spec:
mode: statefulset
targetAllocator:
enabled: true
serviceAccount:
prometheusCR:
enabled: true
scrapeInterval: 10s
serviceMonitorSelector:
name: app1
podMonitorSelector:
name: app2
config:
receivers:
prometheus:
config:
scrape_configs: []
processors:
exporters:
debug: {}
service:
pipelines:
metrics:
receivers: [prometheus]
processors: []
exporters: [debug]
# ...
- 1
- 대상 할당자가 활성화된 경우 배포 모드를
statefulset으로 설정해야 합니다. - 2
- 대상 할당자를 활성화합니다. 기본값은
false입니다. - 3
- Target Allocator 배포의 서비스 계정 이름입니다. 서비스 계정에는 클러스터에서
ServiceMonitor,PodMonitor사용자 정의 리소스 및 기타 개체를 가져와서 스크래핑된 메트릭에 레이블을 올바르게 설정하기 위한 RBAC가 있어야 합니다. 기본 서비스 이름은<collector_name>-targetallocator입니다. - 4
- Prometheus
PodMonitor및ServiceMonitor사용자 정의 리소스와의 통합을 활성화합니다. - 5
- Prometheus
ServiceMonitor사용자 정의 리소스에 대한 레이블 선택기입니다. 비어 두면 모든 서비스 모니터가 활성화됩니다. - 6
- Prometheus
PodMonitor사용자 정의 리소스에 대한 라벨 선택기입니다. 비어 두면 모든 포드 모니터가 활성화됩니다. - 7
- 최소한의 빈
scrape_config: []구성 옵션을 갖춘 Prometheus 수신기입니다.
Target Allocator 배포는 Kubernetes API를 사용하여 클러스터에서 관련 객체를 가져오므로 사용자 지정 RBAC 구성이 필요합니다.
Target Allocator 서비스 계정에 대한 RBAC 구성
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: otel-targetallocator
rules:
- apiGroups: [""]
resources:
- services
- pods
- namespaces
verbs: ["get", "list", "watch"]
- apiGroups: ["monitoring.coreos.com"]
resources:
- servicemonitors
- podmonitors
- scrapeconfigs
- probes
verbs: ["get", "list", "watch"]
- apiGroups: ["discovery.k8s.io"]
resources:
- endpointslices
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: otel-targetallocator
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: otel-targetallocator
subjects:
- kind: ServiceAccount
name: otel-targetallocator
namespace: observability
# ...