• /
  • EnglishEspañolFrançais日本語한국어Português
  • ログイン今すぐ開始

この機械翻訳は、参考として提供されています。

英語版と翻訳版に矛盾がある場合は、英語版が優先されます。詳細については、このページを参照してください。

問題を作成する

Linkerd監視のインストールと設定:マニフェストを使用したOTel Collector Contrib

|View as Markdown (English)

このページでは、Kubernetesマニフェストを使用してコミュニティのOpenTelemetry Collector Contribをインストールし、Linkerdプロキシとコントロールプレーンのメトリクスをスクレイプするように設定し、データがNew Relicに送信されていることを確認します。この作業には約15分かかります。

互換性と要件

サポート対象

  • kubectlが設定されたKubernetesクラスタ(EKS、GKE、AKS、または自己管理型)
  • Linkerdがインストールされ、正常に動作していること(linkerd checkがパスすること)
  • マニフェストで管理されるクラスタ設定(Helmなし)

必要なこと

  • New RelicのIngestライセンスキー

  • New Relic OTLPエンドポイントへのネットワーク接続

  • 監視対象のネームスペースでインジェクションが有効になっていること。有効になっていない場合は、アノテーションを追加して再起動してください:

    bash
    $
    kubectl annotate namespace <YOUR_NAMESPACE> linkerd.io/inject=enabled
    $
    kubectl rollout restart deployment -n <YOUR_NAMESPACE>
  • (オプション)KubernetesワークロードエンティティをLinkerdメトリクスと関連付ける場合は、クラスタで実行されているkube-state-metrics。すでにNew Relic 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プロセッサKubernetesクラスター名
    otlp_http/newrelicエクスポーターNew Relicがライセンスキーを取り込む
    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

サイドカーのログを収集するために、2番目のコレクターリリースを追加します。

メトリクスリファレンス

OTel Collectorによって収集されるLinkerdメトリクスとリソース属性の完全なリスト。

Copyright © 2026 New Relic株式会社。

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