Kubernetes 에서 개발자 기능을 실행하는 경우 뉴렐릭을 사용하여 Kubernetes OpenTelemetry 제공하는 데 어떤 영향을 미치는지 이해할 수 있습니다.
아래 단계를 완료한 후 뉴렐릭 UI 사용하여 OpenTelemetry 의 작곡 수준 지표를 Kubernetes 통합 지표와 상호 연관시킬 수 있습니다. 이를 통해 텔레메트리 데이터의 전체 환경을 확인하고 팀 간 협업을MTTR Kubernetes 통해 환경의 문제에 대한 평균 해결 시간(MTTR)( )을 더 빠르게 달성할 수 있습니다.
데이터를 상호 연관시키는 방법
이 문서에서는 텔넷리 데이터에 고정 관련 데이터를 삽입할 수 있도록 설정하는 과정을 안내합니다. 그 결과 뉴렐릭 UI 실행 가능한 정보로 채워집니다. 시작하기 위해 취해야 할 단계는 다음과 같습니다.
- 각 컨테이너 컨테이너에서 텔레메트리 데이터를 수집기로 보내기 위한 환경 변수를 정의합니다.
- 구현하다, 배포하다 관련 데이터베이스(클러스터, 배포 및 지우스페이스 이름)를 OpenTelemetry 주입하기
DaemonSet
위해resourcedetection
,resource
,batch
및 프로세서가 포함된 에이전트 모드 에서 로 수집기를 배포합니다.k8sattributes
시작하기 전에
아래 단계를 성공적으로 완료하려면 OpenTelemetry 및 Kubernetes에 대해 이미 잘 알고 있어야 하며 다음을 수행해야 합니다.
다음 환경 변수를 만들었습니다.
OTEL_EXPORTER_OTLP_ENDPOINT
: 자세한 내용은 뉴렐릭 OTLP 엔드포인트를 참조하세요.NEW_RELIC_API_KEY
: 자세한 내용은 뉴렐릭 API 키를 참조하세요.
클러스터에 뉴렐릭 Kubernetes 통합을 설치했습니다.
OpenTelemetry 사용하여 로그를 작성했으며 OTLP( OpenTelemetry Protocol)를 통해 뉴렐릭에 데이터를 성공적으로 보냈습니다.
New Relic과 함께 수집기를 사용하는 방법에 대한 일반적인 질문이 있는 경우 New Relic 과 함께 OpenTelemetry Collector 소개를 참조하세요.
원격 분석 데이터를 OpenTelemetry Collector로 보내도록 애플리케이션 구성
이를 설정하려면 Kubernetes YAML 파일의 env
섹션에 사용자 정의 스니펫을 추가해야 합니다. 아래 예는 샘플 프런트엔드 마이크로서비스(Frontend.yaml
)에 대한 스니펫을 보여줍니다. 스니펫에는 다음을 수행하는 2개의 섹션이 포함되어 있습니다.
- Section 1: 텔레메트리 데이터가 수집기로 전송되는지 확인하세요. 그러면 호스트 IP로 환경 변수
OTEL_EXPORTER_OTLP_ENDPOINT
가 설정됩니다. 호스트 IP를 가져오기 위해 하향 API를 호출하여 이를 수행합니다. - Section 2: 인프라별 메타데이터를 첨부합니다. 이를 위해 하향 API를 사용하여
metadata.uid
캡처하고 이를OTEL_RESOURCE_ATTRIBUTES
환경 변수에 추가합니다. 이 환경 변수는 OpenTelemetry 수집기의resourcedetection
및k8sattributes
프로세서에서 망원경 관련 컨텍스트를 추가로 추가하는 데 사용됩니다.
OpenTelemetry로 계측된 각 마이크로서비스에 대해 아래 강조표시된 줄을 매니페스트의 env
섹션에 추가하세요.
# Frontend.yamlapiVersion: apps/v1kind: 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 수집기를 에이전트로 구성 및 배포
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]
OpenTelemetry 수집기를 에이전트로 구성하고 배포하려면 다음 단계를 따르세요.
OTLP 내보내기 구성
먼저, 뉴렐릭 헤더와 함께 OTLP 내보내기를 OpenTelemetry 수집기 설정 YAML 파일 에 추가하세요.
exporters:otlp: endpoint: $OTEL_EXPORTER_OTLP_ENDPOINT headers: api-key: $NEW_RELIC_API_KEY
배치 프로세서 구성
배치 프로세서는 범위, 지표 또는 로그를 허용하고 이를 배치로 배치합니다. 이렇게 하면 데이터를 더 쉽게 압축하고 수집기의 아웃바운드 요청을 줄일 수 있습니다.
processors:batch:
리소스 감지 프로세서 구성
resourcedetection
프로세서는 수집기를 통해 처리되는 원격 분석 데이터에 컨텍스트를 추가하기 위해 호스트별 정보를 가져옵니다. 이 예시에서는 Google Kubernetes Engine(GKE) 및 Google Compute Engine(GCE)을 사용하여 다음을 포함한 Google Cloud 관련 메타데이터를 가져옵니다.
cloud.provider
("gcp")cloud.platform
("gcp_compute_engine
")cloud.account.id
cloud.region
cloud.availability_zone
host.id
host.image.id
host.type
processors:resourcedetection:detectors: [gke, gce]
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
Kubernetes 속성 프로세서(RBAC) 구성
역할 기반 액세스 제어(RBAC)에 대한 설정을 추가해야 합니다. k8sattributes
프로세서에는 구성된 필터에 포함된 파드 및 지우스페이스 리소스에 대한 get
, watch
및 list
권한이 필요합니다. 이 예에서는 클러스터에 있는 모든 파드 및 지우스페이스에 대해 필요한 권한을 ServiceAccount
에 부여하기 위해 ClusterRole
에 대한 역할 기반 액세스 제어(RBAC)를 구성하는 방법을 보여줍니다.
Kubernetes 속성 프로세서 구성(검색 필터)
에이전트로 수집기를 실행할 때 프로세서가 실행 중인 동일한 호스트에서만 파드를 검색하도록 검색 필터를 적용해야 합니다. 필터를 사용하지 않으면 특히 대규모 클러스터에서 리소스 사용량이 불필요하게 높아질 수 있습니다. 필터가 적용되면 각 프로세서는 자체 노드에서 실행되는 Pad용 Kubernetes API 만 쿼리합니다.
필터를 설정하려면 하향 API 사용하여 OpenTelemetry 수집기 에이전트 설정 YAML 파일의 파드 env
섹션에 환경 변수로 노드 이름을 삽입합니다. 예제를 보려면 GitHub를 확인하세요. 그러면 OpenTelemetry 수집기 에이전트의 컨테이너에 새 환경 변수가 주입됩니다. 값은 파드가 실행되도록 예약된 노드의 이름이 됩니다.
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 데이터와 성공적으로 연결한 후에는 설정이 작동하는지 확인할 수 있어야 합니다.
- one.newrelic.com > All capabilities > APM & Services 으로 이동하여 Services - OpenTelemetry 내에서 애플리케이션을 선택합니다.
- Monitor [모니터] 섹션에서 Service map [서비스 맵을] 클릭합니다.
- OpenTelemetry 서비스와 클러스터 간의 연결을 확인하세요. 오른쪽에는
k8s.cluster.name
,k8s.namespace.name
및k8s.deployment.name
와 같은 Kubernetes 속성이 태그로 표시됩니다.