Instalação e configuração do Elasticsearch 6
Para instalar o Elasticsearch, siga as diretrizes oficiais. Altere o arquivo de configuração elasticsearch.yml definindo network.host: 0.0.0.0 para permitir acesso externo. Verifique a instalação acessando http://endereco-do-servidor:9200.
Configuração do plugin Head para gerenciamento de clusters
O plugin Head fornece uma interface web para explorar e gerenciar clusters do Elasticsearch. Instale as dependências necessárias: Node.js, npm e Git. Clone o repositório do plugin Head e instale suas dependências com npm. Modifique o arquivo Gruntfile.js para permitir acesso de qualquer IP adicionando hostname: '*' nas opções do servidor. Atualize o endereço de conexão no arquivo app.js para apontar para o servidor Elasticsearch. No Elasticsearch, ative o acesso cross-origin adicionnado ao elasticsearch.yml:
http.cors.enabled: true
http.cors.allow-origin: "*"
Abra a porta 9100 no firewall e inicie o plugin com node_modules/grunt/bin/grunt server. Acesse a interface via http://endereco-do-servidor:9100.
Instalação do Kibana para visualização de dados
Baixe a versão correspondente do Kibana, extraia o pacoto e mova para um diretório como /usr/local/kibana. Edite o arquivo de configuração kibana.yml, definindo server.host e elasticsearch.url com o IP do servidor. Abra a porta padrão 5601 no firewall e inicie o Kibana com /usr/local/kibana/bin/kibana. Acesse via http://endereco-do-servidor:5601.
Coleta de logs do Nginx com Filebeat
Configure o Filebeat para coletar logs de acesso do Nginx. Exemplo básico de configuração no arquivo filebeat.yml:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
output.elasticsearch:
hosts: ["endereco-elasticsearch:9200"]
Para análise estruturada, converta os logs do Nginx para formato JSON. Modifique a configuração do log no Nginx:
log_format json_logs '{"timestamp":"$time_iso8601",'
'"host":"$server_addr",'
'"client_ip":"$remote_addr",'
'"request_size":$body_bytes_sent,'
'"response_time":$request_time,'
'"status":"$status"}';
No Filebeat, ative a aálise JSON:
filebeat.inputs:
- type: log
enabled: true
json.keys_under_root: true
json.overwrite_keys: true
paths:
- /var/log/nginx/access.log
Personalize os nomes dos índices no Elasticsearch e ajuste os templates para refletir a estrutura dos dados.
Coleta de logs de múltiplas fontes
Para coletar logs de acesso e erro do Nginx separadamente, use tags no Filebeat e direcione para índices distintos:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
tags: ["nginx_access"]
- type: log
enabled: true
paths:
- /var/log/nginx/error.log
tags: ["nginx_error"]
output.elasticsearch:
hosts: ["endereco-elasticsearch:9200"]
indices:
- index: "nginx-access-%{[beat.version]}-%{+yyyy.MM}"
when.contains:
tags: "nginx_access"
- index: "nginx-error-%{[beat.version]}-%{+yyyy.MM}"
when.contains:
tags: "nginx_error"
Para logs do Tomcat, formate-os em JSON e configure o Filebeat similarmente, usando tags como ["tomcat_access"].
Tratamento de logs de múltiplas linhas
Logs de aplicações Java muitas vezes são multilinha. Use configurações de padrão no Filebeat para agrupar linhas:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/application.log
multiline.pattern: '^\d{4}-\d{2}-\d{2}'
multiline.negate: true
multiline.match: after
Isso combinará linhas que não iniciam com uma data como parte do evento anterior.
Coleta de logs de contêineres Docker
Para coletar logs de contêineres Docker, configure o Filebeat para ler os arquivos de log JSON do Docker. Use labels nos contêineres via Docker Compose para distinção:
version: '3'
services:
app_web:
image: nginx
labels:
log_service: web
logging:
options:
labels: "log_service"
No Filebeat, leia os logs do Docker e use os labels para indexação:
filebeat.inputs:
- type: log
enabled: true
paths:
- "/var/lib/docker/containers/*/*-json.log"
json.keys_under_root: true
json.overwrite_keys: true
output.elasticsearch:
hosts: ["endereco-elasticsearch:9200"]
indices:
- index: "docker-web-%{[beat.version]}-%{+yyyy.MM}"
when.contains:
attrs.log_service: "web"
Uso de Redis como cache para logs
Para arquiteturas maiores, use o Redis como buffer entre o Filebeat e o Logstash. Configure o Filebeat para enviar logs ao Redis:
output.redis:
hosts: ["endereco-redis:6379"]
key: "filebeat_logs"
db: 0
No Logstash, leia os logs do Redis e processe-os:
input {
redis {
host => "endereco-redis"
key => "filebeat_logs"
data_type => "list"
}
}
filter {
mutate {
convert => { "response_time" => "float" }
}
}
output {
elasticsearch {
hosts => ["endereco-elasticsearch:9200"]
index => "processed-logs-%{+yyyy.MM.dd}"
}
}
Use condicionais no Logstash para direcionar logs a índices diferentes com base em campos.
Utilização de módulos nativos do Filebeat
O Filebeat oferece módulos para fontes comuns como Nginx. Ative o módulo com ./filebeat modules enable nginx. Configure os caminhos dos logs no arquivo modules.d/nginx.yml:
- module: nginx
access:
enabled: true
var.paths: ["/var/log/nginx/access.log"]
error:
enabled: true
var.paths: ["/var/log/nginx/error.log"]
Isso automatiza a análise e indexação, mas oferece menos flexibilidade do que configurações personalizadas.
Coleta de logs do sistema Linux
Configure o Filebeat para coletar logs do sistema:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/syslog
- /var/log/auth.log
tags: ["system"]
Exclua arquivos compactados e defina um período de ignorar logs antigos com ignore_older.