Monitoramento de métricas personalizadas no AOM
O CCE permite que você carregue métricas personalizadas no AOM. O ICAgent em um nó chama periodicamente a API de monitoramento de métrica configurada em uma carga de trabalho para ler os dados de monitoramento e, em seguida, carrega os dados para o AOM.
A API de métrica personalizada de uma carga de trabalho pode ser configurada quando a carga de trabalho é criada. O procedimento a seguir usa uma aplicação Nginx como exemplo para descrever como relatar métricas personalizadas para o AOM.
- Preparar uma aplicação
Preparar uma imagem de aplicação. A aplicação deve fornecer uma API de monitoramento de métricas para o ICAgent coletar dados, e os dados de monitoramento devem estar em conformidade com as especificações do prometheus.
- Implementar aplicações e converter métricas de Nginx
Use a imagem de aplicação para implementar uma carga de trabalho em um cluster. Métricas de monitoramento personalizadas são relatadas automaticamente.
- Verificação
Vá para AOM para verificar se as métricas personalizadas foram coletadas com êxito.
Restrições
- O ICAgent é compatível com as especificações de dados de monitorização de Prometheus. As métricas personalizadas fornecidas pelos pods podem ser coletadas pelo ICAgent somente quando atendem às especificações de dados de monitoramento do Prometheus. Para mais detalhes, consulte Coleta de dados de monitoramento de Prometheus.
- O ICAgent suporta apenas métricas Gauge.
- O intervalo para o ICAgent chamar a API de métrica personalizada é de 1 minuto, o que não pode ser alterado.
Coleta de dados de monitoramento de Prometheus
Prometheus chama periodicamente a API de monitoramento de métricas (/metrics por padrão) de uma aplicação para obter dados de monitoramento. A aplicação precisa fornecer a API de monitoramento de métricas para a chamada do Prometheus, e os dados de monitoramento devem atender às seguintes especificações do Prometheus:
# TYPE nginx_connections_active gauge nginx_connections_active 2 # TYPE nginx_connections_reading gauge nginx_connections_reading 0
Prometheus fornece clientes em vários idiomas. Para obter detalhes sobre os clientes, consulte Prometheus CLIENT LIBRARIES. Para obter detalhes sobre como desenvolver um exportador, consulte WRITING EXPORTERS. A comunidade de Prometheus fornece vários exportadores de terceiros que podem ser usados diretamente. Para obter detalhes, consulte EXPORTERS AND INTEGRATIONS.
Preparar uma aplicação
A aplicação deve fornecer uma API de monitoramento de métricas para o ICAgent coletar dados, e os dados de monitoramento devem estar em conformidade com as especificações do Prometheus. Para mais detalhes, consulte Coleta de dados de monitoramento de Prometheus.
Este documento usa o Nginx como um exemplo para descrever como coletar dados de monitoramento. Existe um módulo chamado ngx_http_stub_status_module no Nginx, que fornece funções básicas de monitoramento. Você pode configurar o arquivo nginx.conf para fornecer uma interface para que sistemas externos acessem dados de monitoramento do Nginx.
- Faça logon em uma VM Linux que possa acessar a Internet e executar comandos do Docker.
- Crie um arquivo nginx.conf. Adicione a configuração do servidor em http para permitir que o Nginx forneça uma interface para os sistemas externos acessarem os dados de monitoramento.
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; } } }
- Use essa configuração para criar uma imagem e um arquivo Dockerfile.
vi Dockerfile
O conteúdo do Dockerfile é o seguinte:FROM nginx:1.21.5-alpine ADD nginx.conf /etc/nginx/nginx.conf EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
- Use este Dockerfile para criar uma imagem e enviá-la para o SWR. O nome da imagem é nginx:exporter. Para detalhes sobre como fazer upload de uma imagem, consulte Carregamento de uma imagem por meio de um cliente do Container Engine.
- No painel de navegação, escolha My Images e clique em Upload Through Client no canto superior direito. Na página exibida, clique em Generate a temporary login command e clique em para copiar o comando.
- Execute o comando de logon copiado na etapa anterior no nó. Se o logon for bem-sucedido, a mensagem "Login Succeeded" será exibida.
- Execute o seguinte comando para criar uma imagem chamada nginx. A versão da imagem é exportadora.
docker build -t nginx:exporter .
- Marque a imagem e envie-a para o repositório de imagens. Altere o endereço do repositório de imagens e o nome da organização com base nos seus requisitos.
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
- Veja as métricas da aplicação.
- Use nginx:exporter para criar uma carga de trabalho.
- Acesse o contêiner e use http://<ip_address>:8080/stub_status para obter dados de monitoramento do nginx. <ip_address> indica o endereço IP do contêiner. Informação semelhante à seguinte é exibida.
# 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
Implementar aplicações e converter métricas de Nginx
O formato dos dados de monitorização fornecidos pelo nginx:exporter não cumpre os requisitos do Prometheus. Converta o formato de dados para o formato exigido pelo Prometheus. Para converter o formato das métricas do Nginx, use nginx-prometheus-exporter, como mostrado na figura a seguir.
Implemente nginx:exporter e nginx-prometheus-exporter no mesmo 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
A imagem nginx/nginx-prometheus-exporter:0.9.0 precisa ser extraída da rede pública. Portanto, um endereço IP público precisa ser vinculado a cada nó no cluster.
nginx-prometheus-exporter requer um comando de inicialização. nginx-prometheus-exporter -nginx.scrape-uri=http://127.0.0.1:8080/stub_status é usado para obter dados de monitoramento do Nginx.
Além disso, adicione uma anotação metrics.alpha.kubernetes.io/custom-endpoints: '[{"api":"prometheus","path":"/metrics","port":"9113","names":""}]' ao pod.
Verificação
Depois que uma aplicação é implementada, você pode acessar o Nginx para criar alguns dados de acesso e verificar se os dados de monitoramento correspondentes podem ser obtidos no AOM.
- Obtenha o nome do pod do Nginx.
$ kubectl get pod NAME READY STATUS RESTARTS AGE nginx-exporter-78859765db-6j8sw 2/2 Running 0 4m
- Faça logon no contêiner e execute comandos para acessar o Nginx.
$ 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> / #
- Faça logon no AOM. No painel de navegação, escolha Monitoring > Metric Monitoring para exibir métricas relacionadas ao Nginx, por exemplo, nginx_connections_active.
Figura 3 Visualização de métricas de monitoramento