このページでは、Helmを使用してNRDOT Collectorをインストールし、Linkerdプロキシおよびコントロール・プレーンのメトリクスをスクレイプするように設定し、データがNew Relicに送信されていることを確認します。これには約15分かかります。
互換性と要件
サポート対象
kubectlが設定されたKubernetesクラスタ(EKS、GKE、AKS、または自己管理型)- Linkerdがインストールされ、正常に動作していること(
linkerd checkがパスすること) - Helm管理のクラスタ設定
必要なこと
New RelicのIngestライセンスキー
ベースとなるKubernetes OpenTelemetry Helmインストレーションが完了していること
New Relic OTLPエンドポイントへのネットワーク接続
監視対象のネームスペースでインジェクションが有効になっていること。有効になっていない場合は、アノテーションを追加して再起動してください:
bash$kubectl annotate namespace <YOUR_NAMESPACE> linkerd.io/inject=enabled$kubectl rollout restart deployment -n <YOUR_NAMESPACE>
ヒント
NRDOT Helmチャートにはkube-state-metricsがバンドルされており、デフォルトで有効になっているため、KubernetesワークロードのエンティティはすでにLinkerdのメトリクスと関連付けられています。追加の設定は必要ありません。
インストール
values.yamlにクラスタ名を設定してください。
deployment: envs: - name: OTEL_RESOURCE_ATTRIBUTES value: "k8s.cluster.name=<YOUR_CLUSTER_NAME>"- の
deployment.configMap.extraConfigvalues.yamlに、Linkerdのスクレイプ設定とプロセッサを追加します。
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: resource/strip_service: attributes: - { key: service.name, action: delete } - { key: service.instance.id, action: delete } 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, "") filter/drop_unused: error_mode: ignore metrics: metric: - 'name == "rustls_info" or name == "proxy_build_info"' - 'name == "scrape_series_added"' - 'IsMatch(name, "stack_(poll|create|drop)_total") or name == "stack_poll_total_ms"' - 'IsMatch(name, "tokio_rt_.*")' - 'IsMatch(name, "(inbound|outbound)_http_.*_frame_size_bytes")' - 'IsMatch(name, "(inbound|outbound)_tcp_detect_http_duration_seconds")' - 'IsMatch(name, "outbound_tcp_balancer_queue_.*")' - 'name == "scrape_duration_seconds" or name == "scrape_samples_scraped" or name == "scrape_samples_post_metric_relabeling"'
pipelines: metrics/linkerd: receivers: [prometheus] processors: [memory_limiter, resource/strip_service, transform/k8s, transform/deployment, transform/metadata_nullify, filter/drop_unused, resource/newrelic, batch] exporters: [otlp_http/newrelic]pipelines: service:の下にネストするのではなく、extraConfigのルートで定義する必要があります。Helmチャートテンプレートは、extraConfig.pipelinesをservice.pipelinesにマッピングします。
設定
- 次の表に従って
values.yamlファイルを更新してください:
| パラメータ | 説明 |
|---|---|
OTEL_RESOURCE_ATTRIBUTES | New Relicでの識別のために、k8s.cluster.nameをKubernetesクラスタ名に設定します。 |
filter/drop_unused | デフォルトでは、価値の低いLinkerdプロキシのメトリクスをドロップします。これらを再度有効にするには、このリストからエントリを削除してください |
- 更新した値を実行中のHelmリリースに適用してください。
$helm upgrade nr-k8s-otel-collector newrelic/nr-k8s-otel-collector \> --namespace newrelic --reuse-values -f values.yamlデータを検索する
- one.newrelic.com > All capabilities > All entitiesに移動します。
- クラスタ名を検索します。
- Linkerdエンティティを選択して、組み込みダッシュボードを開きます。
組み込みダッシュボードは、リクエスト率、レイテンシp50/p95/p99、成功率、TCP接続、mTLS証明書ステータス、コントロールプレーンのヘルス、およびメッシュ化されたポッドのインベントリをカバーします。詳細については、Linkerdデータの検索ドキュメントを参照してください。