Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Centro de ayuda/ Cloud Container Engine/ Guía del usuario/ Monitoreo y alarma/ Supervisión de métricas personalizadas en AOM
Actualización más reciente 2024-09-10 GMT+08:00

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.