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

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

영문본과 번역본이 일치하지 않는 경우 영문본이 우선합니다. 보다 자세한 내용은 이 페이지를 방문하시기 바랍니다.

문제 신고

Linkerd 모니터링 설치 및 구성: 매니페스트를 사용한 OTel Collector Contrib

|View as Markdown (English)

이 페이지에서는 Kubernetes 매니페스트를 사용하여 커뮤니티 OpenTelemetry Collector Contrib을 설치하고, Linkerd 프록시 및 컨트롤 플레인 메트릭을 스크랩하도록 구성하며, 데이터가 뉴렐릭으로 전송되는지 확인합니다. 이 작업은 약 15분 정도 소요됩니다.

호환성 및 요구 사항

지원

  • kubectl이(가) 구성된 쿠버네티스 클러스터(EKS, GKE, AKS 또는 자체 관리형)
  • Linkerd 설치 및 정상 상태(linkerd check 통과)
  • 매니페스트 관리형 클러스터 설정(Helm 없음)

필요한 사항

  • 뉴렐릭 수집 라이선스 키

  • 뉴렐릭 OTLP 엔드포인트에 대한 네트워크 연결

  • 관찰하려는 네임스페이스에 주입이 활성화되어 있어야 합니다. 그렇지 않은 경우, 어노테이션을 추가하고 다시 시작하십시오:

    bash
    $
    kubectl annotate namespace <YOUR_NAMESPACE> linkerd.io/inject=enabled
    $
    kubectl rollout restart deployment -n <YOUR_NAMESPACE>
  • (선택 사항) Kubernetes 워크로드 엔티티를 Linkerd 메트릭과 연관시키려는 경우 클러스터에서 실행 중인 kube-state-metrics. 이미 뉴렐릭 Kubernetes 통합을 설치한 경우 이는 이미 처리되어 있습니다.

설치

  1. 아래 매니페스트를 otel-collector.yaml이라는 이름의 파일에 복사하십시오.
apiVersion: v1
kind: ServiceAccount
metadata: { name: my-opentelemetry-collector, namespace: newrelic }
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata: { name: my-opentelemetry-collector }
rules:
- apiGroups: [""]
resources: [pods, nodes, nodes/proxy, endpoints, services, namespaces]
verbs: [get, list, watch]
- apiGroups: ["apps"]
resources: [replicasets, deployments, daemonsets, statefulsets]
verbs: [get, list, watch]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata: { name: my-opentelemetry-collector }
roleRef: { apiGroup: rbac.authorization.k8s.io, kind: ClusterRole, name: my-opentelemetry-collector }
subjects:
- { kind: ServiceAccount, name: my-opentelemetry-collector, namespace: newrelic }
---
apiVersion: v1
kind: ConfigMap
metadata: { name: my-opentelemetry-collector-config, namespace: newrelic }
data:
config: |
receivers:
prometheus:
config:
scrape_configs:
- job_name: 'linkerd-controller'
kubernetes_sd_configs:
- role: pod
namespaces: { names: ['linkerd', 'linkerd-viz'] }
relabel_configs:
- { source_labels: [__meta_kubernetes_pod_container_port_name], action: keep, regex: admin-http }
- { source_labels: [__meta_kubernetes_pod_container_name], target_label: component }
- { source_labels: [__meta_kubernetes_namespace], target_label: namespace }
- { source_labels: [__meta_kubernetes_pod_name], target_label: pod }
- job_name: 'linkerd-proxy'
kubernetes_sd_configs: [{ role: pod }]
relabel_configs:
- { source_labels: [__meta_kubernetes_pod_container_name, __meta_kubernetes_pod_container_port_name, __meta_kubernetes_pod_label_linkerd_io_control_plane_ns], action: keep, regex: ^linkerd-proxy;linkerd-admin;linkerd$ }
- { source_labels: [__meta_kubernetes_namespace], target_label: namespace }
- { source_labels: [__meta_kubernetes_pod_name], target_label: pod }
- { source_labels: [__meta_kubernetes_pod_label_linkerd_io_control_plane_ns], target_label: linkerd_control_plane_ns }
- { source_labels: [__meta_kubernetes_pod_label_linkerd_io_control_plane_component], target_label: linkerd_control_plane_component }
processors:
memory_limiter:
check_interval: 1s
limit_percentage: <MEMORY_LIMIT_PERCENTAGE>
spike_limit_percentage: <MEMORY_SPIKE_LIMIT_PERCENTAGE>
resource/strip_service:
attributes:
- { key: service.name, action: delete }
- { key: service.instance.id, action: delete }
resource/cluster:
attributes:
- key: k8s.cluster.name
value: "<YOUR_CLUSTER_NAME>"
action: insert
transform/k8s:
metric_statements:
- context: datapoint
statements:
- set(attributes["k8s.namespace.name"], attributes["namespace"]) where attributes["namespace"] != nil
- set(attributes["k8s.pod.name"], attributes["pod"]) where attributes["pod"] != nil
- delete_key(attributes, "instance")
transform/deployment:
metric_statements:
- context: datapoint
statements:
- set(attributes["k8s.deployment.name"], attributes["k8s.pod.name"]) where attributes["k8s.deployment.name"] == nil and attributes["k8s.pod.name"] != nil
- replace_pattern(attributes["k8s.deployment.name"], "-[a-z0-9]+-[a-z0-9]+$", "") where attributes["k8s.deployment.name"] == attributes["k8s.pod.name"]
transform/metadata_nullify:
metric_statements:
- context: metric
statements:
- set(description, "")
- set(unit, "")
batch: {}
exporters:
otlp_http/newrelic:
endpoint: "https://otlp.nr-data.net:4318"
headers:
api-key: "<YOUR_NR_INGEST_LICENSE_KEY>"
service:
pipelines:
metrics:
receivers: [prometheus]
processors: [memory_limiter, resource/strip_service, resource/cluster, transform/k8s, transform/deployment, transform/metadata_nullify, batch]
exporters: [otlp_http/newrelic]
---
apiVersion: apps/v1
kind: Deployment
metadata: { name: my-opentelemetry-collector, namespace: newrelic }
spec:
replicas: 1
selector: { matchLabels: { app: my-opentelemetry-collector } }
template:
metadata:
labels: { app: my-opentelemetry-collector }
spec:
serviceAccountName: my-opentelemetry-collector
securityContext:
runAsNonRoot: true
runAsUser: 10001
containers:
- name: opentelemetry-collector
image: otel/opentelemetry-collector-contrib:0.160.0
args: ["--config=/conf/config.yaml"]
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities: { drop: [ALL] }
resources:
limits: { cpu: <CPU_LIMIT>, memory: <MEMORY_LIMIT> }
volumeMounts:
- { name: config, mountPath: /conf }
volumes:
- name: config
configMap:
name: my-opentelemetry-collector-config
items:
- { key: config, path: config.yaml }
---
apiVersion: v1
kind: Service
metadata: { name: my-opentelemetry-collector, namespace: newrelic }
spec:
selector: { app: my-opentelemetry-collector }
ports:
- { name: otlp, port: 4317, targetPort: 4317, protocol: TCP, appProtocol: grpc }
- { name: otlp-http, port: 4318, targetPort: 4318, protocol: TCP }

팁

이 매니페스트는 기본적으로 가치가 낮은 프록시 메트릭을 필터링하지 않습니다. NRDOT가 적용하는 것과 동일한 필터링을 원하시는 경우 filter/drop_unused 프로세서를 추가하십시오. 필터 목록은 Helm을 사용한 NRDOT 페이지를 참조하십시오.

구성

  1. 적용하기 전에 otel-collector.yaml의 플레이스홀더를 채우십시오:

    들위치설정할 항목
    resource/cluster프로세서귀하의 쿠버네티스 클러스터 이름
    otlp_http/newrelic수출업자귀하의 뉴렐릭 수집 볼륨 키
    memory_limiter프로세서메모리 제한 및 스파이크 백분율, 예를 들어 80 및 25
    resources.limits배포 컨테이너수집기 파드의 CPU 및 메모리 제한
  2. 매니페스트를 적용하십시오.

bash
$
kubectl apply -f otel-collector.yaml
$
kubectl rollout status deployment/my-opentelemetry-collector -n newrelic

데이터 찾기

  1. one.newrelic.com > All capabilities > All entities 으)로 이동합니다.

  2. 클러스터 이름을 검색하십시오.

  3. Linkerd 엔티티를 선택하여 내장 대시보드를 여십시오.

    내장 대시보드는 요청 비율, 지연시간 p50/p95/p99, 성공률, TCP 연결, mTLS 인증서 상태, 컨트롤 플레인 상태 및 메시된 파드 인벤토리를 포함합니다. 자세한 내용은 Linkerd 데이터 찾기 문서를 참조하십시오.

OpenTelemetry를 사용한 Linkerd 분산 추적

프록시 트레이스 내보내기를 활성화하고 애플리케이션 파드를 계측하여 메시 스팬을 APM 트레이스와 연관시키십시오.

Linkerd 프록시 로그 수집

linkerd-proxy

사이드카 로그를 수집하려면 두 번째 수집기 릴리스를 추가하십시오.

지표 참조

OTel Collector가 수집한 Linkerd 메트릭 및 리소스 속성의 전체 목록입니다.

Copyright © 2026 New Relic Inc.

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