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
- Droplet/s com servidor Web Apache instalado.
- 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
eapache_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.