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.