Dies ist ein Memo, das ich mit Diamond, einem Tool zum Sammeln von Metriken, ausprobiert habe. Der Standard Graphite + Grafana wurde als Speicher- und Visualisierungsplattform für Zeitreihendaten verwendet.
Zunächst werde ich kurz Graphite und Grafana vorstellen. Graphite bietet die folgenden Dienstleistungen an.
Graphite kann von selbst visualisiert werden, aber es ist schwer zu sagen, dass es hochentwickelt ist, so dass Graphite nur API bereitstellt, und es scheint, dass andere Tools häufig für Visualisierungsteile wie die Dashboard-Generierung verwendet werden. Als Visualisierungstool habe ich diesmal Grafana verwendet.
Mit Grafana können Sie beispielsweise ganz einfach ein stilvolles Dashboard wie dieses erstellen.
Für Graphite und Grafana sind die folgenden Websites hilfreich. Visualisieren Sie die Ergebnisse der Chefausführung mit Chefhandlern + Graphit Graphite Documentation Beachten Sie, dass ich ungefähr eine Stunde lang versucht habe, Graphite und Grafana zu verwenden Erstellen Sie mit Grafana ein Dashboard, in dem Graphitdaten angezeigt werden Grafana Official
Dies ist der Hauptteil dieser Zeit.
Diamond Diamant kann grob in zwei Komponenten unterteilt werden
Der Sammler ist für die Erfassung der Daten verantwortlich. Nur zu sammeln ist nicht dasselbe wie die gesammelten Daten außerhalb von Diamond bereitzustellen. Der Handler verarbeitet die gesammelten Daten. Sie können beispielsweise die vom Collector erhaltenen Daten in eine lokale Datei schreiben, an Graphite senden (vielleicht sollten Sie sie Carbon nennen?), In einer MySQL-Tabelle speichern, eine Warnung überspringen, wenn etwas nicht stimmt, und so weiter.
Außerdem bietet Diamond einen Daemon, der den Collector regelmäßig ausführt, sodass Sie keinen eigenen Scheduler schreiben müssen.
Das heißt, ob es eine Stärke ist oder nicht, ist subtil, aber Diamond hat eine ziemlich große Anzahl von Sammlern, die von der Community bereitgestellt werden. Diamond/Collectors Verschiedene Systeminformationen, berühmte Orte wie Apache, Nginx, MySQL, PostgreSQL, Redis, MongoDB, DRBD und relativ verrückte Metriken wie Openstack Swift werden gesammelt.
Grundsätzlich werde ich es tun, während ich hier schaue. Obwohl es sich um ein Python-Hauptprojekt handelt, erstelle ich es mit make. Diamond/Usage
Als Referenz die Systeminformationen der installierten Maschine.
-(risuo@ebi)-(0)-
-[9362]% cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.10
DISTRIB_CODENAME=quantal
DISTRIB_DESCRIPTION="Ubuntu 12.10"
-(risuo@ebi)-(0)-
-[9369]% uname -a
Linux ebi 3.5.0-23-generic #35-Ubuntu SMP Thu Jan 24 13:05:29 UTC 2013 i686 athlon i686 GNU/Linux
Bearbeiten Sie zunächst diamant.conf. Standardmäßig sieht es so aus Diamond / conf / diamant.conf.example Wenn Sie es normal installieren, wird /etc/diamond/diamond.conf.example erstellt. Erstellen Sie daher eine Kopie mit dem Namen diamant.conf im selben Verzeichnis.
Wenn Sie Daten an Graphite senden möchten, stellen Sie diese zuerst hier ein
[[GraphiteHandler]]
### Options for GraphiteHandler
# Graphite server host
host = graphite
# Port to send metrics to
port = 2003
# Socket timeout (seconds)
timeout = 15
# Batch size for metrics
batch = 1
Schreiben Sie im Host-Teil den Host des Graphite-Servers. Stellen Sie die Portnummer nach Bedarf ein. Graphit muss in den Handlern im Abschnitt [Server] angegeben werden, dies ist jedoch die Standardeinstellung, sodass Sie sich vorerst nicht dessen bewusst sein müssen.
Wie oben erwähnt, funktioniert es vorerst.
sudo /etc/init.d/diamond start
sudo service diamond start
Starten Sie den Daemon mit.
Warten Sie eine Weile und sehen Sie sich dann Grafanas Dashboard an. Es ist erfolgreich, wenn Sie Metriken auswählen können, die Systeminformationen enthalten. Das Bild unten zeigt Metriken in Bezug auf CPU, Speicherplatz, Speicher, Iostat und Lastdurchschnitt.
Es ist eine gute Idee, Fehler zu beheben, indem Sie sich /var/log/diamond/diamong.log ansehen.
tips
Geben Sie zunächst den Intervallwert von conf für verschiedene Kollektoren an. Sie können auch globale Standardwerte in diamant.conf festlegen. Sie können es tatsächlich in den Quellcode einbetten. Sie können sehen, wie es geschrieben wird, indem Sie die Methode get_default_config lesen. Die folgende Seite ist detailliert. Diamond/Configuration
Schreiben Sie so (Einheit ist Sekunden)
interval = 60
Sie können das Protokollausgabeformat, das Format und das Ausgabeziel angeben. Eine allgemeine Vorstellung erhalten Sie unter Diamond / Configuration.
Geben Sie die Handler an, die Sie in den Handlern im Abschnitt [Server] aktivieren möchten. Standardmäßig sind GraphiteHandler und ArchiveHandler aktiviert, sie werden jedoch wie folgt angegeben.
handlers = diamond.handler.graphite.GraphiteHandler, diamond.handler.archive.ArchiveHandler
Wenn Sie beispielsweise auswählen und senden möchten, müssen Sie GraphitePickleHandler im Abschnitt [Server] festlegen. Wenn Sie die erfassten Daten in MySQL speichern möchten, geben Sie MySQLHandler an.
Die Community stellt auch einen InfluxdbHandler zur Verfügung, einen Handler, der in Influxdb gespeichert wird. Grafana kann auch aus Influxdb gezogen werden. Wählen Sie also die gewünschte aus.
Die Einstellungen für jeden Handler werden im Abschnitt [Handler] beschrieben.
Sie können einen benutzerdefinierten Kollektor entwickeln, indem Sie diamant.collector.Collector erweitern (oder eine abgeleitete Klasse, wenn Sie dies normal tun). Von den Methoden, die diamant.collector.Collector hat, ist das "Veröffentlichen" die Schnittstelle zwischen Kollektor und Handler. Außerdem verfügt diamant.collector.Collector über eine nicht implementierte "Collect" -Methode, mit der Entwickler Collect in abgeleiteten Klassen implementieren können. Die folgende Seite wird hilfreich sein. Diamond/CustomCollectors
Da die Informationsmenge allein damit gering ist, sollten Sie die Implementierung der Collector-Klasse lesen, wenn Sie einen benutzerdefinierten Collector entwickeln. collector.py
Beispielsweise hat die Veröffentlichungsmethode ein Argument namens Genauigkeit, das die Anzahl der gültigen Ziffern in Metriken angibt. Dies ist standardmäßig 0, dh es können nur Ganzzahlen verarbeitet werden. Es gibt eine ganze Reihe von Situationen, in denen Sie Metriken mit float verarbeiten möchten, aber es scheint, dass Sie keine Lösung finden können, ohne den Quellcode zu lesen.
sensu und fließend sind Bilder, die etwas Ähnliches können. sensu fluentd
Es scheint, dass sensu verschiedene andere Dinge tun kann als das Sammeln von Metriken. Es ist cool, mithilfe der sensu-API ein Dashboard erstellen zu können, das Informationen zu jedem Knoten ausgibt, der den sensu-Client enthält. Es scheint, dass dies mit Diamond nicht nachgeahmt werden kann. Die folgenden Websites sind hilfreich. Über Graphit und Sensu Aufbau eines hochflexiblen Überwachungssystems mit Sensu Verwenden Sie Fluentd, um CloudWatch-Metriken in Graphite anzuzeigen Ich habe eine Kombination aus InfluxDB und Fluentd ausprobiert
Es ist einfach, aber ich habe über Diamond geschrieben. Es ist wichtig, die Daten sichtbar zu halten, daher halte ich es für eine gute Idee, diese Tools in Zukunft beizubehalten.
Recommended Posts