Engenharia

Monitoramento do Elastic Stack com Metricbeat via Logstash ou Kafka

Em um post anterior do blog, apresentamos um novo método para monitorar o Elastic Stack com o Metricbeat. O uso do Metricbeat para coletar externamente informações de monitoramento sobre os produtos do Elastic Stack melhora a confiabilidade do monitoramento desses produtos. Ele também fornece flexibilidade na maneira como os dados de monitoramento podem ser roteados para o cluster de monitoramento do Elasticsearch. Neste post do blog, detalhamos um pouco mais o segundo aspecto, mostrando como os usuários podem rotear os dados de monitoramento coletados pelo Metricbeat via Logstash ou Kafka para o cluster de monitoramento. Portanto, se você já estiver usando a saída logstash ou kafka na sua configuração do Metricbeat para seus dados de negócios, poderá continuar a usar essas saídas para rotear seus dados de monitoramento do Elastic Stack também.

Vamos começar de onde havíamos parado no post anterior. Ele apresentou a arquitetura a seguir para monitoramento dos produtos do Elastic Stack com o Metricbeat.


Observe que cada instância do Metricbeat está monitorando uma instância ou nó de um produto do Elastic Stack. Para fazer isso, os módulos corretos do Metricbeat (variante de configuração *-xpack) devem estar habilitados. Por exemplo, para monitorar um nó do Logstash, o módulo logstash-xpack deve estar habilitado.

Nesta arquitetura, cada instância do Metricbeat envia dados para um cluster de monitoramento. Isso implica a necessidade de haver conectividade de rede entre os hosts do Metricbeat e os hosts do cluster de monitoramento.

Às vezes, no entanto, pode ser desejável minimizar o número de pontos de ingresso no Elasticsearch. Pode ser mais desejável canalizar todo o tráfego de monitoramento da stack proveniente das instâncias do Metricbeat para uma instância do Logstash, que depois encaminhará os dados para o cluster de monitoramento. Neste post do blog, examinaremos a implementação dessa arquitetura para o monitoramento da stack com o Metricbeat.

Inclusão do Logstash no fluxo de dados de monitoramento da stack

Primeiro, configuraremos um pipeline do Logstash que receberá os dados de monitoramento da stack do Metricbeat e os encaminhará para o cluster de monitoramento. Esse pipeline é mostrado abaixo, e suas partes serão explicadas mais adiante.

input {
  beats {
    port => 5044
  }
}
filter {
  # Boilerplate para compatibilidade entre as versões dos Beats
  mutate {
    rename => { "[@metadata][id]" => "[@metadata][_id]" }
  }
}
output {
  if [@metadata][index] =~ /^.monitoring-*/ {
    # rotear dados de monitoramento da stack para o cluster do Elasticsearch de monitoramento
    if [@metadata][_id] {
      elasticsearch {
        index => "%{[@metadata][index]}-%{+YYYY.MM.dd}"
        document_id => "%{[@metadata][_id]}"
        hosts => ["https://node1:9200"]
      }
    } else {
      elasticsearch{
        index => "%{[@metadata][index]}-%{+YYYY.MM.dd}"
        hosts => ["https://node1:9200"]
      }
    }
  } else {
    # rotear dados de monitoramento que não são da stack
  }
}

De forma geral, esse pipeline:

  • Usa o plugin de entrada beats para ler os dados de monitoramento da stack enviados pelo Metricbeat.
  • Usa o plugin de saída elasticsearch para enviar os dados de monitoramento da stack para o cluster de monitoramento.

Observe a escada das instruções if-else na seção output do pipeline. O if-else de nível superior lhe permite separar os dados destinados ao monitoramento da stack — para serem indexados nos índices .monitoring -* — de outros dados potencialmente coletados pelas mesmas instâncias do Metricbeat; por exemplo, se você habilitou o módulo system.

Dentro da cláusula if para dados de monitoramento da stack, há uma instrução if-else aninhada. Essa construção assegura que quaisquer IDs (se definidas) nos eventos de dados de monitoramento da stack provenientes do Metricbeat sejam passadas para o campo _id quando os dados forem indexados no cluster de monitoramento. Particularmente, isso é essencial para que os dados de monitoramento de shards do Elasticsearch sejam indexados corretamente. Sem essa construção, a UI de monitoramento da stack do Elasticsearch mostrará incorretamente um número cada vez maior de shards ao longo do tempo.

Configuração do Metricbeat para envio ao Logstash

Depois de configurar o pipeline do Logstash, você precisará configurar suas instâncias do Metricbeat para enviar os dados para o host do Logstash em vez de diretamente para o cluster de monitoramento.

output.logstash:
  hosts: [ "logstash_hostname:5044" ]

Uma variação dessa configuração poderia ser a introdução do Kafka entre o Metricbeat e o Logstash. Nesse caso, o pipeline do Logstash ficaria bastante parecido com o exemplo acima, exceto pelo fato de que você usaria o plugin de entrada kafka em vez do beats. E, correspondentemente, você configuraria suas instâncias do Metricbeat para enviar seus dados para o cluster do Kafka em vez do cluster do Logstash.

Resumo

Esperamos que este post tenha lhe proporcionado uma implementação concreta para fazer o roteamento dos seus dados de monitoramento do Elastic Stack do Metricbeat para o Elasticsearch via Logstash (ou Kafka). Também espero que ele tenha demonstrado claramente o tipo de flexibilidade que se torna possível usando o Metricbeat para coletar externamente dados de monitoramento dos produtos do Elastic Stack. 

Se tiver dúvidas ou encontrar algum problema com essa configuração, fique à vontade para publicá-las em discuss.elastic.co. E se quiser ver o que pode fazer com o monitoramento de stack, vá para a nossa demonstração interativa e experimente.