Encaminhando Logs do Apache para OpenSearch via Logstash

Introdução

O gerenciamento eficiente de logs de servidor web é crucial para manter o desempenho do seu site, resolver problemas e obter insights sobre o comportamento dos usuários. O Apache é um dos servidores web mais populares e gera logs de acesso e erro que contêm informações valiosas. Para gerenciar e analisar esses logs de forma eficiente, você pode usar o Logstash para processar e encaminhá-los para o OpenSearch gerenciado pela DigitalOcean para indexação e visualização.

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

Pré-requisitos

  1. Droplet/s com o Servidor Web Apache instalado.
  2. Cluster OpenSearch Gerenciado

Passo 1 – Instalar o Logstash

O Logstash pode ser instalado usando arquivos binários ou através de repositórios de pacotes. Para gerenciamento e atualizações mais fáceis, é geralmente recomendado usar repositórios de pacotes.

Nesta seção, vamos guiar você através da instalação do Logstash em sua Droplet usando ambos os gerenciadores de pacotes APT e YUM.

Vamos identificar o OS:

cat /etc/os-release

Para Sistemas Baseados em APT (Ubuntu/Debian)

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

Você pode precisar instalar o pacote apt-transport-https no Debian antes de prosseguir:

sudo apt-get install apt-transport-https

Salve a definição do repositório em /etc/apt/sources.list.d/elastic-8.x.list:

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

Use o método echo descrito acima para adicionar o repositório do Logstash. Não use add-apt-repository pois isso adicionará uma entrada deb-src também, mas nós não fornecemos um pacote de origem. 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)

Apenas exclua a entrada deb-src do arquivo /etc/apt/sources.list e a instalação deve funcionar como esperado.

Execute sudo apt-get update e o repositório estará pronto para uso. Você pode instalá-lo com:

sudo apt-get update && sudo apt-get install logstash

Para Sistemas Baseados em YUM (CentOS/RHEL)

Baixe e instale a chave de assinatura pública:

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

Adicione o seguinte em seu arquivo /etc/yum.repos.d/logstash.repo. Você pode usar o ‘tee’ para atualizar e criar o arquivo.

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

Seu repositório está pronto para uso. Você pode instalá-lo com:

sudo yum install logstash

Para mais informações, consulte a guia Instalando o Logstash.

Passo 2 – Configurando o Logstash para Enviar Logs para o OpenSearch

Uma pipeline do Logstash consiste em três estágios principais: entrada, filtro e saída. As pipelines do Logstash fazem uso de plugins. Você pode usar plugins da comunidade ou criar os 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 na nuvem.

  • Filtro: Esta etapa processa e transforma os dados coletados na etapa de entrada. Os filtros podem modificar, enriquecer e estruturar os dados para torná-los mais úteis e facilitar a análise.

  • Saída: Esta etapa envia os dados processados a um destino. Os destinos podem incluir bancos de dados, arquivos e armazenamentos de dados como o OpenSearch.

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

O plugin de saída OpenSearch pode ser instalado executando o seguinte comando:

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

Mais informações podem ser encontradas neste repositório logstash-output-opensearch-plugin.

Agora vamos criar uma pipeline:

Crie um novo arquivo na pasta /etc/logstash/conf.d/ chamado apache_pipeline.conf e copie o conteúdo seguinte.

input {
  file {
    path => "/var/log/apache2/access.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => "apache_access"
  }

  file {
    path => "/var/log/apache2/error.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => "apache_error"
  }
}

filter {
  if "apache_access" in [tags] {
    grok {
        match => { "message" => "%{HTTPD_COMBINEDLOG}" }
    }
    mutate {
        remove_field => [ "message","[log][file][path]","[event][original]" ]
      }
   } else {
   grok {
        match => { "message" => "%{HTTPD24_ERRORLOG}" }
    }
   }
}

output {
  if "apache_access" in [tags] {
  opensearch {
    hosts       => "https://<OpenSearch-Hostname>:25060"
    user        => "doadmin"
    password    => "<your_password>"
    index       => "apache_access"
    ssl_certificate_verification => true
  }

  } else {
  opensearch {
    hosts       => "https://<OpenSearch-Hostname>:25060"
    user        => "doadmin"
    password    => "<your_password>"
    index       => "apache_error"
    ssl_certificate_verification => true
  }
  }
}

Substitua <OpenSearch_Host> pelo hostname do seu servidor OpenSearch e <OpenSearch_Password> pela sua senha OpenSearch.

Vamos analisar a configuração acima.

  • ENTRADA: Isso é usado para configurar uma fonte de eventos. O plugin de entrada ‘file’ está sendo usado aqui.

  • path => “/var/log/apache2/access.log” : Especifica o caminho para o arquivo de log de acesso do Apache que o Logstash lerá.

    Certifique-se que o serviço do Logstash tenha acesso ao caminho de entrada.

  • start_position => “beginning”: Define onde o Logstash deve começar a ler o arquivo de log. “beginning” indica que o Logstash deve começar a processar o arquivo do início, em vez do final

  • sincedb_path => “/dev/null”: Especifica o caminho para um arquivo sincedb. Os arquivos sincedb são usados pelo Logstash para manter registro da posição atual em arquivos de log, permitindo que ele continue de onde parou em caso de reinícios ou falhas.

  • tags => “apache_access”: Atribui uma etiqueta a eventos lidos a partir desta entrada. Etiquetas são úteis para identificar e filtrar eventos no Logstash, frequentemente usadas em estágios posteriores de saída ou filtragem da configuração. Estamos usando etiquetas para o último

  • FILTRO: usado para processar os eventos.

    Iniciando com condicionais:

    (se "apache_access" estiver em [tags]):
    

    Isso verifica se a tag apache_access existe no campo [tags] dos eventos de log recebidos. Nós usamos essa condicional para aplicar o filtro GROK apropriado para logs de acesso e erros do Apache.

  • Filtro Grok (para Logs de Acesso do Apache):

    grok {
        match => { "message" => "%{HTTPD_COMBINEDLOG}" }
    }
    

    O filtro grok %{HTTPD_COMBINEDLOG} é um padrão predefinido no Logstash usado para analisar o formato de log de acesso combinado do Apache. Isso extrai campos como endereço IP, horário, método HTTP, URI, código de estado, etc., do campo mensagem dos eventos entrantes.

  • Filtro de Mutação Remover (opcional): Após as logs do Apache serem analisadas, usamos mutate-remove para remover certos campos.

    mutate {
        remove_field => [
            "message",
            "[log][file][path]",
            "[event][original]"
        ]
    }
    
  • Condição Else: O bloco else é executado se a tag apache_access não estiver presente em [tags]. Este bloco else contém outro filtro GROK para logs de erros do Apache.

    grok {
        match => { "message" => "%{HTTPD24_ERRORLOG}" }
    }
    

    Este filtro grok %{HTTPD24_ERRORLOG} analisa mensagens que correspondem ao formato de log de erros do Apache. Ele extrai campos relevantes para logs de erro, como timestamp, nível de log, mensagem de erro, etc.

    Padrões GROK podem ser encontrados em: https://github.com/logstash-plugins/logstash-patterns-core/tree/main/patterns.

  • SAÍDA: O plugin de saída envia eventos para um destino específico.

    O bloco de saída começa com uma condição if. Nós estamos usando condicionais if aqui

    se "apache_access" estiver [tags] {}
    

    Esta condição if é usada para rotear logs para o OpenSearch em dois índices separados, apache_error e apache_access.

    Vamos explorar o plugin de Saída OpenSearch:

    hosts            => "https://XXX:25060"  Seu nome de host do Open search
    user             => "doadmin"            Seu usuário do Open search
    password         => "XXXXX"              Senha do OpenSearch
    index            => "apache_error"       Nome do índice no OpenSearch
    ssl_certificate_verification => true     Habilita a verificação de certificado SSL
    

Passo 4 – Iniciar o Logstash

Uma vez que a Pipeline esteja configurada, inicie o serviço Logstash:

systemctl enable logstash.service
systemctl start logstash.service
systemctl status logstash.service

Passo 5 – Solução de problemas

Verificar Conectividade

Você pode verificar se o Logstash pode se conectar ao OpenSearch testando a conectividade:

curl -u your_username:your_password -X GET "https://your-opensearch-server:25060/_cat/indices?v"

Substitua <seu-servidor-opensearch> com o nome do host do seu servidor OpenSearch e <seu_usuario>, <sua_senha> com suas credenciais do OpenSearch.

Ingestão de Dados

Verifique se os dados estão sendo indexados corretamente no OpenSearch:

curl -u your_username:your_password -X GET "http://your-opensearch-server:25060/<your-index-name>/_search?pretty"

Substitua <seu-servidor-opensearch> com o nome do host do seu servidor OpenSearch e <seu_usuario>, <sua_senha> com suas credenciais do OpenSearch. Da mesma forma, <seu_nome-de-indice> com o nome do índice.

Configuração de Firewall e Rede

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

Logs

Os logs do Logstash podem ser encontrados em /var/log/logstash/logstash-plain.log

Para mais detalhes, consulte Resolução de Problemas.

Conclusão

Neste guia, passamos pela configuração do Logstash para coletar e encaminhar logs do Apache para o OpenSearch. Aqui está um rápido resumo do que cobrimos:

Instalando o Logstash: Cobrimos como usar os gerenciadores de pacotes APT ou YUM, dependendo da sua distribuição Linux, para instalar o Logstash em seu Droplet.

Configurando o Logstash: Criamos e ajustamos o arquivo de configuração do Logstash para garantir que os logs do Apache sejam corretamente analisados e enviados para o OpenSearch.

Verificando no OpenSearch: Configuramos um padrão de índice no OpenSearch Dashboards para confirmar que seus logs estão sendo indexados corretamente e estão visíveis para análise.

Com esses passos concluídos, você deve agora ter uma configuração funcional onde o Logstash coleta logs do Apache e os envia para o OpenSearch.

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