La función de los checks de clúster ofrece la posibilidad de utilizar Autodiscovery y de realizar checks en servicios de clúster con equilibrio de carga, tales como los servicios de Kubernetes. Los checks de endpoint amplían este mecanismo para monitorizar todos los endpoints gestionados por un servicio de Kubernetes.
El Cluster Agent detecta las configuraciones de checks de endpoint basadas en anotaciones de Autodiscovery en los servicios de Kubernetes. A continuación, el Cluster Agent distribuye estas configuraciones a los Agents basados en nodos para que las ejecuten individualmente. Los checks de endpoint se distribuyen a los Agents que se ejecutan en el mismo nodo que el pod (o pods) que respalda el endpoint (o endpoints) del servicio monitorizado de Kubernetes. Gracias a esta lógica de distribución, el Agent puede añadir las etiquetas (tags) de pod y contenedor que ya ha recopilado para cada pod.
Los Agents conectan con el Cluster Agent cada diez segundos y obtienen las configuraciones de los checks que deben ejecutar. Las métricas procedentes de los checks de endpoint se envían con etiquetas de servicio, etiquetas de Kubernetes, etiquetas de host y la etiqueta kube_endpoint_ip, que se basa en la dirección IP evaluada.
Control de versiones:
Kubernetes admite esta función en el caso del Datadog Agent v6.12.0 y del Datadog Cluster Agent v1.3.0 (y sus respectivas versiones posteriores). A partir del Cluster Agent v1.4.0, el Cluster Agent convierte todos los checks de endpoint de un endpoint no respaldado por un pod en checks de clúster normales. Por tanto, debes activar la función de los checks de clúster (además de la función de los checks de endpoint) para aprovechar esta funcionalidad.
Nota: Si los pods que respaldan tu servicio son estáticos, tienes que añadir la anotación ad.datadoghq.com/endpoints.resolve. El Cluster Agent programa los checks como checks de endpoint y los distribuye a ejecutores de checks de clúster. Para saber cómo usar la anotación con el servidor de la API de Kubernetes, consulta este ejemplo.
En el siguiente ejemplo, se ha creado un despliegue de Kubernetes para NGINX con tres pods.
kubectl get pods --selector app=nginx -o wide
NAME READY STATUS RESTARTS AGE IP NODE
nginx-66d557f4cf-m4c7t 1/1 Running 0 3d 10.0.0.117 gke-cluster-default-pool-4658d5d4-k2sn
nginx-66d557f4cf-smsxv 1/1 Running 0 3d 10.0.1.209 gke-cluster-default-pool-4658d5d4-p39c
nginx-66d557f4cf-x2wzq 1/1 Running 0 3d 10.0.1.210 gke-cluster-default-pool-4658d5d4-p39c
También se ha creado un servicio que se enlaza con los pods a través de estos tres endpoints.
kubectl get service nginx -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
nginx ClusterIP 10.3.253.165 <none> 80/TCP 1h app=nginx
Mientras que los checks de clúster basados en un servicio comprueban la dirección IP única del servicio, los checks de endpoint están programados para comprobar cada uno de los tres endpoints asociados a este servicio.
Por diseño, los checks de endpoint se distribuyen hacia los Agents que se ejecutan en el mismo nodo que los pods que respaldan los endpoints del servicio nginx. En este ejemplo, los Agents que se ejecutan en los nodos gke-cluster-default-pool-4658d5d4-k2sn y gke-cluster-default-pool-4658d5d4-p39c lanzan los checks en estos pods nginx.
La distribución de checks de endpoint se habilita en el despliegue del Operator del Cluster Agent a través de la clave de configuración de features.clusterChecks.enabled:
Esta configuración habilita la distribución de los checks de clúster y de los checks de endpoint entre el Cluster Agent y los Agents.
La distribución de checks de endpoint se habilita por defecto en el despliegue de Helm del Cluster Agent a través de la clave de configuración de datadog.clusterChecks.enabled:
Habilita el proveedor de configuración y el proceso de escucha kube_endpoints en el Datadog Cluster Agent. Establece las variables de entorno DD_EXTRA_CONFIG_PROVIDERS y DD_EXTRA_LISTENERS:
Nota: Si los endpoints monitorizados no están respaldados por pods, debes habilitar los checks de clúster. Añade el proveedor de configuración y el proceso de escucha kube_services:
Habilita los proveedores de configuración endpointschecks en el Agent basado en nodos. Esto puede hacerse de dos formas:
Estableciendo la variable de entorno DD_EXTRA_CONFIG_PROVIDERS. Si tienes varios valores, se necesita una cadena en la que los valores estén separados entre sí por espacios:
DD_EXTRA_CONFIG_PROVIDERS="endpointschecks"
O añadiéndolo al archivo de configuración datadog.yaml:
Nota: Si los endpoints monitorizados no están respaldados por pods, debes habilitar los checks de clúster. Esto se puede hacer añadiendo el proveedor de configuración clusterchecks:
En la versión 1.18.0 (y posteriores) del Cluster Agent, puedes utilizar advanced_ad_identifiers y las variables de plantilla de Autodiscovery en la configuración de tu check para dirigirte a los endpoints de Kubernetes (ver ejemplo).
Nota: AD Annotations v2 se introdujo en el Datadog Agent v7.36 para simplificar la configuración de la integración. Si tu versión del Datadog Agent es anterior, usa AD Annotations v1.
Esta sintaxis admite una variable de plantilla%%host%% que se sustituye por la IP de cada endpoint. Las etiquetas kube_namespace, kube_service y kube_endpoint_ip se añaden automáticamente a las instancias.
Nota: La configuración personalizada de logs de los endpoints solo se admite durante la recopilación de logs con el socket de Docker, y no durante la recopilación de archivos de logs de Kubernetes.
Este servicio está asociado a los pods del despliegue de nginx. En función de esta configuración:
Se distribuye un check de endpoint basado en nginx para cada pod de NGINX que respalde este servicio. Este check lo ejecutan los Agents en los mismos nodos que los pods de NGINX (utilizando la IP del pod como %%host%%).
Se distribuye un check de clúster basado en http_check hacia un único Agent del clúster. Este check utiliza la IP del servicio como %%host%%, lo que equilibra automáticamente la carga en los respectivos endpoints.
Los checks se distribuyen con las etiquetas (tags) env:prod, service:my-nginx y version:1.19.0, correspondientes a las etiquetas (labels) del etiquetado de servicios unificado.
Esta sintaxis admite una variable de plantilla%%host%% que se sustituye por la IP de cada endpoint. Las etiquetas kube_namespace, kube_service y kube_endpoint_ip se añaden automáticamente a las instancias.
Nota: La configuración personalizada de logs de los endpoints solo se admite durante la recopilación de logs con el socket de Docker, y no durante la recopilación de archivos de logs de Kubernetes.
Este servicio está asociado a los pods del despliegue de nginx. En función de esta configuración:
Se distribuye un check de endpoint basado en nginx para cada pod de NGINX que respalde este servicio. Este check lo ejecutan los Agents en los mismos nodos que los pods de NGINX (utilizando la IP del pod como %%host%%).
Se distribuye un check de clúster basado en http_check hacia un único Agent del clúster. Este check utiliza la IP del servicio como %%host%%, lo que equilibra automáticamente la carga en los respectivos endpoints.
Los checks se distribuyen con las etiquetas (tags) env:prod, service:my-nginx y version:1.19.0, correspondientes a las etiquetas (labels) del etiquetado de servicios unificado.
apiVersion:v1kind:Servicemetadata:name:nginxlabels:app:nginxtags.datadoghq.com/env:"prod"tags.datadoghq.com/service:"my-nginx"tags.datadoghq.com/version:"1.19.0"annotations:ad.datadoghq.com/endpoints.check_names:'["nginx"]'ad.datadoghq.com/endpoints.init_configs:'[{}]'ad.datadoghq.com/endpoints.instances:| [
{
"name": "My Nginx Service Endpoints",
"nginx_status_url": "http://%%host%%:%%port%%/nginx_status"
}
]ad.datadoghq.com/service.check_names:'["http_check"]'ad.datadoghq.com/service.init_configs:'[{}]'ad.datadoghq.com/service.instances:| [
{
"name": "My Nginx Service",
"url": "http://%%host%%"
}
]ad.datadoghq.com/endpoints.logs:'[{"source":"nginx","service":"webapp"}]'spec:ports:- port:80protocol:TCPselector:app:nginx