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:
- Filebeat – Analisar arquivos de log
- Packetbeat – Analise pacotes de rede
- Winlogbeat – Usado para analisar eventos do Windows
- Metricbeat – Usado para enviar métricas do seu ambiente de nuvem
- Auditbeat – usado para enviar informações sobre dados de auditoria do sistema
- 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
- 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.ym
l 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