Pesquisa de site

Encaminhar logs e métricas do servidor para o Elasticsearch usando Beats


Elasticsearch é um mecanismo de análise de log que permite aos usuários armazenar, indexar, analisar e visualizar logs e métricas em um painel. A pesquisa elástica usa Kibana para visualizar os dados em um painel. Neste guia, abordaremos como instalar o ElasticSearch, Kibana e como enviar logs para a instância de pesquisa do Elastic usando Beats.

Beats são os remetentes usados para enviar os logs para o Elastic Search de diferentes endpoints. Eles são instalados como agentes nos clientes para que possam enviar os logs para a instância do Elastic Search.

Existem diferentes tipos de Beats, conforme brevemente discutido abaixo:

  1. Filebeat – Analisar arquivos de log
  2. Packetbeat – Analise pacotes de rede
  3. Winlogbeat – Usado para analisar eventos do Windows
  4. Metricbeat – Usado para enviar métricas do seu ambiente de nuvem
  5. Auditbeat – usado para enviar informações sobre dados de auditoria do sistema
  6. Heartbeat – usado para monitorar a disponibilidade da infraestrutura

#1) Instalar e configurar o ElasticSearch

Neste guia, instalaremos o ElasticSearch seguindo as etapas abaixo.

Sistemas baseados em APT

Atualizar sistema

sudo apt update && sudo apt upgrade -y

Instale o Open-JDK 11 (recomendado)

sudo apt install default-jdk -y

Importar chave GPG de pesquisa elástica

curl  -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/elastic.gpg

Adicionar repositório ElasticSearch

sudo apt -y install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/oss-7.x/apt stable main" | sudo tee  /etc/apt/sources.list.d/elastic-7.x.list

Instale o ElasticSearch

sudo apt update
sudo apt install elasticsearch-oss

Sistemas baseados em RPM

Baixe a chave GPG

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

Crie um arquivo repo em /etc/yum.repos.d/ com o seguinte conteúdo:

cat <<EOF | sudo tee /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/oss-7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF

Instale o Elasticsearch

sudo yum -y install elasticsearch-oss

Configurar Elasticsearch

Configure o Elasticsearch para permitir conexões remotas alterando o IP network.host para 0.0.0.0 no arquivo /etc/elasticsearch/elasticsearch.yml

$ sudo nano /etc/elasticsearch/elasticsearch.yml

# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 0.0.0.0
#
# Set a custom port for HTTP:
#
#http.port: 9200
#
# For more information, consult the network module documentation.
#

Inicie e habilite o Elasticsearch

sudo systemctl enable --now elasticsearch

Verifique se o Elasticsearch está instalado e funcionando:

$ curl http://127.0.0.1:9200

Exemplo de saída:

$ curl http://127.0.0.1:9200
{
  "name" : "ubuntu",
  "cluster_name" : "computingforgeeks",
  "cluster_uuid" : "EVzpAqUUSV6wQhO7yiPeKw",
  "version" : {
    "number" : "7.10.1",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "1c34507e66d7db1211f66f3513706fdf548736aa",
    "build_date" : "2020-12-05T01:00:33.671820Z",
    "build_snapshot" : false,
    "lucene_version" : "8.7.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"

#2) Instalar e configurar o Kibana

Kibana fornece a interface web onde podemos analisar visualmente os dados coletados.

Use as etapas abaixo para instalar o Kibana no mesmo host:

sudo apt install kibana

Configure o Kibana para permitir conexões IP externas. Edite o arquivo /etc/kibana/kibana.yaml e altere a opção server.host para seu IP externo ou 0.0.0.0.

$ sudo nano /etc/kibana/kibana.yaml
# Kibana is served by a back end server. This setting specifies the port to use.
server.port: 5601

...
# To allow connections from remote users, set this parameter to a non-loopback address.
server.host: "0.0.0.0"

Como estamos instalando o Kibana e o Elasticsearch no mesmo host, não precisamos alterar o campo elasticsearch.hosts.

Iniciar e ativar o Kibana

sudo systemctl enable --now kibana

Agora você pode acessar o painel do Kibana usando o IP do seu servidor na porta 5601, ou seja, http://server-IP:5601.

Pode ser necessário permitir a porta através do firewall:

sudo ufw allow 5601/tcp

#3) Instalar e configurar o Metricbeat

Depois de configurar o Elasticsearch e o Kibana, você precisará configurar o Beats nos servidores clientes.

Neste post abordaremos como instalar o Filebeat e o Metricbeats no servidor cliente.

Instale o Metricbeat

Você pode baixar o Metricbeat dos repositórios APT e YUM:

APT
Configure a chave GPG para elasticsearch
curl  -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/elastic.gpg

2 Instale o repositório Metricbeat

sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/oss-7.x/apt stable main" | sudo tee  /etc/apt/sources.list.d/elastic-7.x.list

3. Instale o Metricbeat

sudo apt update && sudo apt install metricbeat
YUM

Baixe a chave GPG

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

Crie um arquivo repo em /etc/yum.repos.d/ com o seguinte conteúdo:

cat <<EOF | sudo tee /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/oss-7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF

Instale o Metricbeat

sudo yum -y install metricbeat

Envie métricas do sistema para o Elasticsearch com Metricbeat

  1. Habilitar módulos do sistema
sudo metricbeat modules enable system

2. Vincule o Metricbeat ao servidor de pesquisa Elastic remoto. Edite o arquivo /etc/metricbeat/metricbeat.yml e edite os detalhes de hosts para Kibana e Elasticsearch Output

sudo vim /etc/metricbeat/metricbeat.yml

Adicione o IP da instância onde o Elasticsearch e o kibana estão sendo executados na opção de host. No nosso caso, o Elasticsearch está sendo executado no host 172.16.56.5:

# =================================== Kibana ===================================

# Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API.
# This requires a Kibana endpoint configuration.

setup.kibana:

  # Kibana Host
  # Scheme and port can be left out and will be set to the default (http and 5601)
  # In case you specify and additional path, the scheme is required: http://localhost:5601/path
  # IPv6 addresses should always be defined as: https://[2001:db8::1]:5601
  host: "172.16.56.5:5601"

  # Kibana Space ID
  # ID of the Kibana Space into which the dashboards should be loaded. By default,
  # the Default Space will be used.
  #space.id:

Faça o mesmo para o Elasticsearch

# ---------------------------- Elasticsearch Output ----------------------------
output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["172.16.56.5:9200"]

3. Configure o ambiente inicial – Isso carrega os painéis do Kibana, se eles já estiverem configurados, você pode omitir o sinalizador -e.

sudo metricbeat setup -e

Você deverá ver uma tentativa de conexão com o host Elasticsearch e a criação do painel Kibana.

$ sudo metricbeat setup -e
......

2020-12-19T09:56:50.585Z	INFO	[index-management]	idxmgmt/std.go:184	Set output.elasticsearch.index to 'metricbeat-7.10.1' as ILM is enabled.
2020-12-19T09:56:50.585Z	INFO	eslegclient/connection.go:99	elasticsearch url: http://172.16.56.5:9200
2020-12-19T09:56:50.586Z	INFO	[publisher]	pipeline/module.go:113	Beat name: master
2020-12-19T09:56:50.612Z	INFO	add_kubernetes_metadata/kubernetes.go:71	add_kubernetes_metadata: kubernetes env detected, with version: v1.18.9+k3s1
2020-12-19T09:56:50.620Z	INFO	eslegclient/connection.go:99	elasticsearch url: http://172.16.56.5:9200
2020-12-19T09:56:50.622Z	INFO	[kubernetes]	kubernetes/util.go:138	kubernetes: Using node master discovered by machine-id matching	{"libbeat.processor": "add_kubernetes_metadata"}
2020-12-19T09:56:50.625Z	INFO	[esclientleg]	eslegclient/connection.go:314	Attempting to connect to Elasticsearch version 7.10.1
Overwriting ILM policy is disabled. Set `setup.ilm.overwrite: true` for enabling.

2020-12-19T09:56:50.681Z	INFO	[index-management]	idxmgmt/std.go:261	Auto ILM enable success.
2020-12-19T09:56:50.683Z	INFO	[index-management.ilm]	ilm/std.go:139	do not generate ilm policy: exists=true, overwrite=false
2020-12-19T09:56:50.683Z	INFO	[index-management]	idxmgmt/std.go:274	ILM policy successfully loaded.
2020-12-19T09:56:50.683Z	INFO	[index-management]	idxmgmt/std.go:407	Set setup.template.name to '{metricbeat-7.10.1 {now/d}-000001}' as ILM is enabled.
2020-12-19T09:56:50.683Z	INFO	[index-management]	idxmgmt/std.go:412	Set setup.template.pattern to 'metricbeat-7.10.1-*' as ILM is enabled.
2020-12-19T09:56:50.683Z	INFO	[index-management]	idxmgmt/std.go:446	Set settings.index.lifecycle.rollover_alias in template to {metricbeat-7.10.1 {now/d}-000001} as ILM is enabled.
2020-12-19T09:56:50.683Z	INFO	[index-management]	idxmgmt/std.go:450	Set settings.index.lifecycle.name in template to {metricbeat {"policy":{"phases":{"hot":{"actions":{"rollover":{"max_age":"30d","max_size":"50gb"}}}}}}} as ILM is enabled.
2020-12-19T09:56:50.686Z	INFO	template/load.go:183	Existing template will be overwritten, as overwrite is enabled.
2020-12-19T09:56:51.231Z	INFO	template/load.go:117	Try loading template metricbeat-7.10.1 to Elasticsearch
2020-12-19T09:56:52.677Z	INFO	template/load.go:109	template with name 'metricbeat-7.10.1' loaded.
2020-12-19T09:56:52.677Z	INFO	[index-management]	idxmgmt/std.go:298	Loaded index template.
2020-12-19T09:56:52.681Z	INFO	[index-management]	idxmgmt/std.go:309	Write alias successfully generated.
Index setup finished.
Loading dashboards (Kibana must be running and reachable)
2020-12-19T09:56:52.681Z	INFO	kibana/client.go:119	Kibana url: http://172.16.56.5:5601
2020-12-19T09:56:53.517Z	INFO	[add_cloud_metadata]	add_cloud_metadata/add_cloud_metadata.go:89	add_cloud_metadata: hosting provider type not detected.
2020-12-19T09:56:53.518Z	INFO	kibana/client.go:119	Kibana url: http://172.16.56.5:5601
2020-12-19T09:58:43.294Z	INFO	instance/beat.go:815	Kibana dashboards successfully loaded.
Loaded dashboards

3. Inicie e ative o Metricbeat

sudo service metricbeat start
sudo systemctl enable metricbeat

Agora você pode visualizar seus dados no painel do Kibana navegando até Dashboard.

#4) Configurar o Filebeat

Você pode usar repositórios APT e YUM para configuração do Filebeat.

APT

sudo apt-get update && sudo apt-get install filebeat

YUM

sudo yum install filebeat

Conecte o Filebeat ao Elastic Stack

Edite o arquivo /etc/filebeat/filebeat.yml e adicione o host remoto e a porta para o Elasticsearch. Você também pode adicionar o nome de usuário e a senha do usuário autorizado.

output.elasticsearch:
  hosts: ["elasticsearch-IP:9200"]
  username: "filebeat_internal"
  password: "YOUR_PASSWORD" 

Configure também os detalhes do Kibana no mesmo arquivo para conectar-se ao host que tem o Kibana instalado:

setup.kibana:
    host: "mykibanahost:5601"

Substitua elasticsearch-IP e mykibanahost pelo IP do servidor Elasticsearch.

Habilitar módulos do Filebeat

Liste e identifique os módulos que você deseja ativar:

filebeat modules list

Habilitar módulos selecionados

filebeat modules enable <module-name>

Configurar ambiente filebeat

filebeat setup -e

Iniciar serviço Filebeat

systemctl start filebeat

Você deverá ver uma confirmação de que os dashboards foram criados com sucesso

2020-12-19T11:11:55.731Z	INFO	template/load.go:183	Existing template will be overwritten, as overwrite is enabled.
2020-12-19T11:11:58.580Z	INFO	[add_cloud_metadata]	add_cloud_metadata/add_cloud_metadata.go:89	add_cloud_metadata: hosting provider type not detected.
2020-12-19T11:11:59.711Z	INFO	template/load.go:117	Try loading template filebeat-7.10.1 to Elasticsearch
2020-12-19T11:12:00.075Z	INFO	template/load.go:109	template with name 'filebeat-7.10.1' loaded.
2020-12-19T11:12:00.075Z	INFO	[index-management]	idxmgmt/std.go:298	Loaded index template.
2020-12-19T11:12:00.077Z	INFO	[index-management]	idxmgmt/std.go:309	Write alias successfully generated.
Index setup finished.
Loading dashboards (Kibana must be running and reachable)
2020-12-19T11:12:00.078Z	INFO	kibana/client.go:119	Kibana url: http://172.16.56.5:5601
2020-12-19T11:12:03.995Z	INFO	kibana/client.go:119	Kibana url: http://172.16.56.5:5601
2020-12-19T11:13:13.600Z	INFO	instance/beat.go:815	Kibana dashboards successfully loaded.
Loaded dashboards

Navegue até o painel do Kibana para visualizar seus dados.

Conclusão

Instalamos o Elastic Stack e configuramos o Beats para buscar as métricas e logs. Existem outros Beats que podem ser configurados usando o mesmo processo descrito acima.

Confira estes outros artigos para ferramentas de monitoramento interessantes:

Como instalar o Netdata no Kubernetes usando Helm

Automatize configurações do Icinga2 com Icinga Director no CentOS | RHEL 8

Artigos relacionados: