Ich habe Elasticsearch immer als Visualisierungstool verwendet, aber wenn Sie numerische Daten wie sogenannte Servermetrikdaten aufzeichnen möchten, versuchen Sie es auch mit influxDB.
influxDB wird in eine Software namens Zeitreihendatenbank (Zeitreihendatenbank) klassifiziert. Wie der Name schon sagt, handelt es sich bei der Zeitreihen-Datenbank um eine Datenbank zum Speichern von Daten, die sich im Laufe der Zeit ändern. [In der englischen Version von Wikipedia gibt es eine Artikelseite](https://en.wikipedia.org/ wiki / Time_series_database) sagt, dass RRDTool auch eine Zeitreihen-DB ist.
In Anbetracht des Vergleichs mit RRDTool sind die Merkmale von influxDB wie folgt.
Grafana ist ein von Kibana entwickeltes Dashboard-Tool, das jedoch nicht auf influxDB spezialisiert ist und mit Graphite und CloudWatch verknüpft werden kann. Dies hat standardmäßig auch einen Authentifizierungsmechanismus.
Da es schnell geht, habe ich das offizielle Docker-Image mit Docker Compose gestartet.
** 22.12.2016 Nachtrag: ** Die Beschreibung des Datenvolumens wurde zu den Containereinstellungen von Grafana hinzugefügt. Weil es notwendig war, das SQLite-Verzeichnis zu speichern, um Grafanas Dashboard, Benutzereinstellungen usw. beizubehalten. Es ist möglich, Dashboard-Einstellungen usw. in einer externen Datenbank wie MySQL zu speichern. Zur Vereinfachung habe ich mich jedoch für SQLite entschieden, das dieses Mal standardmäßig vorbereitet wird. (Referenz: Grafana - Konfiguration)
docker-compose.yml
version: "2"
services:
influxdb:
image: influxdb
ports:
- "8083:8083"
- "8086:8086"
volumes:
- /tmp/influxdb:/var/lib/influxdb
grafana:
image: grafana/grafana
ports:
- "3000:3000"
volumes:
- /tmp/grafana:/var/lib/grafana
Von den beiden in influxDB geöffneten Ports ist "8083" die Web-Benutzeroberfläche und "8086" der REST-API-Endpunkt. Da die Daten in / var / lib / influxdb
gespeichert sind, werden sie auch als Datenvolumen mit dem Host-Betriebssystem synchronisiert.
Grafana öffnet nur einen Port für die Web-Benutzeroberfläche. Im Fall von Kibana wurde die Verbindung mit Elasticsearch in "kibana.yml" festgelegt. Da Grafana jedoch die Verbindung mit der Datenbank auf der Web-Benutzeroberfläche herstellt, ist es an dieser Stelle nicht erforderlich, die Einstellungsdatei usw. zu berücksichtigen.
Greifen Sie über einen Webbrowser auf "http: // (Docker Host IP): 3000" zu, wählen Sie "Datenquellen" aus dem Symbol oben links und wählen Sie "http: // (Docker Host IP): aus" Datenquelle hinzufügen ". Verbinden Sie sich mit 8086`.
Die anfänglichen Einstellungen für die Authentifizierungsbenutzer-ID und das Kennwort lauten root: root für influxDB und admin: admin für Grafana.
Ich habe diesmal Python verwendet, aber vorher werde ich über die Struktur von influxDB sprechen.
Datenbank
: Die größte Dateneinheit, ähnlich der Datenbank in RDBMS. Vor der Dateneingabe muss eine Datenbank erstellt werden.Messung
: Die Position der Tabelle in RDBMS.Ich habe es nicht richtig verwendet, weil ich es noch ausprobiert habe, aber es wäre schön, eine "Aufbewahrungsrichtlinie" zu haben. Es ist möglich, unbegrenzt Daten zu speichern, um ein Überlaufen der Kapazität zu verhindern und die Verfügbarkeit sicherzustellen.
Wenn Sie json mit Elasticsearch richtig einfügen, können Sie es bereits verwenden, sodass Sie die Zubora-Operation wie das Auslösen von json verwenden können, wie es von der API erhalten wurde. Im Fall von influxDB wird jedoch die Datenstruktur festgelegt, die in json enthalten sein soll.
Messung
: Geben Sie an, in welche Messung
Sie importieren möchten.Felder
: Geben Sie die sogenannten Daten selbst in Form eines Schlüsselwerts an. Der Schlüssel ist auf den Zeichenfolgentyp beschränkt, der Wert unterstützt jedoch zusätzlich zur Zeichenfolge float, integer und boolean. Es ist auch möglich, mehrere "Felder" einzuschließen.tags
: Geben Sie optionale Daten an. Wenn Sie beispielsweise Servermetrikdaten eingeben, lautet der Servername "Tags". Sie können hier mehrere einfügen, beachten Sie jedoch, dass nur der Zeichenfolgentyp unterstützt wird.timestamp
: Zeitstempel der Daten. Der wesentliche Teil von Zeitreihendaten. Wenn nicht angegeben, wird der Zeitpunkt, zu dem der Eingabevorgang ausgeführt wurde, automatisch angewendet. InfluxDB unterstützt nur * UTC. * *Es scheint eine willkürliche Verwendung von "Feldern" und "Tags" zu geben, aber der große Unterschied besteht darin, dass "Felder" nicht indiziert werden, sondern "Tags" indiziert werden. So können Sie beispielsweise beim Abfragen die Klausel "GROUP BY" verwenden, aber hier verwenden wir die "Tags". Die für die Suche usw. verwendeten Metadaten sollten "Tags" sein, und die Daten, die sich im Laufe der Zeit ändern, sollten als "Felder" unterdrückt werden. Normalerweise frage ich nicht nach Datenänderungen, z. B. wenn die CPU-Auslastung 80% beträgt. Daher ist es verständlich, dass "Felder" nicht indiziert sind.
Ich werde kurz die Quelle zeigen.
from influxdb import InfluxDBClient
client = InfluxDBClient('127.0.0.1', 8086, 'root', 'root', 'sample')
#Beurteilen Sie die Existenz einer Datenbank und erstellen Sie vor der Erstellung eine neue
dbs = client.get_list_database()
sample_db = {'name' : 'sample'}
if sample_db not in dbs:
client.create_database('sample')
#Erstellen Sie zu importierende JSON-Daten
import_array = [
{
"fields" : {
"cpu" : 50.0,
"mem" : 20.0,
},
"tags" : {
"category" : "fuga",
"machine" : "web02"
},
"measurement" : "metrics"
}
]
#Dateneingabe
client.write_points(import_array)
Es ist einfach. Ich habe das Passwort direkt in "InfluxDB Client" geschrieben, aber die Hardcodierung sollte während dieses Vorgangs gestoppt werden. Was die Daten betrifft, versuche ich, wie ich zuvor geschrieben habe, mehrere "Felder" und "Tags" zu setzen. Jetzt können Sie für jede Maschine ein Diagramm zeichnen.
Da es sich um eine Operation mit GUI handelt, werde ich die Details weglassen, aber ich werde sie visualisieren, indem ich Teile wie Panel on Dashboard wie Kibana anordne. Zusätzlich zu Graph verfügt Panel über Single Stat, das nur den neuesten Wert in großen Zahlen anzeigen kann, Text, mit dem Sie Sätze mit Markdown usw. schreiben können, und einen hohen Freiheitsgrad.
Wenn Sie die Daten angeben, die in Graph usw. angezeigt werden sollen, wird dies mit einer SQL-Anweisung festgelegt. Obwohl dies leicht zu verstehen ist, müssen Sie die Verwendung der SQL-Anweisung in influxDB gedrückt halten. Da Sie jedoch SQL erstellen können, indem Sie auf Kandidaten in der GUI klicken und diese kombinieren, kann selbst ein etwas vages Verständnis recht gut sein. Es ist sehr leicht.
Als ich mir die Benutzerfreundlichkeit von Elasticsearch + Kibana vorstellte, war ich verwirrt darüber, dass der JSON-Schlüssel, der bei der Eingabe festgelegt werden muss, festgelegt wurde und dass die Selbstsucht anders war (wenn es sich um JSON handelte, konnte ich nach allem suchen und mäßig suchen. Die ES, die erstellt werden kann, ist der Gott), und das Gefühl der Verwendung ist, dass es "einfach ist, Daten zu visualisieren" und dass es leicht zu sehen ist. Wird es zuerst mit Elasticsearch konkurrieren? Ich dachte, aber jetzt verstehe ich, dass es sich um Werkzeuge mit deutlich unterschiedlichen Verteidigungsbereichen handelt.
Wenn Sie beispielsweise MySQL betreiben, eignet sich Elasticsearch, wenn Sie langsame Abfrageprotokolle über einen längeren Zeitraum erfassen und analysieren möchten, und Elasticsearch ist auch möglich, wenn Sie das Verkehrsaufkommen überwachen möchten, jedoch als Trennung, influxDB Es scheint so als.
Recommended Posts