Enviando arquivos de log para o Elasticsearch

Home / Atualidades / Enviando arquivos de log para o Elasticsearch

O Elasticsearch tem se tornado uma grata solução para quem deseja indexar, armazenar e buscar logs dos seus servidores e serviços de maneira centralizada e rápida. Na verdade, ele é muito maior que isso mas neste post vamos nos ater apenas a esta funcionalidade.

Neste laboratório, vamos usar 3 produtos da Elastic (que, junto ao Beats, formam o Elastic Stack):

  • Elasticsearch – recebe as saídas de texto e as armazena em diretórios de indexes dentro de seus clusters. Desta forma, o administrador pode optar por ter um index para cada tipo de serviço de vários servidores diferentes. Exemplo: armazenar os logs de todos os serviços httpd de um parque que conta com 10 servidores Web. A porta padrão do Elasticsearch é a 9200.

Logstash – é um agente que captura os arquivos, aplica os filtros necessários, classifica os tipos de campo, os insere em variáveis e envia o resultado para o Elasticsearch.

Kibana  é um frontend para os indexes do Elasticsearch. Com ele você é capaz de fazer pesquisas, criar gráficos com métricas personalizadas e dashboards via interface Web. A porta padrão do serviço é 5601.

Vamos ao trabalho então.

Cenário:

Servidor CentOS 7 com Elasticsearch e Kibana recebendo os logs de rede.

Servidor Debian9 com o Logstash enviando os logs do apache para o Elasticsearch.

No servidor CentOS:

Instalando o Elasticsearch

Acessando a url https://www.elastic.co/downloads você tem acesso ao download do Elasticsearch, Kibana e Logstash.

Como estes serviços usam Java, precisamos primeiro fazer a instalação do openjdk na última versão disponível:

#yum install java-1.8.0-openjdk -y

Baixando e instalando o Elasticsearch e o Kibana:

#wget–no-check-certificate https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.rpm

#wget –no-check-certificate https://artifacts.elastic.co/downloads/kibana/kibana-6.2.4-x86_64.rpm

#rpm -ivh elasticsearch-6.2.4.rpm

#rpm -ivh kibana-6.2.4-x86_64.rpm

Habilitando os 2 serviços para serem inicializados no boot do sistema via SystemD:

#systemctl enable elasticsearch kibana

O serviço está habilitado mas ainda não iniciado pois precisamos fazer as configurações.

#vim /etc/elasticsearch/elasticsearch.yml

Inserir, no fim do arquivo as seguintes linhas:

http.cors.allow-origin: “/.*/”
http.cors.enabled: true
cluster.name: elasticcluster
host: 192.168.0.13
network.bind_host: 192.168.0.13

As configurações acima dizem respeito ao nome do cluster a ser criado para o Elasticsearch, qual origem ele vai aceitar e o IP no qual o serviço deve responder (caso fique vazio, ele vai responder em qualquer IP de interface do servidor).

Não é necessária nenhuma configuração inicial no Kibana, a não ser que você queira customizar, o que é o nosso caso, pois o serviço do Elasticsearch não responde por ‘http://localhost:9200’ e sim por ‘http://192.168.0.13’ e também é uma boa prática configurar o kibana para responder da mesma forma.

Vamos lá então:

#vim /etc/kibana/kibana.yml

Inserir as seguintes linhas:

elasticsearch.url: “http://192.168.0.13:9200”

server.host: “192.168.0.13”

Iniciando os serviços:

#systemctl start elasticsearch kibana

#systemctl status elasticsearch kibana

No servidor Debian9

#wget –no-check-certificate https://artifacts.elastic.co/downloads/logstash/logstash-6.2.4.deb

#dpkg -i logstash-6.2.4.deb

Criando as configurações de INPUT, FILTER e OUTPUT:

#vim /etc/logstash/01-input.conf

input {
file {
path => [ “/var/log/apache2/access.log” ]
type => “apache-log”
}
file {
path => [ “/var/log/iptables.log” ]
type => “iptables-log”
}
}

No caso acima, estamos usando o tipo de input chamado ‘file’ para capturar o arquivo de log do apache2.

#vim /etc/logstash/02-filter.conf

filter {
if [type] == “apache-log” {

grok {
match => { “message” => “%{IPORHOST:clientip} %{GREEDYDATA:syslog_message}” }
}
}

}

É um filtro bem simples, que separa o campo do IP do cliente e joga o restante como mensagem simples.

#vim /etc/logstash/03-output.conf

output {
if [type] == “apache-log” {
elasticsearch {
hosts => [ “192.168.0.13” ]
index => “ead.howtoonline-%{+YYYY.MM.dd}”
}
}

}

O tipo de saída escolhida foi ‘elasticsearch’, o que significar que o logstash já vai entender que o host para onde vão os arquivos do tipo “apache-log” responderá na porta 9200.

Agora é só reiniciar o logstash no cliente e visualizar na aba ‘Discover’ do Kibana os logs chegando.

#systemctl restart logstash

No browser:

http://192.168.0.13:5601

Grande abraço!

 

 

 

One Comment

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *