[PYTHON] Visualisieren Sie Serverressourcen mit InfluxDB und Grafana

Ich machte eine Anwendung, die für Munin schmerzhaft war und etwas mit Stoff machte, aber es wurde schmerzhaft für den Grafikzeichnungsteil, und als Ergebnis verschiedener Untersuchungen schien die Kombination von InfluxDB und Grafana gut zu sein, so dass ich die Ressourcen gut visualisierte Der Inhalt, den ich ausprobiert habe.

Überblick

Es gibt einen Überwachungsserver und eine Gruppe von überwachten Servern, und InfluxDB, Grafana und Fabric sind auf dem Überwachungsserver installiert. Der Überwachungsserver verwendet Fabric, um eine SSH-Verbindung zu jedem Server herzustellen und Metriken zu erfassen. Die erfassten Metriken werden in InfluxDB gespeichert und in Grafana visualisiert. Ich fühle mich so.

Versions

Ich habe CentOS als Betriebssystem verwendet, aber es scheint, dass die Installation und der Start von InfluxDB und Grafana unterschiedlich sind. InfluxDB = 0.8.8(stable) Grafana = 2.0.1 Fabric = 1.10.1 influxdb-python = 2.2.0

Install & Launch

Da die offizielle Installation korrekt ist, führen Sie sie einfach aus.

InfluxDB

Standardmäßig werden die Ports 8083, 8086, 8090, 8099 verwendet. Öffnen Sie sie daher bei Bedarf. Erhöhen Sie die maximale Anzahl von Dateideskriptoren mit "ulimit -n 65536".

wget http://s3.amazonaws.com/influxdb/influxdb-latest-1.x86_64.rpm
sudo rpm -ivh influxdb-latest-1.x86_64.rpm
sudo service influxdb start

Grafana

Standardmäßig wird Port 3000 verwendet. Öffnen Sie ihn daher bei Bedarf.

wget install https://grafanarel.s3.amazonaws.com/builds/grafana-2.0.2-1.x86_64.rpm
sudo rpm -ivh grafana-2.0.2-1.x86_64.rpm
sudo service grafana-server start

Fabric

Wird verwendet, um Metriken von jedem Server abzurufen. Wenn Sie die Nummern von jedem Server abrufen und in InfluxDB speichern können, müssen Sie kein Fabric sein. Im Moment frage ich mich, ob ein Tool namens Diamond gut aussieht. Fabric wird vom Python-Verpackungssystem installiert. (Es funktioniert nur, wenn es 2.x Python ist)

sudo pip install Fabric

influxdb-python

Dies wird auch mit pip installiert. Sie müssen kein Fabric verwenden.

sudo pip install influxdb

Setting

Sowohl InfluxDB als auch Grafana können auf die Weboberfläche zugreifen. Bitte machen Sie verschiedene Dinge für jeden Benutzer.

InfluxDB

Erstellen Sie eine Datenbank, um die Metriken zu speichern.

Wenn Sie auf "http: // localhost: 8083 /" zugreifen, werden Sie aufgefordert, sich anzumelden. Melden Sie sich daher mit "user = root", "password = root" an. screenshot 2015-05-10 22.00.21.png

Wenn Sie sich anmelden, wird eine Liste der Datenbanken angezeigt. Erstellen Sie eine neue Datenbank mit dem Namen "Dimensionen", in der die von jedem Server erhaltenen Messwerte gespeichert werden. screenshot 2015-05-10 22.20.41.png

Verbindung zwischen Grafana und InfluxDB

Wenn Sie auf "http: // localhost: 3000 /" zugreifen, werden Sie ebenfalls aufgefordert, sich anzumelden. Standardmäßig können Sie sich mit "user = admin" und "password = admin" anmelden. screenshot 2015-05-10 22.36.18.png

Armaturenbrett leeren. Klicken Sie oben links auf die Grafana-Markierung, um das Menü zu öffnen. Klicken Sie im Menü auf Datenquellen, um den Einstellungsbildschirm für das Grafana-Backend zu öffnen. screenshot 2015-05-10 22.27.55.png

Klicken Sie nach dem Klicken auf Datenquellen in der Mitte des Bildschirms auf Neu hinzufügen und legen Sie InfluxDB 0.8.x als Backend fest. Beachten Sie, dass der URL-Port der API-Port ist. Geben Sie daher 8086 anstelle des Browsers 8083 an. Name ist angemessen. Die Datenbank legt die zuvor in InfluxDB erstellten Dimensionen fest. Klicken Sie abschließend auf Hinzufügen, um den Vorgang abzuschließen. 993856d7-2af3-aeff-d05c-f6ac3a2df1f0.png

Damit ist die Verbindung zwischen Grafana und InfluxDB abgeschlossen.

Fabric

Holen Sie sich Metriken von jedem Server und speichern Sie sie in InfluxDB. Einzelheiten zur Verwendung finden Sie auf anderen Seiten.

fabfile.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-

from fabric.api import env, run
from influxdb.influxdb08 import InfluxDBClient
import re

env.hosts = ["server01.hoge.jp"]
env.key_filename  = ["~/.ssh/server01_rsa"]
env.user = "myuser"
client = InfluxDBClient('localhost', 8086, 'root', 'root', 'dimensions')

def loadaverage():
    match = re.search(r"load averages?:\s+(\d+\.\d+),\s+(\d+\.\d+),\s+(\d+\.\d+)", run("uptime"))
    min1  = float(match.group(1))
    min5  = float(match.group(2))
    min15 = float(match.group(3))
    client.write_points([
        {
            "name": "loadaverage_1min",
            "columns": ["value"],
            "points": [[min1]]
        },
        {
            "name": "loadaverage_5min",
            "columns": ["value"],
            "points": [[min5]]
        },
        {
            "name": "loadaverage_15min",
            "columns": ["value"],
            "points": [[min15]]
        }
    ])

Bereiten Sie ein solches Fabfile vor und führen Sie es jede Minute mit crontab aus. */1 * * * * fab loadaverage

Werfen Sie nach einigen Minuten eine Abfrage "Listenserie" von der Influx DB Dimensions DB-Weboberfläche und erhalten Sie 3 Serien zurück, ok. Serien sind übrigens wie eine Tabelle in RDB. screenshot 2015-05-11 0.25.31.png

Visualisiere mit Grafana

Wählen Sie im Dashboard-Menü die Option Neu. e455de07-5be3-037a-a27b-65307479189a.png

Sie werden zu einem neuen Dashboard weitergeleitet. Öffnen Sie daher das Menü im grünen Bereich und erstellen Sie ein neues Diagramm. da410db2-31c3-86c4-2bd8-fd258e1d231c.png

Klicken Sie auf den Titel des Diagramms (wo kein Titel steht (hier klicken)) und öffnen Sie den Bildschirm zum Einstellen des Diagramms mit Bearbeiten. Wenn Sie "load durchschnittlich_1min" in Reihe eingeben, wird ein Diagramm (!) Angezeigt. Stellen Sie die Zeitgruppe auf "1m" ein. Drücken Sie dann auf Abfrage hinzufügen, um die Abfrage hinzuzufügen, und fügen Sie auf die gleiche Weise die Einstellungen für "Load Average_5min" und "Load Average_15 Min" hinzu. Es ist sogar noch besser, Alias- und Grafiktitel gut festzulegen. Übrigens, wenn der Serienname durch Punkte getrennt ist, wird jedes durch Punkte mit Alias getrennte Feld \ $ 0, \ $ 1 ... zugewiesen, sodass Variablen verwendet werden können. In diesem Bereich ist es meiner Meinung nach einfacher einzustellen als die ursprüngliche Kibana-Gabel (die Einstellung wird auch in Echtzeit wiedergegeben). 7c5f7bca-ddc8-9e8b-be39-7c82099bd106.png

Sie können die maximale Zeit, die in der Grafik angezeigt werden soll, und die Zeit für die Echtzeitaktualisierung in der Zeitanzeige oben rechts festlegen. Klicken Sie abschließend auf Speichern, um das Dashboard zu vervollständigen.

Danach fühlt es sich an wie Kochen oder Backen. screenshot 2015-05-12 0.05.50.png

Zusammenfassung

Die Verwaltung und grafische Darstellung von Zeitreihen von Metrikdaten, die schwer persönlich zu erstellen waren, war mit InfluxDB und Grafana sehr einfach. Ich freue mich auf die Version 1.0 von InfluxDB, aber es scheint, dass es nicht viel Kompatibilität zwischen 0,8 und 0,9 gibt, so dass es schmerzhaft sein wird. Grafana ist ein Klon von Kibana, daher ist es großartig, ein Dashboard mit noch besserer Bedienbarkeit erstellen zu können und gleichzeitig das coole Erscheinungsbild beizubehalten. Auch wenn es ziemlich schmerzhaft war, die elastische Suche einbeziehen zu müssen, obwohl ich sie nur mit Kibana visualisieren wollte, ist Grafana nüchtern, dass ich die Art des Backends auswählen kann. Da Fabric und Diamond nicht miteinander konkurrieren, scheint es besser, Diamond für durchschnittliche und allgemeine Lastmetriken und Fabric für anwendungsorientiertere Metriken zu verwenden. Zusätzlich zu der Grafikanzeige, die ich dieses Mal geschrieben habe, verfügt das Dashboard auch über eine einzelne Statistik, sodass Sie beispielsweise nur den aktuellen Status anzeigen können. Es scheint, dass Sie eine Anmerkung hinzufügen und so etwas in der Grafik tun können.

Recommended Posts

Visualisieren Sie Serverressourcen mit InfluxDB und Grafana
HTTP-Server und HTTP-Client mit Socket (+ Webbrowser) - Python3
Visualisieren Sie die Pflanzenaktivität aus dem Weltraum mithilfe von Satellitendaten und Python