Esta página instala el NRDOT Collector mediante Helm, lo configura para recopilar las métricas del proxy y del plano de control de Linkerd, y verifica que los datos fluyan a New Relic. Se espera que esto tome unos 15 minutos.
Compatibilidad y requisitos
Soportado
- Clúster de Kubernetes (EKS, GKE, AKS o autogestionado) con
kubectlconfigurado en él - Linkerd instalado y en buen estado (
linkerd checksuperados) - Configuración del clúster administrado por Helm
Necesita
Una clave de licencia de ingestade New Relic
Se completó la instalación base de Helm de OpenTelemetry para Kubernetes
Conectividad de red a los extremos OTLP de New Relic
Inyección habilitada en los namespaces que desea observar. Si no lo está, anótelos y reinícielos:
bash$kubectl annotate namespace <YOUR_NAMESPACE> linkerd.io/inject=enabled$kubectl rollout restart deployment -n <YOUR_NAMESPACE>
Sugerencia
El chart de Helm de NRDOT incluye kube-state-metrics y lo habilita de forma predeterminada, por lo que las entidades de workload de Kubernetes ya están correlacionadas con las métricas de Linkerd. No se necesita configuración adicional.
Instalar
Configure el nombre del clúster en el
values.yaml.deployment:envs:- name: OTEL_RESOURCE_ATTRIBUTESvalue: "k8s.cluster.name=<YOUR_CLUSTER_NAME>"Agregue la configuración de scrape y los procesadores de Linkerd a
deployment.configMap.extraConfigen elvalues.yaml.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 }transform/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, "")filter/drop_unused:error_mode: ignoremetrics: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:debe definirse en la raíz deextraConfig, no anidado enservice:. La plantilla del chart de Helm asignaextraConfig.pipelinesaservice.pipelines.
Configurar
Actualice el archivo
values.yamlsegún la siguiente tabla:Parámetro Descripción OTEL_RESOURCE_ATTRIBUTESEstablezca k8s.cluster.nameen el nombre de su clúster de Kubernetes para su identificación en New Relicfilter/drop_unusedDescarta las métricas de bajo valor del proxy de Linkerd de forma predeterminada. Elimine las entradas de esta lista para volver a habilitarlas Aplique los valores actualizados a la versión de Helm en ejecución.
bash$helm upgrade nr-k8s-otel-collector newrelic/nr-k8s-otel-collector \>--namespace newrelic --reuse-values -f values.yaml
Encuentra tus datos
Vaya a one.newrelic.com > All capabilities > All entities.
Busque el nombre del clúster.
Seleccione la entidad de Linkerd para abrir el dashboard integrado.
El dashboard integrado cubre la tasa de solicitudes, la latencia p50/p95/p99, la tasa de éxito, las conexiones TCP, el estado del certificado mTLS, el estado del plano de control y el inventario de pods en malla. Para obtener información detallada, consulte la documentación de Buscar datos de Linkerd.
Artículos relacionados
Rastreo distribuido de Linkerd con OpenTelemetry
Habilite la exportación de traza del proxy e instrumente los pods de la aplicación para correlacionar los spans de la malla con las trazas de APM.
Recopilar los logs del proxy de Linkerd
Opcionalmente, recopile los logs del contenedor sidecar
linkerd-proxy
.
Referencia de métricas
Lista completa de métricas y atributos de recursos de Linkerd recopilados por el OTel Collector.