Configurar Logstash em Droplets para Encaminhar Logs do Nginx para OpenSearch Gerenciado

Introdução

Fazer o rastreamento dos logs do servidor web é fundamental para o funcionamento fluído do seu site, a resolução de problemas e o entendimento do 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 processá-los e encaminhá-los e o OpenSearch gerenciado pela 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 do Nginx e enviá-los para o OpenSearch gerenciado pela 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 através do análise de logs em tempo real.
  • Analisar Desempenho: Obter insights sobre padrões de tráfego web e métricas de servidor.
  • Centralizar Logs: Agregar 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 mesmo que você use uma distribuição Linux diferente.

Para encontrar o Sistema Operacional, execute o seguinte comando:

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 para 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 não usar 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 conforme 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 estágio coleta dados de várias fontes. O Logstash suporta vários 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 estágio processa e transforma os dados coletados no estágio de entrada. Os filtros podem modificar, enriquecer e estruturar os dados para torná-los mais úteis e fáceis de analisar.
  • Resultado: Este estágio envia dados processados para um destino. Destinos podem incluir bases de dados, arquivos e armazenamentos de dados como 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 pelo hostname do seu servidor OpenSearch.
  • <your_password> pela sua senha do 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 de 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 Logstash tenha acesso aos caminhos de entrada.

FILTRO

O bloco filter processa logs com base em suas tags:

Processamento de Logs:
Logs de Acesso:
Usa o 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 o 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 encaminha eventos para o OpenSearch com base em suas tags:

Encaminhamento 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>

Substitua OpenSearch-Hostname pelo hostname do seu servidor OpenSearch.

2.Crie um padrão de índice.
a. No painel 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 painel lateral esquerdo, vá até Explorar 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.

Tratamento de problemas

Verificar Conexão

Você pode verificar 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 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 OpenSearch.

Configuração de Firewall e Rede

Asegure-se que as regras de firewall e as configurações de rede permitam 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 logs 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 logs 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 que os logs estão sendo indexados corretamente e são visíveis para análise. Com estas etapas concluídas, você deveria agora ter um conjunto funcional onde o Logstash coleta logs 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 logs de servidor.

Se você encontrar quaisquer problemas, verifique as dicas de solução de problemas fornecidas e consulte a documentação do Logstash e a documentação do OpenSearch para mais ajuda. O monitoramento regular manterá seu sistema de logando funcionando fluentemente e eficazmente.

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