Pesquisa de site

Encaminhar logs do Apache para OpenSearch via Logstash


Introdução

O gerenciamento eficaz de logs do servidor web é crucial para manter o desempenho do seu site, solucionar problemas e obter insights sobre o comportamento do usuário. Apache é um dos servidores web mais populares. Ele gera logs de acesso e erros que contêm informações valiosas. Para gerenciar e analisar esses logs com eficiência, você pode usar o Logstash para processá-los e encaminhá-los para o Managed OpenSearch da DigitalOcean para indexação e visualização.

Neste tutorial, orientaremos você na instalação do Logstash em um Droplet, configurando-o para coletar seus logs do Apache e enviando-os para o Managed OpenSearch para análise.

Pré-requisitos

  1. Droplet/s com servidor Web Apache instalado.
  2. Cluster OpenSearch gerenciado

Passo 1 - Instalando o Logstash

O Logstash pode ser instalado usando arquivos binários OU por meio dos repositórios de pacotes. Para facilitar o gerenciamento e as atualizações, geralmente é recomendado o uso de repositórios de pacotes.

Nesta seção, orientaremos você na instalação do Logstash em seu Droplet usando os gerenciadores de pacotes APT e YUM.

Vamos identificar o sistema operacional:

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

Pode ser necessário instalar o pacote apt-transport-https no Debian antes de continuar:

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 Logstash. Não use add-apt-repository pois isso adicionará uma entrada deb-src também, mas não fornecemos um pacote fonte. 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)

Basta excluir a entrada deb-src do arquivo /etc/apt/sources.list e a instalação deverá funcionar conforme o 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 ‘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 obter mais informações, consulte o guia Instalando o Logstash.

Etapa 2 - Configurando o Logstash para enviar logs ao OpenSearch

Um pipeline Logstash consiste em três estágios principais: entrada, filtro e saída. Os pipelines do Logstash usam plug-ins. Você pode usar plug-ins da comunidade ou criar o seu próprio.

  • Entrada: Esta etapa coleta dados de diversas fontes. Logstash oferece suporte a vários plug-ins de entrada para lidar com fontes de dados como arquivos de log, bancos de dados, filas de mensagens e serviços em 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 fáceis de analisar.

  • Saída: Este estágio envia os dados processados para um destino. Os destinos podem incluir bancos de dados, arquivos e armazenamentos de dados como OpenSearch.

Etapa 3 - Instalando o plug-in de saída de pesquisa aberta

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 um pipeline:

Crie um novo arquivo no caminho /etc/logstash/conf.d/ chamado apache_pipeline.conf e copie o conteúdo a seguir.

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 pelo nome do host do seu servidor OpenSearch e pela sua senha do OpenSearch.

Vamos analisar a configuração acima.

  • INPUT: Isto é usado para configurar uma fonte para os eventos. O plugin de entrada ‘file’ é usado aqui.

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

    Certifique-se de que o serviço 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 desde o início, e não desde o final

  • sincedb_path => “/dev/null ”: Especifica o caminho para um arquivo sincedb. Os arquivos Sincedb são usados pelo Logstash para rastrear a posição atual nos arquivos de log, permitindo que ele retome de onde parou em caso de reinicializações ou falhas.

  • tags => “apache_access ”: Atribui uma tag aos eventos lidos nesta entrada. As tags são úteis para identificar e filtrar eventos no Logstash, geralmente usadas downstream na saída ou nos estágios de filtragem da configuração. Estamos usando tags para o último

  • FILTER: é usado para processar os eventos.

    Começando com condicionais:

    (if "apache_access" in [tags]):
    

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

  • Filtro Grok (para logs de acesso 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, carimbo de data/hora, método HTTP, URI, código de status, etc., do campo de mensagem de eventos recebidos.

  • Filtro Mutate Remove (opcional): Depois que os logs do Apache são analisados, usamos mutate-remove para remover determinados 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 do log de erros do Apache. Ele extrai campos relevantes para logs de erros, como carimbo de data/hora, nível de log, mensagem de erro, etc.

    Os 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. Estamos usando condicionais if aqui

    if "apache_access" in [tags] {}
    

    Este if condicional é usado para rotear logs para o OpenSearch para dois índices separados, apache_error e apache_access.

    Vamos explorar o plugin OpenSearch Output:

    hosts            => "https://XXX:25060"  Your Open search Hostname
    user             => "doadmin"            Your Open search Username
    password         => "XXXXX"              OpenSearch Password
    index            => "apache_error"       Index name in OpenSearch
    ssl_certificate_verification => true     Enabled SSL certificate verification
    

Passo 4 - Inicie o Logstash

Depois que o Pipeline estiver configurado, inicie o serviço Logstash:

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

Etapa 5 – Solução de problemas

Verifique a 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> pelo nome de host do seu servidor OpenSearch e <seu_nome de usuário>, <sua_senha> pelas suas credenciais do OpenSearch.

Ingestão de dados

Certifique-se de que os dados estejam 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> pelo nome de host do seu servidor OpenSearch e <seu_nome de usuário>, <sua_senha> pelas suas credenciais do OpenSearch. Da mesma forma, <nome-do-seu-índice> 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 Logstash e OpenSearch na porta 25060.

Registros

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

Para obter detalhes, consulte Solução de problemas.

Conclusão

Neste guia, explicamos como configurar o Logstash para coletar e encaminhar logs do Apache para o OpenSearch. Aqui está uma rápida recapitulação do que cobrimos:

Instalando o Logstash: Abordamos 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 analisados corretamente e enviados ao OpenSearch.

Verificação no OpenSearch: configuramos um padrão de índice no OpenSearch Dashboards para confirmar se seus logs estão sendo indexados corretamente e estão visíveis para análise.

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

Artigos relacionados: