Pesquisa de site

Como instalar Elasticsearch, Logstash e Kibana (ELK Stack) no CentOS/RHEL 7


Se você é ou já foi responsável pela inspeção e análise de logs do sistema no Linux, sabe como essa tarefa pode se tornar um pesadelo se vários serviços estiverem sendo monitorados simultaneamente.

Antigamente, essa tarefa tinha que ser feita principalmente manualmente, com cada tipo de log sendo tratado separadamente. Felizmente, a combinação de Elasticsearch, Logstash e Kibana no lado do servidor, juntamente com Filebeat no cliente lado, faz com que essa tarefa antes difícil pareça hoje um passeio no parque.

Os três primeiros componentes formam o que é chamado de pilha ELK, cujo objetivo principal é coletar logs de vários servidores ao mesmo tempo (também conhecido como registro centralizado).

Leitura sugerida: 4 boas ferramentas de gerenciamento e monitoramento de log de código aberto para Linux

Uma interface da web integrada baseada em Java permite que você inspecione os logs rapidamente para facilitar a comparação e a solução de problemas. Esses logs de clientes são enviados para um servidor central pelo Filebeat, que pode ser descrito como um agente de envio de logs.

Vamos ver como todas essas peças se encaixam. Nosso ambiente de teste consistirá nas seguintes máquinas:

Central Server: CentOS 7 (IP address: 192.168.0.29). 2 GB of RAM.
Client #1: CentOS 7 (IP address: 192.168.0.100). 1 GB of RAM.
Client #2: Debian 8 (IP address: 192.168.0.101). 1 GB of RAM.

Observe que os valores de RAM fornecidos aqui não são pré-requisitos estritos, mas valores recomendados para implementação bem-sucedida da pilha ELK no servidor central. Menos RAM nos clientes não fará muita diferença, se houver.

Instalando ELK Stack no servidor

Vamos começar instalando a pilha ELK no servidor, juntamente com uma breve explicação sobre o que cada componente faz:

  1. O Elasticsearch armazena os logs enviados pelos clientes.
  2. O Logstash processa esses logs.
  3. Kibana fornece a interface web que nos ajudará a inspecionar e analisar os logs.

Instale os seguintes pacotes no servidor central. Primeiramente, instalaremos o Java JDK versão 8 (atualização 102, a mais recente no momento em que este artigo foi escrito), que é uma dependência dos componentes ELK.

Você pode verificar primeiro na página de downloads do Java aqui para ver se há uma atualização mais recente disponível.

yum update
cd /opt
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u102-b14/jre-8u102-linux-x64.rpm"
rpm -Uvh jre-8u102-linux-x64.rpm

É hora de verificar se a instalação foi concluída com sucesso:

java -version

Para instalar as versões mais recentes do Elasticsearch, Logstash e Kibana, teremos que criar repositórios para o yum manualmente do seguinte modo:

Habilitar repositório Elasticsearch

1. Importe a chave GPG pública do Elasticsearch para o gerenciador de pacotes rpm:

rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch

2. Insira as seguintes linhas no arquivo de configuração do repositório elasticsearch.repo:

[elasticsearch]
name=Elasticsearch repository
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

3. Instale o pacote Elasticsearch.

yum install elasticsearch

Quando a instalação for concluída, você será solicitado a iniciar e ativar o elasticsearch:

4. Inicie e ative o serviço.

systemctl daemon-reload
systemctl enable elasticsearch
systemctl start elasticsearch

5. Permita o tráfego através da porta TCP 9200 no seu firewall:

firewall-cmd --add-port=9200/tcp
firewall-cmd --add-port=9200/tcp --permanent

6. Verifique se o Elasticsearch responde a solicitações simples por HTTP:

curl -X GET http://localhost:9200

A saída do comando acima deve ser semelhante a:

Certifique-se de concluir as etapas acima e prosseguir com o Logstash. Como o Logstash e o Kibana compartilham a chave Elasticsearch GPG, não há necessidade de importá-la novamente antes de instalar os pacotes.

Leitura sugerida: Gerenciar logs do sistema (configurar, girar e importar para o banco de dados) no CentOS 7

Habilitar repositório Logstash

7. Insira as seguintes linhas no arquivo de configuração do repositório logstash.repo:

[logstash]
name=Logstash
baseurl=http://packages.elasticsearch.org/logstash/2.2/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1

8. Instale o pacote Logstash:

yum install logstash

9. Adicione um certificado SSL com base no endereço IP do servidor ELK na linha a seguir abaixo da seção [ v3_ca ] em /etc/pki/tls/openssl.cnf:

[ v3_ca ]
subjectAltName = IP: 192.168.0.29

10. Gere um certificado autoassinado válido por 365 dias:

cd /etc/pki/tls
openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

11. Configure os arquivos de entrada, saída e filtro do Logstash:

Entrada: Crie /etc/logstash/conf.d/input.conf e insira as seguintes linhas nele. Isso é necessário para que o Logstash “aprenda” como processar batidas provenientes de clientes. Certifique-se de que o caminho para o certificado e a chave correspondam aos caminhos corretos conforme descrito na etapa anterior:

input {
  beats {
	port => 5044
	ssl => true
	ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
	ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}

Arquivo de saída (/etc/logstash/conf.d/output.conf):


output {
  elasticsearch {
	hosts => ["localhost:9200"]
	sniffing => true
	manage_template => false
	index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
	document_type => "%{[@metadata][type]}"
  }
}

Arquivo de filtro (/etc/logstash/conf.d/filter.conf). Registraremos mensagens syslog para simplificar:


filter {
if [type] == "syslog" {
	grok {
  	match => { "message" => "%{SYSLOGLINE}" }
	}

	date {
match => [ "timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
  }
}

12. Verifique os arquivos de configuração do Logstash.

service logstash configtest

13. Inicie e ative o logstash:

systemctl daemon-reload
systemctl start logstash
systemctl enable logstash

14. Configure o firewall para permitir que o Logstash obtenha os logs dos clientes (porta TCP 5044):

firewall-cmd --add-port=5044/tcp
firewall-cmd --add-port=5044/tcp --permanent

Habilitar repositório Kibana

14. Insira as seguintes linhas no arquivo de configuração do repositório kibana.repo:

[kibana]
name=Kibana repository
baseurl=http://packages.elastic.co/kibana/4.4/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

15. Instale o pacote Kibana:

yum install kibana

16. Inicie e ative o Kibana.

systemctl daemon-reload
systemctl start kibana
systemctl enable kibana

17. Certifique-se de poder acessar a interface web do Kibana de outro computador (permitir tráfego na porta TCP 5601):

firewall-cmd --add-port=5601/tcp
firewall-cmd --add-port=5601/tcp --permanent

18. Inicie o Kibana (http://192.168.0.29:5601) para verificar se você pode acessar a interface da web:

Voltaremos aqui depois de instalar e configurar o Filebeat nos clientes.

Leitura sugerida: Monitore os logs do servidor em tempo real com a ferramenta “Log.io” no Linux

Instale o Filebeat nos servidores clientes

Mostraremos como fazer isso para o Cliente nº 1 (repita para o Cliente nº 2 posteriormente, alterando os caminhos se aplicável à sua distribuição).

1. Copie o certificado SSL do servidor para os clientes:

scp /etc/pki/tls/certs/logstash-forwarder.crt [email :/etc/pki/tls/certs/

2. Importe a chave GPG pública do Elasticsearch para o gerenciador de pacotes rpm:

rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch

3. Crie um repositório para o Filebeat (/etc/yum.repos.d/filebeat.repo) no CentOS distribuições baseadas:

[filebeat]
name=Filebeat for ELK clients
baseurl=https://packages.elastic.co/beats/yum/el/$basearch
enabled=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
gpgcheck=1

4. Configure a fonte para instalar o Filebeat no Debian e seus derivados:

aptitude install apt-transport-https
echo "deb https://packages.elastic.co/beats/apt stable main" > /etc/apt/sources.list.d/filebeat.list
aptitude update

5. Instale o pacote Filebeat:

yum install filebeat        [On CentOS and based Distros]
aptitude install filebeat   [On Debian and its derivatives]

6. Inicie e ative o Filebeat:

systemctl start filebeat
systemctl enable filebeat

Configurar o Filebeat

Uma palavra de cautela aqui. A configuração do Filebeat é armazenada em um arquivo YAML, que requer recuo estrito. Tenha cuidado com isso ao editar /etc/filebeat/filebeat.yml da seguinte forma:

  1. Em caminhos, indique quais arquivos de log devem ser “enviados” para o servidor ELK.
  2. Em garimpeiros:
input_type: log
document_type: syslog
  1. Em saída:

    1. Remova o comentário da linha que começa com logstash.
    2. Indique o endereço IP do seu servidor ELK e a porta onde o Logstash está escutando em hosts.
    3. Certifique-se de que o caminho para o certificado aponte para o arquivo real que você criou na Etapa I (seção Logstash) acima.

As etapas acima são ilustradas na imagem a seguir:

Salve as alterações e reinicie o Filebeat nos clientes:

systemctl restart filebeat

Depois de concluir as etapas acima nos clientes, sinta-se à vontade para prosseguir.

Testando o Filebeat

Para verificar se os logs dos clientes podem ser enviados e recebidos com sucesso, execute o seguinte comando no servidor ELK:

curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'

A saída deve ser semelhante a (observe como as mensagens de /var/log/messages e /var/log/secure estão sendo recebidas de client1 e cliente2):

Caso contrário, verifique se há erros no arquivo de configuração do Filebeat.

journalctl -xe

após tentar reiniciar o Filebeat apontará para a(s) linha(s) incorreta(s).

Testando o Kibana

Depois de verificarmos que os logs estão sendo enviados pelos clientes e recebidos com sucesso no servidor. A primeira coisa que teremos que fazer no Kibana é configurar um padrão de índice e defini-lo como padrão.

Você pode descrever um índice como um banco de dados completo em um contexto de banco de dados relacional. Iremos com filebeat-* (ou você pode usar critérios de pesquisa mais precisos conforme explicado na documentação oficial).

Digite filebeat-* no Nome do índice ou no campo de padrão e clique em Criar:

Observe que você poderá inserir critérios de pesquisa mais refinados posteriormente. Em seguida, clique na estrela dentro do retângulo verde para configurá-lo como padrão de índice padrão:

Por fim, no menu Discover você encontrará vários campos para adicionar ao relatório de visualização de logs. Basta passar o mouse sobre eles e clicar em Adicionar:

Os resultados serão mostrados na área central da tela conforme mostrado acima. Sinta-se à vontade para brincar (adicionar e remover campos do relatório de registro) para se familiarizar com o Kibana.

Por padrão, o Kibana exibirá os registros que foram processados durante os últimos 15 minutos (veja o canto superior direito), mas você pode alterar esse comportamento selecionando outro período de tempo:

Resumo

Neste artigo, explicamos como configurar uma pilha ELK para coletar os logs do sistema enviados por dois clientes, uma máquina CentOS 7 e uma Debian 8.

Agora você pode consultar a documentação oficial do Elasticsearch e encontrar mais detalhes sobre como usar essa configuração para inspecionar e analisar seus logs com mais eficiência.

Se você tiver alguma dúvida, não hesite em perguntar. Estamos ansiosos para ouvir de você.