• EnglishEspañol日本語한국어Português
  • 로그인지금 시작하기

사용자의 편의를 위해 제공되는 기계 번역입니다.

In the event of any inconsistency between the English version and the translated version, the English versionwill take priority. Please visit this page for more information.

문제 신고

OpenTelemetry 계측 애플리케이션을 Kubernetes에 연결

Kubernetes에서 앱을 실행하는 개발자인 경우 New Relic을 사용하여 Kubernetes 인프라가 OpenTelemetry 계측 애플리케이션에 미치는 영향을 이해할 수 있습니다.

아래 단계를 완료한 후 New Relic UI를 사용하여 OpenTelemetry의 애플리케이션 수준 메트릭을 Kubernetes 인프라 메트릭과 상호 연관시킬 수 있습니다. 이렇게 하면 원격 측정 데이터의 전체 환경을 보고 팀 간에 작업하여 Kubernetes 환경의 문제에 대한 MTTR(평균 해결 시간)을 더 빠르게 얻을 수 있습니다.

개요: 데이터의 상관 관계를 파악하는 방법

이 가이드의 단계를 통해 애플리케이션에서 인프라 관련 메타데이터를 원격 분석 데이터에 삽입할 수 있습니다. 그 결과 New Relic UI가 실행 가능한 정보로 채워집니다. 이 작업을 수행하기 위해 수행할 단계는 다음과 같습니다.

전제 조건

아래 단계를 성공적으로 수행하려면 OpenTelemetry 및 Kubernetes에 대해 이미 잘 알고 있어야 하며 다음을 수행해야 합니다.

  • 다음 환경 변수를 생성했습니다.

    • OTEL_EXPORTER_OTLP_ENDPOINT (해당 지역 또는 목적에 맞는 New Relic 엔드포인트)

    • NEW_RELIC_API_KEY (

      )

  • 클러스터에 New Relic Kubernetes 통합 을 설치했습니다.

  • OpenTelemetry 로 애플리케이션을 계측하고 OTLP(OpenTelemetry Protocol)를 통해 New Relic에 데이터를 성공적으로 보냈습니다.

New Relic과 함께 수집기를 사용하는 방법에 대한 일반적인 질문이 있는 경우 New Relic 과 함께 OpenTelemetry Collector 소개를 참조하세요.

원격 분석 데이터를 OpenTelemetry Collector로 보내도록 애플리케이션 구성

이를 설정하려면 Kubernetes YAML 파일의 env 섹션에 사용자 정의 스니펫을 추가해야 합니다. 아래 예에서는 샘플 프런트엔드 마이크로서비스(Frontend.yaml)의 코드 조각을 보여줍니다. 코드 조각에는 다음을 수행하는 두 개의 섹션이 포함되어 있습니다.

  • 섹션 1: 원격 측정 데이터가 수집기로 전송되는지 확인합니다. 그러면 호스트 IP로 환경 변수 OTEL_EXPORTER_OTLP_ENDPOINT 가 설정됩니다. 호스트 IP를 가져오기 위해 하향 API를 호출하여 이를 수행합니다.
  • 섹션 2: 인프라별 메타데이터를 첨부합니다. 이를 위해 하향 API를 사용하여 metadata.uid 캡처하고 이를 OTEL_RESOURCE_ATTRIBUTES 환경 변수에 추가합니다. 이 환경 변수는 OpenTelemetry Collector의 resourcedetectionk8sattributes 프로세서에서 원격 분석 데이터에 인프라별 컨텍스트를 추가하는 데 사용됩니다.

OpenTelemetry로 계측된 각 마이크로서비스에 대해 매니페스트의 env 섹션에 아래 강조표시된 줄을 추가하세요.

# Frontend.yaml
apiVersion: apps/v1
kind: Deployment
...
spec:
containers:
- name: yourfrontendservice
image: yourfrontendservice-beta
env:
# Section 1: Ensure that telemetry data is sent to the collector
- name: HOST_IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
# This is picked up by the opentelemetry sdks
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: "http://$(HOST_IP):55680"
# Section 2: Attach infrastructure-specific metadata
# Get pod ip so that k8sattributes can tag resources
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_UID
valueFrom:
fieldRef:
fieldPath: metadata.uid
# This is picked up by the resource detector
- name: OTEL_RESOURCE_ATTRIBUTES
value: service.instance.id=$(POD_NAME),k8s.pod.uid=$(POD_UID)”

OpenTelemetry Collector를 에이전트로 구성 및 배포

Kubernetes 클러스터 내의 모든 노드에 에이전트로 수집기를 배포하는 것이 좋습니다. 에이전트는 원격 측정 데이터를 수신하고 메타데이터로 원격 측정 데이터를 보강할 수 있습니다. 예를 들어 수집기는 프로세서를 통해 사용자 정의 특성이나 인프라 정보를 추가할 수 있을 뿐만 아니라 일괄 처리, 재시도, 압축 및 클라이언트 계측 수준에서 덜 효율적으로 처리되는 추가 고급 기능을 처리할 수 있습니다.

수집기 구성에 대한 도움말은 아래의 샘플 수집기 구성 파일과 이러한 옵션 설정에 대한 섹션을 참조하세요.

receivers:
otlp:
protocols:
grpc:
processors:
batch:
resource:
attributes:
- key: host.id
from_attribute: host.name
action: upsert
resourcedetection:
detectors: [ gke, gce ]
k8sattributes:
auth_type: "serviceAccount"
passthrough: false
filter:
node_from_env_var: KUBE_NODE_NAME
extract:
metadata:
- k8s.pod.name
- k8s.pod.uid
- k8s.deployment.name
- k8s.cluster.name
- k8s.namespace.name
- k8s.node.name
- k8s.pod.start_time
pod_association:
- from: resource_attribute
name: k8s.pod.uid
exporters:
otlp:
endpoint: $OTEL_EXPORTER_OTLP_ENDPOINT
headers:
api-key: $NEW_RELIC_API_KEY
logging:
logLevel: DEBUG
service:
pipelines:
metrics:
receivers: [ otlp ]
processors: [ resourcedetection, k8sattributes, resource, cumulativetodelta, batch ]
exporters: [ otlp ]
traces:
receivers: [ otlp ]
processors: [ resourcedetection, k8sattributes, resource, batch ]
exporters: [ otlp ]
logs:
receivers: [ otlp ]
processors: [ resourcedetection, k8sattributes, resource, batch ]
exporters: [ otlp ]

1단계: OTLP 내보내기 구성

먼저 New Relic과 함께 OpenTelemetry Collector 구성 YAML 파일 에 OTLP 내보내기를 추가합니다. 헤더로.

exporters:
otlp:
endpoint: $OTEL_EXPORTER_OTLP_ENDPOINT
headers: api-key: $NEW_RELIC_API_KEY

2단계: 배치 프로세서 구성

일괄 프로세서는 범위, 측정항목 또는 로그를 받아 일괄 처리하므로 데이터를 더 쉽게 압축하고 수집기에서 나가는 요청 수를 줄일 수 있습니다.

processors:
batch:

3단계: 리소스 감지 프로세서 구성

resourcedetection 프로세서는 수집기를 통해 처리되는 원격 분석 데이터에 컨텍스트를 추가하기 위해 호스트별 정보를 가져옵니다. 이 예시에서는 Google Kubernetes Engine(GKE) 및 Google Compute Engine(GCE)을 사용하여 다음을 포함한 Google Cloud 관련 메타데이터를 가져옵니다.

  • cloud.provider("gcp")
  • cloud.platform("gcp_compute_engine")
  • cloud.account.id
  • 클라우드 지역
  • cloud.availability_zone
  • 호스트 아이디
  • host.image.id
  • 호스트 유형
processors:
resourcedetection:
Detectors: [ gke, gce ]

4단계: Kubernetes 속성 프로세서 구성(일반)

에이전트로 실행되는 OpenTelemetry Collector의 일부로 k8sattributes 프로세서를 실행하면 OpenTelemetry Collector 에이전트에 원격 측정 데이터를 보내는 Pod의 IP 주소를 감지하고 이를 사용하여 Pod 메타데이터를 추출합니다. 다음은 프로세서 섹션만 있는 기본 Kubernetes 매니페스트 예시입니다. OpenTelemetry Collector를 DaemonSet 로 배포하려면 이 포괄적인 매니페스트 예제를 읽어보세요.

processors:
k8sattributes:
auth_type: "serviceAccount"
passthrough: false
filter:
node_from_env_var: KUBE_NODE_NAME
extract:
metadata:
- k8s.pod.name
- k8s.pod.uid
- k8s.deployment.name
- k8s.cluster.name
- k8s.namespace.name
- k8s.node.name
- k8s.pod.start_time
pod_association:
- from: resource_attribute
name: k8s.pod.uid

5단계: Kubernetes 속성 프로세서(RBAC) 구성

RBAC(역할 기반 액세스 제어)에 대한 구성을 추가해야 합니다. k8sattributes 프로세서에는 구성된 필터에 포함된 포드 및 네임스페이스 리소스에 대한 get, watchlist 권한이 필요합니다. 클러스터의 모든 Pod와 네임스페이스에 대해 필요한 권한을 ServiceAccount 에 부여하기 위해 ClusterRole 에 대한 역할 기반 액세스 제어(RBAC)를 구성하는 방법에 대한 이 예를 참조하세요.

6단계: Kubernetes 속성 프로세서 구성(검색 필터)

수집기를 에이전트로 실행할 때 프로세서가 실행 중인 동일한 호스트의 포드만 검색하도록 검색 필터를 적용해야 합니다. 필터를 사용하지 않으면 특히 매우 큰 클러스터에서 리소스 사용량이 불필요하게 높을 수 있습니다. 필터가 적용되면 각 프로세서는 자체 노드에서 실행되는 포드에 대해서만 Kubernetes API를 쿼리합니다.

필터를 설정하려면 하향 API를 사용하여 OpenTelemetry Collector 에이전트 구성 YAML 파일의 포드 env 섹션에 환경 변수로 노드 이름을 삽입합니다(예는 GitHub 참조). 이렇게 하면 OpenTelemetry Collector 에이전트의 컨테이너에 새 환경 변수가 주입됩니다. 값은 Pod가 실행되도록 예약된 노드의 이름입니다.

spec:
containers:
- env:
- name: KUBE_NODE_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: spec.nodeName

그런 다음 k8sattributes 을 사용하여 노드별로 필터링할 수 있습니다.

k8sattributes:
filter:
node_from_env_var: KUBE_NODE_NAME

구성이 작동하는지 확인

OpenTelemetry 데이터를 Kubernetes 데이터와 성공적으로 연결했다면 분산 추적 UI 내의 범위에서 k8s.cluster.namek8s.deployment.name 과 같은 Kubernetes 속성을 볼 수 있어야 합니다.

이미지를 확대하려면 클릭하십시오:

다음은 뭐지?

이제 OpenTelemetry 계측 앱을 Kubernetes와 연결했으므로 모범 사례 가이드에서 OpenTelemetry 및 New Relic 사용을 개선하기 위한 팁을 확인하세요.

위에 제공된 단계에 대한 자세한 내용은 이 블로그 게시물 인 OpenTelemetry 추적, 메트릭 및 로그를 Kubernetes 성능 데이터와 상호 연관시키는 방법을 확인할 수도 있습니다.

Copyright © 2024 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.