nginx

O Nginx é um proxy reverso e servidor HTTP livre, de código aberto e de alto desempenho, bem como um servidor proxy IMAP/POP3. Para mais informações, acesse nginx.org.

Os receptores nginx podem coletar e ingerir registros e métricas da instância nginx.

Pré-requisitos

Para coletar e ingerir registros e métricas nginx, é preciso instalar o agente de operações versão 2.1.0 ou posterior.

Configurar a instância do nginx

É necessário ativar o módulo stub_status no arquivo de configuração nginx para configurar um URL acessível localmente, por exemplo, http://www.example.com/status para a página de status. Para ativar o módulo stub_status, conclua as seguintes etapas:

  1. Edite o arquivo status.conf ou crie o arquivo, se ele não existir. O arquivo está no diretório de configuração do nginx, normalmente encontrado em /etc/nginx/conf.d.

  2. Adicione as seguintes linhas à seção server:

    location /status {
        stub_status on;
    }
    

    O arquivo de configuração pode ser semelhante ao seguinte exemplo:

    server {
       listen 80;
       server_name mynginx.domain.com;
       location /status {
           stub_status on;
       }
       location / {
           root /dev/null;
       }
    }
    
  3. Atualize a configuração do nginx.

    sudo service nginx reload
    

Execute o comando a seguir para automatizar as etapas anteriores. Ele cria um arquivo status.conf, se ele não existir, ou substitui o arquivo atual, se existir. O comando ativa stub_status, recarrega o nginx e verifica se as informações esperadas são expostas por meio do endpoint.

sudo tee /etc/nginx/conf.d/status.conf > /dev/null << EOF
server {
    listen 80;
    server_name 127.0.0.1;
    location /status {
        stub_status on;
        access_log off;
        allow 127.0.0.1;
        deny all;
    }
    location / {
       root /dev/null;
    }
}
EOF
sudo service nginx reload
curl http://127.0.0.1:80/status

A saída de amostra é:

Active connections: 1
server accepts handled requests
 23 23 74
Reading: 0 Writing: 1 Waiting: 0

Como alternativa, em vez de usar um arquivo status.conf separado, você também pode incorporar as linhas ao arquivo nginx.conf principal, que normalmente fica em um dos seguintes diretórios: /etc/nginx , /usr/local/nginx/conf ou /usr/local/etc/nginx.

Configurar o agente de operações para nginx

Seguindo o guia para configurar o agente de operações, adicione os elementos necessários para coletar registros e métricas das instâncias nginx e reiniciar o agente. de dados.

Coleta de registros

Para ingerir registros do nginx, é preciso criar receptores para os registros que o nginx produz e criar um pipeline para os novos receptores. Para configurar um receptor para os registros nginx_access, especifique os seguintes campos:

Campo Padrão Descrição
type O valor precisa ser nginx_access.
include_paths [/var/log/nginx/access.log] Os arquivos de registro a serem lidos.
exclude_paths Os arquivos de registro a serem excluídos, se include_paths contiver um glob ou diretório.


Para configurar um receptor para os registros nginx_error, especifique os seguintes campos:

Campo Padrão Descrição
type O valor precisa ser nginx_error.
include_paths [/var/log/nginx/error.log] Os arquivos de registro a serem lidos.
exclude_paths Os arquivos de registro a serem excluídos, se include_paths contiver um glob ou diretório.

O que é registrado

Os registros logName de nginx_access e nginx_error são derivados dos IDs do receptor especificados na configuração. Os campos detalhados dentro de LogEntry são os seguintes.

Os registros nginx_access contêm o campo httpRequest:

Campo Tipo Descrição
httpRequest.protocol string Protocolo usado para a solicitação
httpRequest.referer string Conteúdo do cabeçalho Referer
httpRequest.remoteIp string Endereço IP do cliente
httpRequest.requestMethod string Método HTTP
httpRequest.requestUrl string URL da solicitação (normalmente apenas a parte do caminho do URL)
httpRequest.responseSize string (int64) Tamanho da resposta
httpRequest.status número Código de status HTTP
httpRequest.userAgent string Conteúdo do cabeçalho User-Agent
jsonPayload.host string Conteúdo do cabeçalho Host (geralmente não relatado pelo nginx)
jsonPayload.user string Nome de usuário autenticado da solicitação
timestamp string (Timestamp) Hora em que a solicitação foi recebida

As entradas de registro não contêm campos em branco ou ausentes.

Os registros
nginx_error contêm os seguintes campos no LogEntry:

Campo Tipo Descrição
jsonPayload.level string Nível de entrada de registro
jsonPayload.pid número ID do processo
jsonPayload.tid número ID da conversa
jsonPayload.connection número ID da conexão
jsonPayload.message string Mensagem de registro
jsonPayload.client string Endereço IP do cliente (opcional)
jsonPayload.server string Nome do servidor Nginx (opcional)
jsonPayload.request string Solicitação HTTP original (opcional)
jsonPayload.subrequest string Subsolicitação Nginx (opcional)
jsonPayload.upstream string URI de solicitação upstream (opcional)
jsonPayload.host string Cabeçalho do host (opcional)
jsonPayload.referer string Cabeçalho de referência (opcional)
severity string (LogSeverity) Nível de entrada de registro (traduzido)
timestamp string (Timestamp) Hora em que a entrada foi registrada

Para verificar se os registros são ingeridos, acesse o Explorador de registros e execute a seguinte consulta para ver os registros nginx:

resource.type="gce_instance"
logName=("projects/PROJECT_ID/logs/nginx_default_error" OR "projects/PROJECT_ID/logs/nginx_default_access")

Pode levar um ou dois minutos para os registros aparecerem no Explorador de registros.

Coleta de métricas

Para coletar métricas do nginx, é preciso criar um receptor para as métricas do nginx e, em seguida, criar um pipeline para o novo receptor. Para configurar um receptor para suas métricas nginx, especifique os campos a seguir:

Campo Padrão Descrição
type O valor precisa ser nginx.
stub_status_url http://localhost/status O URL exposto pelo módulo de status do stub nginx.
collection_interval 60s Um valor de time.Duration, como 30s ou 5m.

O que é monitorado?

A tabela a seguir fornece a lista de métricas que o agente de operações coleta da instância do nginx.

Tipo de métrica 
Tipo, tipo
Recursos monitorados
Rótulos
workload.googleapis.com/nginx.requests
CUMULATIVEINT64
gce_instance
 
workload.googleapis.com/nginx.connections_accepted
CUMULATIVEINT64
gce_instance
 
workload.googleapis.com/nginx.connections_handled
CUMULATIVEINT64
gce_instance
 
workload.googleapis.com/nginx.connections_current
GAUGEINT64
gce_instance
state

Para verificar se as métricas foram ingeridas, acesse o Metrics Explorer e execute a seguinte consulta na guia MQL.

fetch gce_instance
| metric 'workload.googleapis.com/nginx.requests'
| align rate(1m)
| every 1m

Pode levar um ou dois minutos para que as métricas apareçam no Metrics Explorer.

Exemplo de configuração e comando

O comando de exemplo cria a configuração para coletar e ingerir registros e métricas do nginx e reiniciar o agente de operações no Linux.

sudo tee /etc/google-cloud-ops-agent/config.yaml > /dev/null << EOF
logging:
  receivers:
    nginx_default_access:
      type: nginx_access
    nginx_default_error:
      type: nginx_error
  service:
    pipelines:
      nginx:
        receivers:
          - nginx_default_access
          - nginx_default_error
metrics:
  receivers:
    nginx_metrics:
      type: nginx
      stub_status_url: http://127.0.0.1:80/status
      collection_interval: 60s
  service:
    pipelines:
      nginx_pipeline:
        receivers:
          - nginx_metrics
EOF
sudo service google-cloud-ops-agent restart

Solução de problemas

Na maioria das distribuições, o nginx vem com o ngx_http_stub_status_module ativado. Verifique se o módulo está ativado executando o seguinte comando:

sudo nginx -V 2>&1 | grep -o with-http_stub_status_module

A saída esperada é with-http_stub_status_module, o que significa que o módulo está ativado. Em casos raros, se o comando não retornar nenhuma saída, será necessário compilar o nginx da origem com o -with-http_stub_status_module seguindo a documentação pública do nginx.