Esta página instala el OpenTelemetry Collector Contrib de la comunidad mediante Helm, lo configura para extraer las métricas del proxy y del plano de control de Linkerd, y verifica que los datos fluyan hacia 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
Helm instalado y configurado en el clúster
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>(Opcional) kube-state-metrics ejecutándose en su clúster, si desea que las entidades de workload de Kubernetes estén correlacionadas con las métricas de Linkerd. Si ya tiene instalada la integración de Kubernetes de New Relic, esto ya está resuelto.
Instalar
- Agregue el repositorio Helm de OpenTelemetry.
$helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts$ helm repo updateCree
values.yamly actualice las siguientes secciones:Establecer el modo en despliegue.
mode: deployment- Reemplace el repositorio de imágenes.
image: repository: otel/opentelemetry-collector-contrib- Configurar el rol de clúster.
clusterRole: create: true 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]- Establezca el nombre del clúster y la clave de licencia de ingesta de New Relic.
extraEnvs: - name: K8S_CLUSTER_NAME value: "<YOUR_CLUSTER_NAME>" - name: NEWRELIC_LICENSE_KEY value: "<YOUR_NR_INGEST_LICENSE_KEY>"- Reemplace toda la sección de
configcon la configuración de monitoreo de Linkerd.
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: resource/strip_service: attributes: - { key: service.name, action: delete } - { key: service.instance.id, action: delete } resource/cluster: attributes: - key: k8s.cluster.name value: "${env:K8S_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, "")
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]Sugerencia
Este chart no filtra las métricas de proxy de bajo valor de forma predeterminada. Si desea el mismo filtrado que aplica NRDOT, agregue un procesador filter/drop_unused. Consulte la página NRDOT con Helm para ver la lista de filtros.
Configurar
Actualice el archivo
values.yamlsegún la siguiente tabla:Parámetro Descripción <YOUR_CLUSTER_NAME>Reemplace con el nombre de su clúster de Kubernetes para su identificación en New Relic K8S_CLUSTER_NAMEEl nombre del clúster en extraEnvs. Este nombre de clúster es utilizado por el OTel Collector para identificar el clúster de Kubernetes en New RelicNEWRELIC_LICENSE_KEYSu clave de licencia de ingesta de New Relic configurada en extraEnvsfilter/drop_unusedNo se incluye de forma predeterminada en la configuración de este chart. Consulte NRDOT con Helm si desea el mismo filtrado de métricas de bajo valor Instale el chart de Helm
$helm upgrade my-opentelemetry-collector open-telemetry/opentelemetry-collector \> -f values.yaml -n newrelic --create-namespace --installEncuentra 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
Agregue un segundo release de Helm para recopilar los logs del sidecar
linkerd-proxy
.
Referencia de métricas
Lista completa de métricas y atributos de recursos de Linkerd recopilados por el OTel Collector.