このページでは、Helmを使用してコミュニティのOpenTelemetry Collector Contribをインストールし、Linkerdプロキシとコントロールプレーンのメトリクスをスクレイプするように設定し、データがNew Relicに送信されていることを確認します。この作業には約15分かかります。
互換性と要件
サポート対象
kubectlが設定されたKubernetesクラスタ(EKS、GKE、AKS、または自己管理型)- Linkerdがインストールされ、正常に動作していること(
linkerd checkがパスすること) - Helm管理のクラスタ設定
必要なこと
New RelicのIngestライセンスキー
クラスタにインストールおよび設定されたHelm
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インテグレーションがインストールされている場合、これはすでに対応済みです。
インストール
OpenTelemetry Helmリポジトリを追加してください。
bash$helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts$helm repo updatevalues.yamlを作成し、次のセクションを更新してください:モードをデプロイメントに設定してください。
mode: deploymentイメージリポジトリを置き換えてください。
image:repository: otel/opentelemetry-collector-contribクラスタロールを設定してください。
clusterRole:create: truerules:- apiGroups: [""]resources: [pods, nodes, nodes/proxy, endpoints, services, namespaces]verbs: [get, list, watch]- apiGroups: ["apps"]resources: [replicasets, deployments, daemonsets, statefulsets]verbs: [get, list, watch]クラスタ名とNew Relic Ingestライセンスキーを設定します。
extraEnvs:- name: K8S_CLUSTER_NAMEvalue: "<YOUR_CLUSTER_NAME>"- name: NEWRELIC_LICENSE_KEYvalue: "<YOUR_NR_INGEST_LICENSE_KEY>"configセクション全体をLinkerdの監視設定に置き換えてください。config:receivers:prometheus:config:scrape_configs:- job_name: 'linkerd-controller'kubernetes_sd_configs:- role: podnamespaces: { 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:resource/strip_service:attributes:- { key: service.name, action: delete }- { key: service.instance.id, action: delete }resource/cluster:attributes:- key: k8s.cluster.namevalue: "${env:K8S_CLUSTER_NAME}"action: inserttransform/k8s:metric_statements:- context: datapointstatements:- 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: datapointstatements:- 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: metricstatements:- set(description, "")- set(unit, "")exporters:otlp_http/newrelic:endpoint: "https://otlp.nr-data.net:4318"headers:api-key: "${env:NEWRELIC_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]ヒント
デフォルトでは、このチャートは価値の低いプロキシメトリクスをフィルタリングしません。NRDOTが適用するのと同じフィルタリングが必要な場合は、
filter/drop_unusedプロセッサを追加してください。フィルタのリストについては、Helmを使用したNRDOTページをご覧ください。
設定
次の表に従って
values.yamlファイルを更新してください:パラメータ 説明 <YOUR_CLUSTER_NAME>New Relicで識別するためのKubernetesクラスター名に置き換えてください。 K8S_CLUSTER_NAMEextraEnvsのクラスタ名。このクラスタ名は、New RelicでKubernetesクラスタを識別するためにOTel Collectorによって使用されますNEWRELIC_LICENSE_KEYに設定されたNew RelicのIngestライセンスキー extraEnvsfilter/drop_unusedデフォルトでは、このチャートの設定には含まれていません。同様の価値の低いメトリクスのフィルタリングを行いたい場合は、Helmを使用したNRDOTをご覧ください。 helm-chartをインストールしてください
bash$helm upgrade my-opentelemetry-collector open-telemetry/opentelemetry-collector \>-f values.yaml -n newrelic --create-namespace --install
データを検索する
- one.newrelic.com > All capabilities > All entitiesに移動します。
- クラスタ名を検索します。
- Linkerdエンティティを選択して、組み込みダッシュボードを開きます。
組み込みダッシュボードは、リクエスト率、レイテンシp50/p95/p99、成功率、TCP接続、mTLS証明書ステータス、コントロールプレーンのヘルス、およびメッシュ化されたポッドのインベントリをカバーします。詳細については、Linkerdデータの検索ドキュメントを参照してください。