[PYTHON] Ich habe mit Diamond gespielt, einem Tool zum Sammeln von Metriken

Einführung

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.

Speicherung und Visualisierung von Zeitreihendaten

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.

grafana.png

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

Tool zur Erfassung von Metriken, Diamond

Was ist Diamant?

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.

Diamanten Stärken

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.

Bewegen Sie sich vorerst

Installation

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

Einstellungsdatei bearbeiten

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.

grafana_2.png

Es ist eine gute Idee, Fehler zu beheben, indem Sie sich /var/log/diamond/diamong.log ansehen.

tips

Ich möchte das Intervall der Erfassungszeit von Metriken festlegen

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

Ich möchte den Logger einrichten

Sie können das Protokollausgabeformat, das Format und das Ausgabeziel angeben. Eine allgemeine Vorstellung erhalten Sie unter Diamond / Configuration.

Ich möchte einen Handler einstellen

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.

Ich möchte einen benutzerdefinierten Sammler entwickeln

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.

Ähnliche Lösung

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

Zusammenfassung / Eindruck

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

Ich habe mit Diamond gespielt, einem Tool zum Sammeln von Metriken
Ich habe mit Wordcloud gespielt!
Ich habe ein Router-Konfigurationssammlungstool Config Collecor erstellt
Ich habe mit Python eine Lotterie gemacht.
Ich habe mit PyQt5 und Python3 gespielt
Ich habe mit Mecab gespielt (morphologische Analyse)!
Ich habe mit Python einen Daemon erstellt
[5.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[2nd] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[Einführung in StyleGAN] Ich habe mit "The Life of a Man" ♬ gespielt
Ich habe ein Werkzeug ausprobiert, das Gochs Muster mit KI imitiert
[4.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[Einführung in StyleGAN] Ich habe mit "Eine Frau verwandelt sich in Mayuyu" gespielt ♬
[1.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe mit DragonRuby GTK (Game Toolkit) gespielt.
Ich habe ein Tool zum automatischen Durchsuchen mehrerer Websites mit Selenium (Python) erstellt.
Ich habe mit Python einen Zeichenzähler erstellt
Ich habe eine Heatmap mit Seaborn [Python] gezeichnet.
[Scikit-learn] Ich habe mit der ROC-Kurve gespielt
Ich habe eine funktionale Sprache mit Python ausprobiert
[Einführung in Pytorch] Ich habe mit sinGAN ♬ gespielt
Was ich mit Python-Arrays gemacht habe
Ich habe mit Python eine Hex-Map erstellt
Ich habe ein Tool erstellt, um Jupyter py mit VS Code in ipynb zu konvertieren
Ich habe ein Lebensspiel mit Numpy gemacht
Ich habe ein Tool erstellt, das die Dekomprimierung mit CLI (Python3) etwas erleichtert.
Ich habe einen Hanko-Generator mit GAN gemacht
Ich habe ein automatisches Stempelwerkzeug für den Browser erstellt.
Ich habe ein Passwort-Tool in Python erstellt.
Ich habe mit Python ein schurkenhaftes Spiel gemacht
Ich habe mit Python einen einfachen Blackjack gemacht
Ich habe mit Python eine Einstellungsdatei erstellt
Ich habe eine WEB-Bewerbung bei Django gemacht
Ich habe mit Python einen Neuronensimulator erstellt
Ich habe ein Tool zum Korrigieren von GPS-Daten mit der Map Matching API von Mapbox (Mapbox Map Matching API) erstellt.
Ich habe einen Stempelersatzbot mit Linie gemacht
Ich habe mit Python eine Bot-Wettervorhersage gemacht.
Ich habe eine GUI-App mit Python + PyQt5 erstellt
Ich habe versucht, mit Python einen Twitter-Blocker für faule Mädchen zu machen
Ich möchte ein Spiel mit Python machen
[Python] Ich habe mit der Verarbeitung natürlicher Sprache ~ Transformatoren ~ gespielt
Ich habe vorerst mit Floydhub gespielt
[Python] Ich habe mit Tkinter einen Youtube Downloader erstellt.
Ich erhalte einen UnicodeDecodeError, wenn ich mit mod_wsgi laufe
Ich habe eine einfache Brieftasche aus Bitcoin mit Pycoin gemacht
Ich habe einen LINE Bot mit Serverless Framework erstellt!
Ich habe ein Tool erstellt, um Hy nativ zu kompilieren
Ich habe ein Tool erstellt, um neue Artikel zu erhalten
Ich habe versucht, alembic auszuführen, ein Migrationstool für Python
Ich habe mit Numpy eine Grafik mit Zufallszahlen erstellt
Ich möchte mit Python in eine Datei schreiben
Ich habe versucht, die Datenbank (sqlite3) mit kivy zu verwenden
Erstellen Sie ein Übersetzungswerkzeug mit dem Translate Toolkit
Ich habe mit Python ein Bin-Picking-Spiel gemacht
Mattermost Bot mit Python gemacht (+ Flask)
Ich habe ein CLI-Tool in der Sprache Go geschrieben, um Qiitas Tag-Feed in CLI anzuzeigen
Ich habe einen Twitter BOT mit GAE (Python) gemacht (mit einer Referenz)
Ich habe mit LINE Bot ein Haushaltsbuch für Bot erstellt