Supervisión de métricas personalizadas en AOM
CCE le permite cargar métricas personalizadas a AOM. El ICAgent en un nodo invoca periódicamente a la API de supervisión de métricas configurada en una carga de trabajo para leer datos de supervisión y luego carga los datos en AOM.
La API métrica personalizada de una carga de trabajo se puede configurar cuando se crea la carga de trabajo. Esta sección utiliza una aplicación de Nginx como ejemplo para describir cómo informar métricas personalizadas a AOM.
Notas y restricciones
- El ICAgent es compatible con las especificaciones de datos de monitorización de Prometheus. Las métricas personalizadas proporcionadas por los pods pueden ser recopiladas por el ICAgent solo cuando cumplen con las especificaciones de datos de monitoreo de Prometheus. Para obtener más información, véase Recopilación de datos de monitorización de Prometheus.
- El ICAgent solo admite métricas de Gauge.
- El intervalo para que ICAgent invoque a la API de métrica personalizada es de 1 minuto, que no se puede cambiar.
Recopilación de datos de monitorización de Prometheus
Prometheus invoca periódicamente a la API de monitorización métrica (/metrics por defecto) de una aplicación para obtener datos de monitorización. La aplicación debe proporcionar la API de monitorización métrica para que Prometheus invoque, y los datos de monitorización deben cumplir con las siguientes especificaciones de Prometheus:
# TYPE nginx_connections_active gauge nginx_connections_active 2 # TYPE nginx_connections_reading gauge nginx_connections_reading 0
Prometheus ofrece clientes en varios idiomas. Para obtener más información sobre los clientes, consulte Prometheus CLIENT LIBRARIES. Para obtener más información sobre cómo desarrollar un exportador, consulte WRITING EXPORTERS. La comunidad de Prometheus ofrece varios exportadores externos que pueden ser utilizados directamente. Para obtener más información, consulte EXPORTERS AND INTEGRATIONS.
Preparación de una aplicación
Esta sección utiliza Nginx como ejemplo para describir cómo recopilar datos de monitoreo. Las aplicaciones autodesarrolladas necesitan proporcionar API de monitoreo de métricas para que Prometheus pueda invocar. Para obtener más información, véase Recopilación de datos de monitorización de Prometheus.
Nginx tiene un módulo llamado ngx_http_stub_status_module que proporciona funciones básicas de monitorización. Puede configurar el archivo nginx.conf para proporcionar una API para que los sistemas externos accedan a los datos de supervisión de Nginx. Como se muestra en la siguiente figura, después de agregar la configuración del servidor a http, Nginx puede proporcionar una API para que los sistemas externos accedan a los datos de monitorización de Nginx.
user nginx; worker_processes auto; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; server { listen 8080; server_name localhost; location /stub_status { stub_status on; access_log off; } } }
Guarde la configuración anterior en el archivo nginx.conf y utilice la configuración para crear una nueva imagen. El archivo Dockerfile es el siguiente:
FROM nginx:1.21.5-alpine ADD nginx.conf /etc/nginx/nginx.conf EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
Utilice el archivo Dockerfile anterior para crear una imagen y subirla a SWR. El nombre de la imagen es nginx:exporter. Para obtener más información sobre cómo cargar una imagen, consulte Carga de una imagen a través de un cliente de motor de contenedores.
docker build -t nginx:exporter .
docker tag nginx:exporter swr.ap-southeast-1.myhuaweicloud.com/dev-container/nginx:exporter
docker push swr.ap-southeast-1.myhuaweicloud.com/dev-container/nginx:exporter
Después de ejecutar un contenedor con nginx:exporter de imagen, puede obtener datos de monitorización de Nginx llamando a http://<ip_address> 8080/stub_status. < ip_address > indica la dirección IP del contenedor. Los datos de seguimiento son los siguientes:
# curl http://127.0.0.1:8080/stub_status Active connections: 3 server accepts handled requests 146269 146269 212 Reading: 0 Writing: 1 Waiting: 2
Despliegue de una aplicación
El formato de datos de los datos de seguimiento proporcionados por nginx:exporter no cumple con los requisitos de Prometheus. Es necesario convertir el formato de datos al formato requerido por Prometheus. Para convertir el formato de las métricas de Nginx, utilice nginx-prometheus-exporter como se muestra en la siguiente figura.
Despliegue nginx:exporter y nginx-prometheus-exporter en el mismo pod.
kind: Deployment apiVersion: apps/v1 metadata: name: nginx-exporter namespace: default spec: replicas: 1 selector: matchLabels: app: nginx-exporter template: metadata: labels: app: nginx-exporter annotations: metrics.alpha.kubernetes.io/custom-endpoints: '[{"api":"prometheus","path":"/metrics","port":"9113","names":""}]' spec: containers: - name: container-0 image: 'nginx:exporter' # Replace it with the address of the image you uploaded to SWR. resources: limits: cpu: 250m memory: 512Mi requests: cpu: 250m memory: 512Mi - name: container-1 image: 'nginx/nginx-prometheus-exporter:0.9.0' command: - nginx-prometheus-exporter args: - '-nginx.scrape-uri=http://127.0.0.1:8080/stub_status' imagePullSecrets: - name: default-secret
La imagen nginx/nginx-prometheus-exporter:0.9.0 debe extraerse de la red pública. Por lo tanto, cada nodo del clúster debe tener una dirección IP pública.
nginx-prometheus-exporter requiere un comando de inicio. Se utiliza nginx-prometheus-exporter -nginx.scrape-uri=http://127.0.0.1:8080/stub_status para obtener datos de monitorización de Nginx.
Además, debe agregar una anotación metrics.alpha.kubernetes.io/custom-endpoints:'[{"api":"prometheus","path":"/metrics","port":"9113","names":""}]' al pod.
Verificación
Después de desplegar una aplicación, puede acceder a Nginx para construir algunos datos de acceso y comprobar si los datos de supervisión correspondientes se pueden obtener en AOM.
$ kubectl get pod NAME READY STATUS RESTARTS AGE nginx-exporter-78859765db-6j8sw 2/2 Running 0 4m $ kubectl exec -it nginx-exporter-78859765db-6j8sw -- /bin/sh Defaulting container name to container-0. Use 'kubectl describe pod/nginx-exporter-78859765db-6j8sw -n default' to see all of the containers in this pod. / # curl http://localhost <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> html { color-scheme: light dark; } body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html> / #
Puede ver que se ha accedido a Nginx una vez.
Inicie sesión en AOM. En el panel de navegación, elija Monitoring > Metric Monitoring. Puede ver las métricas relacionadas con Nginx, por ejemplo, nginx_connections_active.