Configurar Logstash em Dropletes para reencaminhar logs do Nginx para o OpenSearch gerenciado

Introdução

Fazer o rastreamento dos logs do servidor web é essencial para executar seu site sem problemas, solucionar questões e entender o comportamento dos usuários. Se você estiver usando Nginx, ele produz logs de acesso e erros cheios de informações valiosas. Para gerenciar e analisar esses logs, você pode usar o Logstash para processar e encaminhá-los e o Managed OpenSearch do DigitalOcean para indexar e visualizar os dados.

Neste tutorial, nós vamos guiar você pelo processo de instalação do Logstash em uma Droplet, configurá-lo para coletar seus logs de Nginx e enviá-los para o Managed OpenSearch do DigitalOcean.

Pré-requisitos

Caso de Uso

Você pode precisar desta configuração se quiser:

  • Monitorar e resolver problemas: Rastrear o desempenho do servidor web e erros analisando logs em tempo real.
  • Analizar Desempenho: Obter insights sobre padrões de tráfego web e métricas de servidor.
  • Centralizar Logging: Agrupar logs de vários servidores Nginx em uma única instância OpenSearch para melhor gerenciamento.

Nota: O tempo de configuração deve ser de aproximadamente 30 minutos.

Passo 1 – Instalar Logstash em Droplet

O Logstash pode ser instalado usando arquivos binários disponíveis aqui ou repositórios de pacotes personalizados para o seu sistema operacional. Para gerenciamento e atualizações mais fáceis, é geralmente recomendado usar repositórios de pacotes. Você pode usar o gerenciador de pacotes APT em sistemas baseados em Debian, como Ubuntu, enquanto em sistemas baseados em Red Hat, como CentOS ou RHEL, você pode usar yum. Ambos os métodos garantem que o Logstash seja integrado corretamente à infraestrutura de gerenciamento de pacotes do seu sistema, simplificando a instalação e o manutenção.

Nesta seção, vamos guiar você pelo processo de instalação do Logstash usando ambos os gerenciadores de pacotes apt e yum, garantindo que você possa configurar o Logstash em sua Droplet independentemente da sua distribuição Linux.

Para encontrar o Sistema Operacional, execute o comando a seguir:

cat /etc/os-release

Para Sistemas Baseados em APT (Ubuntu/Debian)

1.Baixe e instale a Chave de Assinatura Pública:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic-keyring.gpg

2.Instale apt-transport-https se não estiver já instalado:

sudo apt-get install apt-transport-https

3.Adicione e salve a definição do repositório do Logstash à sua lista de fontes apt:

echo "deb [signed-by=/usr/share/keyrings/elastic-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list

Nota: Certifique-se de que você não use comandos add-apt-repository pois isso pode adicionar uma entrada deb-src que não é suportada. Se você encontrar um erro relacionado a uma entrada deb-src, exclua-a do arquivo /etc/apt/sources.list. Se você adicionou a entrada deb-src, você verá um erro como o seguinte:

Unable to find expected entry 'main/source/Sources' in Release file (Wrong sources.list entry or malformed file)

Se você apenas excluir a entrada deb-src do arquivo /etc/apt/sources.list, a instalação deve funcionar como esperado.

4. Atualize o índice de pacotes para incluir o novo repositório:

sudo apt-get update

5. Instale o Logstash usando o gerenciador de pacotes apt:

sudo apt-get install logstash

6. Inicie o Logstash e habilite-o para iniciar automaticamente na boot:

sudo systemctl start logstash
sudo systemctl enable logstash

O Logstash agora está instalado e executando no seu sistema.

Para Sistemas Baseados em YUM (CentOS/RHEL)

1. Baixe e instale a Chave de Assinatura Pública para o repositório do Logstash:

sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

2. Crie um arquivo de repositório para o Logstash em /etc/yum.repos.d/. Por exemplo, crie um arquivo chamado logstash.repo. Você pode copiar e colar o conteúdo abaixo para criar o arquivo e atualizar o conteúdo:

sudo tee /etc/yum.repos.d/logstash.repo > /dev/null <<EOF
[logstash-8.x]
name=Elastic repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF

O repositório está pronto para uso.

3. Instale o Logstash usando o gerenciador de pacotes YUM:

sudo yum install logstash

4. Inicie o Logstash e habilite-o para iniciar automaticamente na boot:

sudo systemctl start logstash
sudo systemctl enable logstash

Logstash agora está instalado e executando no seu sistema.

Passo 2 – Instalando o Plugin de Saída Open Search

Você pode instalar o plugin de saída OpenSearch executando o seguinte comando:

/usr/share/logstash/bin/logstash-plugin install logstash-output-opensearch

Você pode encontrar mais informações sobre o plugin neste repositório do plugin logstash-output-opensearch.

Passo 3 – Configurando Logstash para Enviar Logs do Nginx para OpenSearch

Um pipeline do Logstash consiste em três estágios principais: entrada, filtro e saída. Os pipelines do Logstash usam plugins. Você pode usar plugins da comunidade ou criar seus próprios.

  • Entrada: Este estado coleta dados de várias fontes. O Logstash suporta muitos plugins de entrada para lidar com fontes de dados como arquivos de log, bancos de dados, filas de mensagens e serviços em nuvem.
  • Filtro: Este estado processa e transforma os dados coletados no estado de entrada. Os filtros podem modificar, enriquecer e estruturar os dados para torná-los mais úteis e fáceis de análise.
  • Saída: Esta etapa envia dados processados para um destino. Destinos podem incluir bancos de dados, arquivos e armazenamentos de dados como o OpenSearch.

Agora vamos criar um pipeline.

1.Crie o arquivo de configuração do Logstash em /etc/logstash/conf.d/nginx-to-opensearch.conf com o seguinte conteúdo:

input {
  file {
    path => "/var/log/nginx/access.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => ["nginx_access"]
  }
  file {
    path => "/var/log/nginx/error.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => ["nginx_error"]
  }
}
filter {
  if "nginx_access" in [tags] {
    grok {
      match => { "message" => "%{IPORHOST:client_ip} - %{USER:ident} \[%{HTTPDATE:timestamp}\] \"%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:http_version}\" %{NUMBER:response} %{NUMBER:bytes} \"%{DATA:referrer}\" \"%{DATA:user_agent}\"" }
    }
    mutate {
      remove_field => ["message", "[log][file][path]", "[event][original]"]
    }
  } else if "nginx_error" in [tags] {
    grok {
      match => { "message" => "\[%{TIMESTAMP_ISO8601:timestamp}\] \[%{LOGLEVEL:level}\] \[%{DATA:pid}\] \[%{DATA:tid}\] %{GREEDYDATA:error_message}" }
    }
    mutate {
      remove_field => ["message", "[log][file][path]", "[event][original]"]
    }
  }
}
output {
  if "nginx_access" in [tags] {
    opensearch {
      hosts => ["https://<OpenSearch-Hostname>:25060"]
      user => "doadmin"
      password => "<your_password>"
      index => "nginx_access-%{+YYYY.MM.dd}"
      ssl => true
      ssl_certificate_verification => true
    }
  } else if "nginx_error" in [tags] {
    opensearch {
      hosts => ["https://<OpenSearch-Hostname>:25060"]
      user => "doadmin"
      password => "<your_password>"
      index => "nginx_error-%{+YYYY.MM.dd}"
      ssl => true
      ssl_certificate_verification => true
    }
  }
}

Substitua:

  • OpenSearch-Hostname pela hostname do seu servidor OpenSearch.
  • <your_password> pelo seu senha OpenSearch.

2.Aplique a nova configuração reiniciando o Logstash:

sudo systemctl restart logstash

3.Verifique os logs do Logstash para garantir que está processando e encaminhando dados corretamente:

sudo tail -f /var/log/logstash/logstash-plain.log

Análise da configuração nginx-to-opensearch.conf

ENTRADA

O bloco input configura dois inputs de arquivo para ler logs:

Logs do Nginx:
Caminhos:
/var/log/nginx/access.log (para logs de acesso)
/var/log/nginx/error.log (para logs de erro)
Posição Inicial: beginning – Lê do início dos arquivos de log.
Caminho do Sincedb: /dev/null – Desabilita o rastreamento para leitura contínua.
Tags:
["nginx_access"] para logs de acesso
["nginx_error"] para logs de erro.

Nota: Certifique-se que o serviço do Logstash tenha acesso aos caminhos de entrada.

FILTRO

O bloco filter processa logs baseado em suas tags:

Processamento de Logs:
Logs de Acesso:
Usa um filtro grok para analisar o formato de log de acesso, extraindo campos como client_ip, timestamp, method, request, http_version, response, bytes, referrer, e user_agent.
Remove o original message e certos campos de metadados.

Logs de Erro:
Verifica a tag nginx_error e aplica um filtro grok para extrair campos como timestamp, level, pid, tid, e error_message.
Também remove o message e campos de metadados.

SAÍDA

O bloco output roteia eventos para o OpenSearch baseado em suas tags:

Rotação para o OpenSearch:
Para ambos os logs de acesso e erros, especifica:
Hosts: URL do instanciamento do OpenSearch.
Usuário: doadmin para autenticação.
Senha: Sua senha do OpenSearch.
Índice:
nginx_access-%{+YYYY.MM.dd} para logs de acesso
nginx_error-%{+YYYY.MM.dd} para logs de erro
Configurações de SSL: Habilita o SSL e a verificação de certificado.

Passo 4 – Configurar OpenSearch

1.Abra seu navegador da Internet e vá até a URL do Painel OpenSearch:

https://<OpenSearch-Hostname>

Substituir OpenSearch-Hostname pelo hostname do seu servidor OpenSearch.

2.Crie um padrão de índice.
a. No menu lateral esquerdo, vá até Gerenciamento > Gerenciamento de Painéis > Padrões de Índice.
b. Clique em Criar padrão de índice no canto superior direito.
c. Insira nginx_access-* ou nginx_error-* como o padrão de índice para corresponder a todos os índices criados pelo Logstash e clique em Próximo passo.
d. Clique em Criar padrão de índice.

3.Verifique se o padrão de índice foi criado com sucesso e visível na lista de Padrões de Índice.

4.No menu lateral esquerdo, vá até Descobrir e selecione o padrão de índice que você criou (nginx_access-* ou nginx_error-*). Verifique se as entradas de log são visíveis e indexadas corretamente.

5.Crie visualizações e painéis. Visite Como Criar um Painel em OpenSearch para obter mais detalhes.

Resolução de problemas

Verificar Conexão

Você pode confirmar se o Logstash pode se conectar ao OpenSearch testando a conexão:

curl -u doadmin:your_password -X GET "https://<OpenSearch-Hostname>:25060/_cat/indices?v"

Substitua:

  • OpenSearch-Hostname pelo hostname do seu servidor OpenSearch.
  • <sua_senha> pelo seu senha do OpenSearch.

Ingestão de Dados

Você pode assegurar que os dados estão sendo indexados corretamente no OpenSearch usando o seguinte comando curl:

curl -u doadmin:your_password -X GET "http://<OpenSearch-Hostname>:25060/nginx-logs-*/_search?pretty"

Substitua:

  • OpenSearch-Hostname pelo hostname do seu servidor OpenSearch.
  • <sua_senha> pela sua senha do OpenSearch.

Configuração de Firewall e Rede

Certifique-se de que as regras de firewall e as configurações de rede permitem o tráfego entre o Logstash e o OpenSearch na porta 25060.

Conclusão

Neste guia, você aprendeu a configurar o Logstash para coletar e encaminhar registros do Nginx para o OpenSearch.

Você revisou como usar os gerenciadores de pacotes apt ou yum, dependendo da sua distribuição Linux, para obter o Logstash funcionando em sua Droplet. Você também criou e ajustou o arquivo de configuração do Logstash para garantir que os registros do Nginx são corretamente analisados e enviados para o OpenSearch. Em seguida, você configurou um padrão de índice no Dashboards do OpenSearch para verificar se os registros estão sendo indexados corretamente e são visíveis para análise. Com essas etapas concluídas, você deveria agora ter um conjunto funcional onde o Logstash coleta registros do Nginx e os envia para o OpenSearch. Este conjunto permite que você use as poderosas ferramentas de busca e visualização do OpenSearch para analisar seus registros de servidor.

Se você encontrar quaisquer problemas, confira as dicas de solução de problemas fornecidas e refira-se à documentação do Logstash e à documentação do OpenSearch para mais ajuda. O monitoramento regular manterá seu sistema de log running fluentemente e eficazmente.

Source:
https://www.digitalocean.com/community/tutorials/forward-nginx-logs-to-opensearch-using-logstash