본문 바로가기
클라우드/쿠버네티스

🚀 Kubernetes 관측 가능성 레벨업! OTel Collector 핵심 프로세서 완전 정복

by gasbugs 2025. 10. 14.

안녕하세요! 오늘은 쿠버네티스(Kubernetes) 환경에서 시스템을 모니터링하고 추적할 때 누구나 한 번쯤 마주쳤을 법한 문제를 해결해 줄 OpenTelemetry Collector의 핵심 프로세서(Processor)들에 대해 깊이 파고드는 시간을 갖겠습니다.

혹시 이런 경험 없으신가요? 🤔

"애플리케이션 로그와 트레이스 데이터가 쏟아져 들어오는데... 대체 어떤 Pod, 어떤 Namespace에서 온 데이터인지 알 수가 없네! 디버깅 너무 힘들다... 😭"

 

이런 막막한 상황을 한 방에 해결해 줄 영웅이 바로 오늘 우리가 함께 알아볼 프로세서들입니다. 특히, 질문에 대한 정답인 k8sattributes를 중심으로 다른 프로세서들은 어떤 역할을 하는지, 어떻게 함께 사용하는지 모두 알려드릴게요!

 


⭐ 오늘의 주인공: Kubernetes Attributes Processor (k8sattributes)

질문의 정답이었던 k8sattributes 프로세서는 이름 그대로 쿠버네티스 환경을 위한 전용 프로세서입니다. 이 친구가 하는 역할은 아주 명확하고 강력합니다.

  • 역할: OTel Collector로 들어오는 텔레메트리 데이터(Traces, Metrics, Logs)에 쿠버네티스 메타데이터를 자동으로 풍성하게 추가해 줍니다.
  • 동작 방식: Collector가 실행되는 환경의 Kubernetes API 서버와 통신합니다. 데이터가 발생한 IP 주소를 기반으로 해당 IP가 어떤 Pod에 속하는지 API 서버에 물어본 뒤, 그 Pod의 이름, 네임스페이스, 레이블, 어노테이션, 배포 정보 등을 알아내어 데이터에 '꼬리표'처럼 붙여줍니다. 🕵️‍♂️

이 프로세서를 거치고 나면, 우리의 데이터는 아래와 같은 멋진 속성들을 갖게 됩니다.

  • k8s.pod.name
  • k8s.pod.uid
  • k8s.pod.ip
  • k8s.namespace.name
  • k8s.node.name
  • k8s.deployment.name
  • k8s.replicaset.name
  • ... 등등!

이 정보들 덕분에 우리는 Grafana, Jaeger 같은 도구에서 "특정 Namespace에서 발생한 에러 로그만 보기" 또는 "특정 Deployment에 속한 Pod들의 평균 응답 시간 측정하기"와 같은 강력한 필터링과 그룹화를 할 수 있게 됩니다.

 

📝 설정 예시 (otel-collector-config.yaml)

processors:
  k8sattributes:
    # passthrough 모드를 false로 하면 Collector가 직접 K8s API와 통신하여
    # IP 주소를 기반으로 메타데이터를 찾아냅니다.
    passthrough: false
    # API 서버로부터 가져올 메타데이터 규칙을 정의할 수 있습니다.
    extract:
      metadata:
        - k8s.pod.name
        - k8s.pod.uid
        - k8s.deployment.name
        - k8s.namespace.name
        - k8s.node.name

service:
  pipelines:
    traces:
      receivers: [otlp]
      # 파이프라인에 k8sattributes 프로세서를 추가합니다.
      processors: [k8sattributes, batch]
      exporters: [logging]

🎛️ 다른 후보들도 알아볼까요? (Resource, Filter, Attributes)

k8sattributes가 정답인 이유는 알았지만, 다른 프로세서들은 어떤 역할을 하는지 알아야 진정한 전문가겠죠?

1. Resource Processor (resource) 🏷️

이 프로세서는 들어오는 모든 데이터에 정적(Static)인 리소스 속성을 추가하는 역할을 합니다. k8sattributes처럼 동적으로 무언가를 찾아내는 것이 아니라, 설정 파일에 미리 정의해 둔 값을 일괄적으로 붙여줍니다.

  • 사용 예시:
    • service.name: my-awesome-app (우리 서비스 이름)
    • service.version: 1.2.3 (현재 배포 버전)
    • environment: production (운영 환경인지 개발 환경인지)

k8sattributes가 "데이터가 온 곳"을 알려준다면, resource 프로세서는 "데이터를 처리하는 시스템의 정체성"을 알려준다고 생각하면 쉽습니다.

 

📝 설정 예시

processors:
  resource:
    attributes:
      - key: service.version
        value: "1.2.3"
        action: insert
      - key: environment
        value: "production"
        action: insert

2. Filter Processor (filter) 🚫

이름에서 알 수 있듯이, 이 프로세서는 데이터를 필터링하는 역할을 합니다. 특정 조건에 맞는 데이터를 포함시키거나 제외할 수 있습니다.

  • 사용 예시:
    • 너무 많이 들어오는 /healthz 같은 헬스 체크 트레이스는 제외하고 싶을 때
    • 특정 IP 대역에서 들어오는 테스트 데이터는 수집하지 않고 싶을 때

디버깅에 필요 없거나 저장 비용만 차지하는 데이터를 초반에 쳐내는 '문지기' 역할을 합니다.

 

📝 설정 예시

processors:
  filter:
    # traces 데이터에 대한 필터링 규칙
    traces:
      # /healthz 라는 이름을 가진 span은 제외(exclude)
      span:
        - 'name == "/healthz"'
      action: exclude

3. Attributes Processor (attributes) 🔧

이 프로세서는 이미 데이터에 존재하는 속성(Attribute)들을 조작하는 범용 도구입니다. 특정 속성을 추가, 수정, 삭제하는 등 다양한 작업을 할 수 있습니다.

  • 사용 예시:
    • user.id 속성값이 개인정보보호를 위해 필요하다면, 해당 값을 해시(hash) 처리해서 user.id_hashed 라는 새로운 속성으로 바꿀 때
    • 여러 속성을 조합해서 새로운 속성을 만들 때
    • 더 이상 필요 없는 속성을 삭제(delete)해서 데이터 크기를 줄일 때

k8sattributes가 쿠버네티스 메타데이터 '추가'에 특화되어 있다면, attributes 프로세서는 이미 있는 속성들을 '가공'하는 데 더 초점이 맞춰져 있습니다.

 

📝 설정 예시

processors:
  attributes:
    actions:
      # http.url 속성을 http.full_url로 이름 변경 (rename)
      - key: http.url
        action: update
        new_key: http.full_url
      # user.email 속성은 민감하므로 삭제 (delete)
      - key: user.email
        action: delete

🔗 파이프라인: 프로세서들을 함께 사용하기

실제 환경에서는 이 프로세서들을 파이프라인(Pipeline)에 엮어서 순차적으로 사용합니다.

데이터 수신(Receiver) -> k8sattributes -> filter -> attributes -> 데이터 전송(Exporter)

  1. k8sattributes: 먼저 쿠버네티스 메타데이터를 풍부하게 추가하고,
  2. filter: 추가된 메타데이터를 기반으로 "A 네임스페이스의 헬스 체크 데이터는 제외해줘" 와 같이 더 정교한 필터링을 하고,
  3. attributes: 필요한 속성들을 정리하고 가공한 뒤,
  4. Exporter: 최종 목적지로 데이터를 보냅니다.

✨ 결론

이제 왜 쿠버네티스 환경에서 k8sattributes 프로세서가 필수적인지, 그리고 다른 프로세서들과 어떻게 협력하여 우리의 데이터를 더욱 가치있게 만드는지 이해되셨나요?

  • Kubernetes Attributes Processor: 쿠버네티스 환경의 자동 메타데이터 추가 담당
  • Resource Processor: 서비스 버전, 환경 등 정적 정보 추가 담당
  • Filter Processor: 불필요한 데이터 제외 담당
  • Attributes Processor: 기존 속성 편집 및 가공 담당

이 프로세서들을 잘 활용하면 복잡한 마이크로서비스 환경에서도 데이터의 출처를 명확히 하고, 원하는 데이터만 효율적으로 수집하여 문제 해결 능력을 비약적으로 향상시킬 수 있습니다. 이제 여러분도 OTel Collector 전문가입니다!