Nginx

Neste documento, descrevemos como configurar a implantação do Google Kubernetes Engine para usar o Google Cloud Managed Service para Prometheus a fim de coletar métricas do Nginx. Esta página mostra como fazer o seguinte:

  • Configurar o exportador para o Nginx para relatar as métricas.
  • Configurar um recurso PodMonitoring para o serviço gerenciado para Prometheus a fim de coletar as métricas exportadas.
  • Instalar um painel no Cloud Monitoring para ver as métricas.
  • Configure regras de alertas para monitorar as métricas.

Estas instruções se aplicam somente ao usar a coleção gerenciada com o serviço gerenciado para Prometheus. Se você estiver usando a coleção autoimplantada, consulte o repositório de origem do exportador do Nginx para ver informações da instalação.

Estas instruções são um exemplo e devem funcionar na maioria dos ambientes do Kubernetes. Se você estiver com problemas para instalar um aplicativo ou exportador devido a políticas restritivas de segurança ou da organização, recomendamos consultar a documentação de código aberto para receber suporte.

Para mais informações, consulte Nginx.

Pré-requisitos

Para coletar métricas do Nginx usando o Managed Service para Prometheus e a coleta gerenciada, sua implantação precisa atender aos seguintes requisitos:

  • O cluster precisa executar a versão 1.21.4-gke.300 ou posterior do Google Kubernetes Engine.
  • É necessário executar o Managed Service para Prometheus com a coleta gerenciada ativada. Para mais informações, consulte Começar a usar a coleta gerenciada.

  • Para usar os painéis disponíveis no Cloud Monitoring para a integração do Nginx, use a versão 0.10.0 ou posterior do .nginx-prometheus-exporter

    Para mais informações sobre os painéis disponíveis, consulte Visualizar painéis.

Instalar o exportador do Nginx

Recomendamos instalar o exportador Nginx, nginx-prometheus-exporter, como um arquivo secundário para a carga de trabalho do Nginx. Para informações sobre o uso de arquivos secundários, consulte Aplicativos estendidos no Kubernetes com pods de múltiplos contêineres.

Para instalar o nginx-prometheus-exporter como um arquivo secundário para o Nginx, modifique a configuração do Nginx conforme mostrado no exemplo a seguir:

# Copyright 2022 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https:#www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx
data:
  default.conf: |
    server {
        listen       80 default_server;
        server_name  _;
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
+       location /status {
+           stub_status on;
+           access_log off;
+           allow 127.0.0.1;
+           allow 10.0.0.0/8;
+           allow 172.16.0.0/12;
+           allow 192.168.0.0/16;
+           deny all;
+       }
    }
---
apiVersion: apps/v1
kind: Deployment
spec:
  ...
  template:
    metadata:
      labels:
+       app.kubernetes.io/name: nginx
    spec:
      containers:
+     - name: nginx-exporter
+       image: nginx/nginx-prometheus-exporter:0.10.0
+       args:
+       - "-nginx.scrape-uri=http://localhost/status"
+       ports:
+       - containerPort: 9113
+         name: prometheus
+       readinessProbe:
+         httpGet:
+           path: /metrics
+           port: prometheus
+       livenessProbe:
+         httpGet:
+           path: /metrics
+           port: prometheus
      - name: nginx
        image: nginx:1.14.2
+       ports:
+       - containerPort: 80
+         name: http
+       readinessProbe:
+         httpGet:
+           path: /status
+           port: http
+       livenessProbe:
+         httpGet:
+           path: /status
+           port: http
+       volumeMounts:
+       - mountPath: /etc/nginx/conf.d/default.conf
+         subPath: default.conf
+         name: config
+     volumes:
+     - name: config
+       configMap:
+         name: nginx
+         items:
+         - key: default.conf
+           path: default.conf

Adicione à sua configuração todas as linhas precedidas pelo símbolo +.

Para aplicar as alterações de configuração de um arquivo local, execute o seguinte comando:

kubectl apply -n NAMESPACE_NAME -f FILE_NAME

Também é possível usar o Terraform para gerenciar as configurações.

Definir um recurso do PodMonitoring

Para descobrir valor desejado, o operador do serviço gerenciado para Prometheus, é necessário um recurso PodMonitoring que corresponde ao exportador do Nginx no mesmo namespace.

É possível usar a seguinte configuração do PodMonitoring:

# Copyright 2022 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: monitoring.googleapis.com/v1
kind: PodMonitoring
metadata:
  name: nginx
  labels:
    app.kubernetes.io/name: nginx
    app.kubernetes.io/part-of: google-cloud-managed-prometheus
spec:
  endpoints:
  - port: prometheus
    scheme: http
    interval: 30s
    path: /metrics
  selector:
    matchLabels:
      app.kubernetes.io/name: nginx

Verifique se os seletores do identificador e a porta correspondem aos seletores e à porta usados em Instalar o exportador do Nginx.

Para aplicar as alterações de configuração de um arquivo local, execute o seguinte comando:

kubectl apply -n NAMESPACE_NAME -f FILE_NAME

Também é possível usar o Terraform para gerenciar as configurações.

Definir regras e alertas

Use a configuração Rules a seguir para definir alertas nas métricas do Nginx:

# Copyright 2022 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: monitoring.googleapis.com/v1
kind: Rules
metadata:
  name: nginx-rules
  labels:
    app.kubernetes.io/component: rules
    app.kubernetes.io/name: nginx-rules
    app.kubernetes.io/part-of: google-cloud-managed-prometheus
spec:
  groups:
  - name: nginx
    interval: 30s
    rules:
    - alert: NginxDown
      annotations:
        description: |-
          Nginx instance is down
            VALUE = {{ $value }}
            LABELS: {{ $labels }}
        summary: Nginx down (instance {{ $labels.instance }})
      expr: nginx_up{job="nginx"} == 0
      for: 5m
      labels:
        severity: critical
    - alert: NginxDroppedConnections
      annotations:
        description: |-
         Too many dropped connections (> 5%)
            VALUE = {{ $value }}
            LABELS: {{ $labels }}
        summary: Number of dropped connections is high (instance {{ $labels.instance }})
      expr: (rate(nginx_connections_accepted{job="nginx"}[1m]) - rate(nginx_connections_handled{job="nginx"}[1m])) / rate(nginx_connections_accepted{job="nginx"}[1m]) > 0.05
      for: 5m
      labels:
        severity: warning
    - alert: NginxTrafficSpike
      annotations:
        description: |-
          Increase in total number of HTTP requests received (> 20%)
            VALUE = {{ $value }}
            LABELS: {{ $labels }}
        summary: Spike in HTTP traffic (instance {{ $labels.instance }})
      expr: rate(nginx_http_requests_total{job="nginx"}[1m])/ rate(nginx_http_requests_total{job="nginx"}[1m] offset 5m) > 1.2
      for: 5m
      labels:
        severity: warning
    - alert: NginxTrafficDrop
      annotations:
        description: |-
           Decrease in total number of HTTP requests received (> 20%)
            VALUE = {{ $value }}
            LABELS: {{ $labels }}
        summary: Drop in HTTP traffic (instance {{ $labels.instance }})
      expr: rate(nginx_http_requests_total{job="nginx"}[1m])/ rate(nginx_http_requests_total{job="nginx"}[1m] offset 5m) < 0.8
      for: 5m
      labels:
        severity: warning

Para aplicar as alterações de configuração de um arquivo local, execute o seguinte comando:

kubectl apply -n NAMESPACE_NAME -f FILE_NAME

Também é possível usar o Terraform para gerenciar as configurações.

Para mais informações sobre como aplicar regras ao cluster, consulte Avaliação e alerta de regras gerenciadas.

É possível ajustar os limites de alertas conforme seu aplicativo.

Verificar a configuração

Use o Metrics Explorer para verificar se você configurou corretamente o exportador do Nginx. Pode levar um ou dois minutos para que o Cloud Monitoring transfira as métricas.

Para verificar se as métricas foram transferidas, faça o seguinte:

  1. No Console do Google Cloud, acesse a página do  Metrics Explorer:

    Acesse o Metrics explorer

    Se você usar a barra de pesquisa para encontrar essa página, selecione o resultado com o subtítulo Monitoring.

  2. Na barra de ferramentas do painel do criador de consultas, selecione o botão  MQL ou  PromQL.
  3. Verifique se PromQL está selecionado na opção de ativar/desativar Idioma. A alternância de idiomas está na mesma barra de ferramentas que permite formatar sua consulta.
  4. Digite e execute a seguinte consulta:
    up{job="nginx", cluster="CLUSTER_NAME", namespace="NAMESPACE_NAME"}
    

Ver painéis

A integração do Cloud Monitoring inclui o painel Visão geral do Nginx Prometheus. Os painéis são instalados automaticamente ao configurar a integração. Também é possível visualizar visualizações estáticas de painéis sem instalar a integração.

Para ver um painel instalado, faça o seguinte:

  1. No console do Google Cloud, acesse a página  Painéis:

    Ir para Painéis

    Se você usar a barra de pesquisa para encontrar essa página, selecione o resultado com o subtítulo Monitoring.

  2. Selecione a guia Lista de painéis.
  3. Escolha a categoria Integrações.
  4. Clique no nome do painel, por exemplo, Visão geral do Nginx Prometheus.

Para acessar uma visualização estática do painel, faça o seguinte:

  1. No console do Google Cloud, acesse a página  Integrações:

    Acessar Integrações

    Se você usar a barra de pesquisa para encontrar essa página, selecione o resultado com o subtítulo Monitoring.

  2. Clique no filtro de plataforma de implantação do Kubernetes Engine.
  3. Localize a integração do Nginx e clique em Visualizar detalhes.
  4. Selecione a guia Painéis.

Solução de problemas

Para resolver problemas de transferências de métricas, consulte Problemas com a coleta de exportadores em Resolver problemas no processamento.