Engenharia

Monitoramento de tempo de funcionamento com o Heartbeat e o Elastic Stack

Com a versão 6.5 do Elastic Stack, tivemos o prazer de anunciar a disponibilidade geral do Heartbeat. Lançado inicialmente em versão beta em janeiro de 2017, o Heartbeat é um shipper lightweight — semelhante ao restante dos outros Beats (MetricbeatFilebeatWinlogbeat etc.) — mas foi projetado para monitorar o funcionamento.

O Heartbeat pode operar de dentro ou de fora da rede. Basta ele ter acesso da rede ao endpoint HTTP, TCP ou ICMP desejado. A configuração é tão simples quanto fornecer ao Heartbeat a lista de URLs que você quer monitorar. O Heartbeat executa verificações periódicas para conferir se o endpoint está ativo ou inativo, e relata essas informações, juntamente com outras metrics úteis, ao Elasticsearch. Essas informações são exibidas automaticamente em dashboards pré-criados do Kibana para permitir o monitoramento de tempo de funcionamento completo.

Vamos analisar mais atentamente como configurar e usar o Heartbeat com o Elastic Stack.

Instalação do Heartbeat

Para instalar o Heartbeat, você precisará fazer o download e a extração de um executável pré-criado para sua plataforma. Neste exemplo, usarei macOS, entretanto oferecemos suporte a muitos outros sistemas operacionais, por isso você deve usar os comandos que funcionam com seu sistema.

Faça o download e a extração da versão mais recente do Heartbeat:

curl -l -O https://artifacts.elastic.co/downloads/beats/heartbeat/heartbeat-6.5.0-darwin-x86_64.tar.gz
tar xzvf heartbeat-6.5.0-darwin-x86_64.tar.gz

Configuração dos monitores de tempo de funcionamento

Para que o Heartbeat saiba qual serviço deve verificar, ele precisa de uma lista de URLs. Essa configuração é especificada no arquivo heartbeat.yml contido na pasta /heartbeat. A seguir está um exemplo para várias verificações de HTTP com o Heartbeat, que são executadas a cada 10 segundos:

# Configure monitors
heartbeat.monitors:
- type: http
  # List or urls to query
  urls:
        - "https://www.elastic.co"
        - "https://discuss.elastic.co"
  # Configure task schedule
  schedule: '@every 10s'

Além dos monitores de HTTP/S, o Heartbeat pode executar verificações de TCP e ICMP para você poder obter melhores informações em diferentes camadas de serviços. No Heartbeat também podemos definir camadas adicionais de verificações, por exemplo, com os monitores de HTTP/S podemos verificar o código de resposta, o corpo e o cabeçalho. Com os monitores de TCP, podemos definir verificações de porta e verificações de strings.

heartbeat.monitors:
- type: http
# List or urls to query
  urls: ["http://localhost:9200"]
  # request details:
  check.request:
       method: GET
  check.response:
       body: "You Know, for Search"
# Configure task schedule
  schedule: '@every 10s'

A seguir está um exemplo para uma verificação de corpo de HTTP, em que o Heartbeat está procurando a string “You Know, for Search” (Você sabe — para busca) em http://localhost:9200 (a única URL especificada na configuração).

Em todos os monitores do Heartbeat, podemos definir parâmetros adicionais como name, timeout e schedule. Você pode encontrar instruções completas de configuração na documentação sobre configuração do Heartbeat.

A etapa final na configuração é instalar saídas do Heartbeat (destino de envio dos dados). Entre as saídas compatíveis estão um cluster do Elasticsearch autogerenciado, o Elastic Cloud, o Logstash e muito mais. Neste exemplo, estou enviando dados do Heartbeat para a minha instância local do Elasticsearch  (“localhost:9200”):

output.elasticsearch:
# Array of hosts to connect to.
  hosts: ["localhost:9200"]
 # Optional protocol and basic auth credentials.
 #protocol: "https"
 username: "elastic"
  password: "changeme"

Você pode encontrar um arquivo de exemplo com a configuração completa, no arquivo heartbeat.reference.yml.

Primeiro uso do Heartbeat

O Heartbeat é fornecido com dashboards pré-criados que oferecem grande valor imediatamente. Configure os dashboards e execute o Heartbeat usado esses comandos:

Para configurar os dashboards do Heartbeat no Kibana: (opcional, e precisa ser executado somente uma vez)

./heartbeat setup --dashboards

Para executar o Heartbeat:

./heartbeat -e

Logo que o Heartbeat começa a ser executado, ele verifica a lista de URLs que você configurou, envia de volta as informações ao Elastic Stack e pré-popula os dashboards do Kibana.

Visualização dos dados de tempo de funcionamento no Kibana

Quando você abre o Kibana, vê informações do Heartbeat na guia Discover (Descobrir) ao selecionar o índice do Heartbeat (heartbeat-* por padrão):

Entre os dashboards, você encontrará o dashboard “Heartbeat HTTP monitoring” que é populado com todas as informações que o Heartbeat tinha enviado:

Este é o dashboard padrão do Heartbeat:

No canto superior esquerdo, você verá uma tabela com uma lista de todos os endpoints monitorados pelo Heartbeat, juntamente com seus tempos de resposta. No canto superior direito, você verá o resumo dos códigos de status de monitor, e abaixo dele gráficos adicionais que representam a porcentagem de monitores que estão ativos ou inativos, o tempo de resposta ao longo do tempo e o número de verificações ao longo do tempo.

Os dashboards do Heartbeat são interativos. Com o dashboard padrão do Heartbeat, você pode detectar facilmente se um endpoint específico está ativo ou inativo clicando na seção inferior do monitor (a fatia vermelha do gráfico de pizza de status de monitor HTTP localizado no canto superior direito). Se você clicar nele, um filtro será aplicado no dashboard, que exibirá somente os monitores inativos.

Você pode personalizar os dashboards e as visualizações do Kibana do Heartbeat para atender às suas necessidades. Para começar com isso, clique no botão “Edit” (Editar) no canto superior direito do dashboard, clique na engrenagem em uma visualização individual e selecione “Edit Visualization” (Editar visualização). Você também pode criar novas visualizações com base nos dados do Heartbeat, combinar metrics do Heartbeat com outras fontes de dados do APM, de metrics e de log, e adicioná-los a qualquer dashboard operacional desejado.

Combinação de dados do Heartbeat com outras fontes de dados operacionais

A combinação de dados do Heartbeat com fontes de dados adicionais como Metricbeat, Filebeat e APM pode fornecer informações importantes ao fazer triagem de uma pane. O Heartbeat notificará você quando um serviço específico estiver inativo; o Metricbeat e o APM podem apresentar os possíveis suspeitos; podem melhorar significativamente o MTTR e farão com que cada um olhe para o lugar certo, em vez de ficar “apontando o culpado” em uma típica sala de guerra.

Acesse nossa página de soluções para saber mais sobre logging, metrics e soluções do APM.

seguir está um exemplo de dashboard do Kibana que reúne metrics do Heartbeat (dois painéis superiores) e do Metricbeat (dois painéis inferiores).

  • No lado esquerdo, você pode ver que, sempre que o Heartbeat detectava que nosso endpoint estava inativo, o Metricbeat detectava um número crescente de erros por meio do módulo Nginx.
  • No lado direito, podemos ver claramente que, sempre que o nosso tempo ping de HTTP está aumentando, o Metricbeat detecta uma alta taxa de solicitações no servidor NGINX.

Observando essa coincidência, podemos concluir que um pico maciço na taxa de solicitações está disparando erros de Nginx, que por sua vez estão causando falhas nas verificações do Heartbeat:

Alertas e detecção de anomalias

Você pode usar os recursos de alertas para obter alertas e notificações sobre uma falha ou uma queda na performance com base nos dados de monitores do Heartbeat. Você também pode usar os recursos de Machine Learning do Elastic Stack para detectar quaisquer anomalias com base na análise de dados de séries de tempo dos dados do Heartbeat. Encontre mais informações em meu próximo blog do Heartbeat.

Resumo

O monitoramento pode ser um trabalho árduo. Você precisa identificar, alertar e resolver problemas rapidamente. Se hoje você está usando várias ferramentas distintas para obter visibilidade em suas aplicações e infraestrutura, sua tarefa provavelmente é ainda mais árdua.

O Heartbeat adiciona funcionalidade eficaz de monitoramento de tempo de funcionamento sobre os logs, metrics e recursos de APM existentes no Elastic Stack. Use-o sozinho ou combine-o com outras fontes inestimáveis de dados operacionais no Elasticsearch — para você não perder nadinha!

Recursos do Heartbeat

E é isso! Espero que você tenha achado esta visão geral útil. Para começar, faça download do Heartbeat e leia a documentação para obter uma cobertura aprofundada da funcionalidade. Uma das maneiras mais fáceis de experimentar o Heartbeat é enviar dados de tempo de funcionamento ao Elasticsearch Service no Elastic Cloud — o produto do Elasticsearch e do Kibana hospedado dos criadores desses projetos.

Se tiver dúvidas, envolva-se conosco no fórum de discussão do Heartbeat, e se encontrar problemas ou gostaria de registrar uma solicitação de melhoria, faça isso no Github.