Engineering

Elastic Stack-Überwachung mit Metricbeat über Logstash oder Kafka

In einem vorherigen Blogeintrag haben wir eine neue Methode vorgestellt, mit der Sie den Elastic Stack mit Metricbeat überwachen können. Wenn Sie Metricbeat einsetzen, um Überwachungsdaten für Elastic Stack-Produkte extern zu erfassen, können Sie diese Produkte zuverlässiger überwachen. Außerdem können Sie die Überwachungsdaten flexibler an den Elasticsearch-Überwachungscluster weiterleiten. In diesem Blogeintrag nehmen wir den zweiten Aspekt genauer unter die Lupe und sehen uns an, wie Sie die von Metricbeat erfassten Daten mit Logstash oder Kafka an den Überwachungscluster weiterleiten können. Wenn Sie bereits die logstash- oder kafka-Ausgabe in der Metricbeat-Konfiguration für Ihre Unternehmensdaten nutzen, können Sie diese Ausgaben auch weiterhin für die Weiterleitung Ihrer Elastic Stack-Überwachungsdaten verwenden.

Sehen wir uns nun an, wie weit wir im vorherigen Blogeintrag gekommen sind. Dort wurde die folgende Architektur zur Überwachung von Elastic Stack-Produkten mit Metricbeat vorgestellt.


Beachten Sie, dass jede Metricbeat-Instanz eine Instanz oder einen Knoten eines Elastic Stack-Produkts überwacht. Dazu müssen die korrekten Metricbeat-Module (*-xpack-Konfigurationsvariante) aktiviert werden. Um einen Logstash-Knoten zu überwachen, müssen Sie beispielsweise das Modul logstash-xpack aktivieren.

In dieser Architektur übertragen sämtliche Metricbeat-Instanzen Daten an einen Überwachungscluster. Dies bedeutet, dass sich die Metricbeat-Hosts über das Netzwerk mit den Hosts des Überwachungsclusters verbinden können müssen.

Manchmal ist es jedoch sinnvoll, die Anzahl der Einstiegspunkte in Elasticsearch zu minimieren. In diesen Fällen kann es wünschenswert sein, sämtlichen Stack-Überwachungstraffic von den Metricbeat-Instanzen in eine Logstash-Instanz zu leiten und die Daten anschließend an den Überwachungscluster zu übermitteln. In diesem Blogeintrag sehen wir uns an, wie Sie eine solche Architektur für die Stack-Überwachung mit Metricbeat implementieren können.

Logstash zum Datenfluss für die Stack-Überwachung hinzufügen

Zunächst richten wir eine Logstash-Pipeline ein, die Stack-Überwachungsdaten von Metricbeat empfängt und an den Überwachungscluster weiterleitet. Hier sehen Sie die Pipeline und eine Erklärung der einzelnen Komponenten.

input {
  beats {
    port => 5044
  }
}
filter {
  # Vorlage für Kompatibilität mit verschiedenen Beats-Versionen
  mutate {
    rename => { "[@metadata][id]" => "[@metadata][_id]" }
  }
}
output {
  if [@metadata][index] =~ /^.monitoring-*/ {
    # Stack-Überwachungsdaten an den Elasticsearch-Überwachungscluster weiterleiten
    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 {
    # Sonstige Überwachungsdaten weiterleiten
  }
}

Diese Pipeline erledigt Folgendes:

  • Das beats-Eingabe-Plugin liest die von Metricbeat übertragenen Stack-Überwachungsdaten.
  • Das elasticsearch-Ausgabe-Plugin sendet die Stack-Überwachungsdaten an den Überwachungscluster.

Beachten Sie die verschiedenen if-else-Anweisungen im output-Abschnitt der Pipeline. Mit dem if-else in der obersten Ebene können Sie die Daten für die Stack-Überwachung (die in .monitoring-*-Indizes indexiert werden) von anderen Daten trennen, die möglicherweise von denselben Metricbeat-Instanzen gesammelt werden, z. B. wenn Sie das Modul system aktiviert haben.

In der if-Klausel für die Stack-Überwachungsdaten befindet sich eine verschachtelte if-else-Anweisung. Damit wird sichergestellt, dass alle eventuell vorhandenen IDs in den Stack-Überwachungsdaten aus Metricbeat an das Feld _id weitergeleitet werden, wenn die Daten im Überwachungscluster indexiert werden. Dies ist insbesondere wichtig, um die Überwachungsdaten für Elasticsearch-Shards korrekt zu indexieren. Ohne diese Anweisungen wird in der Stack-Überwachungs-GUI für Elasticsearch fälschlicherweise eine mit der Zeit ständig wachsende Anzahl von Shards angezeigt!

Metricbeat für die Übertragung zu Logstash konfigurieren

Nachdem Sie die Logstash-Pipeline eingerichtet haben, müssen Sie Ihre Metricbeat-Instanzen so konfigurieren, dass die Daten an den Logstash-Host gesendet werden, anstatt direkt an den Überwachungscluster.

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

Andere Varianten dieser Konfiguration können beispielsweise Kafka zwischen Metricbeat und Logstash einbinden. In diesem Fall könnten Sie eine Abwandlung der oben gezeigten Logstash-Pipeline verwenden, in der Sie jedoch das kafka-Eingabe-Plugin anstelle des beats-Plugins verwenden. Analog dazu würden Sie Ihre Metricbeat-Instanzen so konfigurieren, dass sie ihre Daten anstelle von Logstash an den Kafka-Cluster senden.

Fazit

Hoffentlich hilft Ihnen dieser Blogeintrag dabei, die Weiterleitung Ihrer Elastic Stack-Überwachungsdaten von Metricbeat über Logstash (oder Kafka) an Elasticsearch zu implementieren. Ich hoffe außerdem, dass ich Ihnen die Flexibilität aufzeigen konnte, die Sie erhalten, wenn Sie Ihre Überwachungsdaten aus Elastic Stack-Produkten extern mit Metricbeat erfassen. 

Falls Sie Fragen haben oder falls bei dieser Einrichtung Probleme auftreten, können Sie sich jederzeit unter discuss.elastic.co melden. Und wenn Sie das Potenzial der Stack-Überwachung kennenlernen möchten, können Sie jederzeit unsere interaktive Demo ausprobieren.