[PYTHON] Beginnen Sie mit influxDB + Grafana

Hintergrund

Ich habe Elasticsearch immer als Visualisierungstool verwendet, aber wenn Sie numerische Daten wie sogenannte Servermetrikdaten aufzeichnen möchten, versuchen Sie es auch mit influxDB.

Übersicht über influxDB + Grafana

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

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.

Verfahren

Starten Sie influxDB und Grafana

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.

Verbindung zwischen influxDB und Grafana

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`.

Grafana Add Data Source

Die anfänglichen Einstellungen für die Authentifizierungsbenutzer-ID und das Kennwort lauten root: root für influxDB und admin: admin für Grafana.

Eingabedaten in influxDB

Ich habe diesmal Python verwendet, aber vorher werde ich über die Struktur von influxDB sprechen.

Struktur von influxDB

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.

Datenstruktur von influxDB

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.

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.

Dateneingabeverarbeitung

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.

Visualisierung mit Grafana

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.

Benutzerfreundlichkeit im Vergleich zu ES + Kibana

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

Beginnen Sie mit influxDB + Grafana
Beginnen Sie mit MicroPython
Beginnen Sie mit Mezzanine
Fangen Sie mit Django an! ~ Tutorial ⑤ ~
Fangen Sie mit Django an! ~ Tutorial ④ ~
Fangen Sie mit Django an! ~ Tutorial ⑥ ~
Beginnen Sie mit Python! ~ ② Grammatik ~
Beginnen Sie mit Python! ~ ① Umweltbau ~
Link, um mit Python zu beginnen
Erste Schritte mit MicroPython (unter macOS)
Wie fange ich mit Scrapy an?
Erste Schritte mit Python
Wie fange ich mit Django an?
Beginnen Sie mit dem maschinellen Lernen mit SageMaker
Beginnen Sie mit Python mit Blender
Schritt Notizen, um mit Django zu beginnen
Ich habe versucht, mit Hy anzufangen
Erste Schritte mit dem Dokumentationstool Sphinx
Beginnen wir mit TopCoder in Python (Version 2020)
Wie Python-Anfänger mit Progete beginnen
[Blender x Python] Beginnen wir mit Blender Python !!
Python-Handspiel (Beginnen wir mit AtCoder?)
Der einfachste Weg, um mit Django zu beginnen
Zubu Amateur will Python starten
[Cloud102] # 1 Erste Schritte mit Python (Teil 1 Python Erste Schritte)
Django 1.11 wurde mit Python3.6 gestartet
Starten Sie Jupyter Notebook
1.1 Erste Schritte mit Python
Erste Schritte mit apache2
Erste Schritte mit Python
Erste Schritte mit Django 1
Einführung in die Optimierung
Holen Sie sich Tweets mit Tweepy
Holen Sie sich ein Date mit Python
Erste Schritte mit Numpy
Erste Schritte mit Spark
Erste Schritte mit Python
Erste Schritte mit Pydantic
Erste Schritte mit Jython
Erste Schritte mit Django 2
Ich habe versucht, mit Blenders Python script_Part 01 zu beginnen
Ich habe versucht, mit Blenders Python script_Part 02 zu beginnen
Holen Sie sich den Ländercode mit Python
Übersetzen Erste Schritte mit TensorFlow
Holen Sie sich die Tabelle dynamisch mit sqlalchemy
Einführung in Python-Funktionen
Einführung in Tkinter 2: Button
Erste Schritte mit Go Assembly
Holen Sie sich Twitter-Timeline mit Python
Mindestkenntnisse, um mit dem Python-Protokollierungsmodul zu beginnen
Holen Sie sich Youtube-Daten mit Python
Erste Schritte mit Python Django (1)
Informationen erhalten Sie mit zabbix api