Als Fortsetzung zum Tutorial InfluxDB unter Ubuntu 16.04/18.04 installieren und einrichten und des darin begonnenen Anwendungsszenarios, werde ich dir in diesem Tutorial Chronograf als eine Möglichkeit der Analyse, Aufbereitung und dem Management von in InfluxDB gespeicherten Messungen vorstellen und das erwähnte Anwendungsszenario dahingehend fortführen, dass ich die in der Datenbank namens OnlineMarketDevelopment als Teil der Messung namens SalesActivity eingebundenen Datenpunkte in Chronograf plotten lasse.
Wie bereits im oben genannten Tutorial angeschnitten, bietet das integrierte Open-Source-Projekt Chronograf eine Komponente für die Benutzeroberfläche zum Management, zur Überwachung und graphischen Aufbereitung von in InfluxDB enthaltenen Messungen. Integriert bedeutet, dass sowohl InfluxDB als auch Chronograf Komponenten eines Stacks sind, dem sogenannten TICK-Stack. Zu diesem Stack gehören noch die Bestandteile Telegraf und Kapacitor. Telegraf bildet die Schnittstelle, um Daten an InfluxDB zu sammeln und zu senden. Mit InfluxDB lassen sich Daten somit nicht lediglich wiederauffindbar aufbewahren, sondern sind via Telegraf auch jederzeit an Chronograf übertragbar. Kapacitor regelt als Komponente der Datenverarbeitung die Kommunikation/Benachrichtigung an Chronograf und den Hintergrund. Letztlich fungiert Chronograf dann auf Basis von Telegraf, InfluxDB und Kapacitor als infrastrukturelles Monitoring-Tool, zur Datenvisualisierung, sowie zum Management von Benachrichtigungen und der Datenbank.
Zunächst müssen diese vier Komponenten heruntergeladen, installiert und konfiguriert worden sein, damit du deine Infrastruktur nutzen kannst. Da wir zusammen InfluxDB bereits im Tutorial InfluxDB unter Ubuntu 16.04/18.04 installieren und einrichten erfolgreich installiert und konfiguriert haben, widme ich mich nun den übrigen drei Bestandteilen des Stacks.
Kapacitor installieren und einrichten
Zunächst downloaden und installieren wir Kapacitor unter Ubuntu 16.04 mit den beiden unten stehenden Kommandos im Terminal.
> wget https://dl.influxdata.com/kapacitor/releases/kapacitor_1.4.0_amd64.deb
> dpkg -i kapacitor_1.4.0_amd64.deb
Um Kapacitor einmalig zu starten, ist noch der unten eingeblendete Command notwendig.
> systemctl start kapacitor
Du kannst sicherstellen, ob Kapacitor funktioniert indem du das Kommando nutzt, dass ich dir im unten eingeblendeten Code-Snippet zeige. Wenn deine Anfrage erfolgreich ausfällt, dann lautet das Output folglich so, wie du unten im Code-Block erkennen kannst.
> kapacitor list tasks
ID Type Status Executing Databases and Retention Policies
Andernfalls erhältst du folgendes Output.
> kapacitor list tasks
Get http://localhost:9092/kapacitor/v1/tasks?dot-view=attributes&fields=type&fields=status&fields=executing&fields=dbrps&limit=100&offset=0&pattern=&replay-id=&script-format=formatted: dial tcp [::1]:9092: getsockopt: connection refused
Telegraf installieren und einrichten
Nun downloadest und installierst du Telegraf, indem du die beiden unten stehenden Kommandos jeweils im Terminal veranlasst.
> wget https://dl.influxdata.com/telegraf/releases/telegraf_1.4.3-1_amd64.deb
> dpkg -i telegraf_1.4.3-1_amd64.deb
Wie im Fall von Kapacitor, musst du auch Telegraf mittels dem unten stehenden Kommando starten, wobei die Konfigurationsdatei telegraf.conf generiert werden sollte, die dann wiederum im Verzeichnis /etc/telegraf liegen würde.
> systemctl start telegraf
Um auch die Funktionalität von Telegraf zu gewährleisten, solltest du an zwei Stellen in der Konfigurationsdatei die Einträge prüfen. In meinem Beispiel werde ich das mit dem nano-Editor tun, und zwar indem ich die besagte Datei mit dem unten verdeutlichten Kommando öffne.
> nano /etc/telegraf/telegraf.conf
Die beiden unten eingeblendeten Code-Blöcke zeigen dir jeweils die Stellen, deren Inhalte du in der Konfigurationsdatei abgleichen solltest. Der erste Code-Block betrifft die Output-Sektion und der zweite die Input-Sektion.
[[outputs.influxdb]]
## The full HTTP or UDP endpoint URL for your InfluxDB instance.
## Multiple urls can be specified as part of the same cluster,
## this means that only ONE of the urls will be written to each interval.
# urls = ["udp://localhost:8089"] # UDP endpoint example
urls = ["http://localhost:8086"] # required
## The target database for metrics (telegraf will create it if not exists).
database = "telegraf" # required
## Retention policy to write to. Empty string writes to the default rp.
retention_policy = ""
## Write consistency (clusters only), can be: "any", "one", "quorum", "all"
write_consistency = "any"
## Write timeout (for the InfluxDB client), formatted as a string.
## If not provided, will default to 5s. 0s means no timeout (not recommended).
timeout = "5s"
# username = "telegraf"
# password = "metricsmetricsmetricsmetrics"
## Set the user agent for HTTP POSTs (can be useful for log differentiation)
# user_agent = "telegraf"
## Set UDP payload size, defaults to InfluxDB UDP Client default (512 bytes)
# udp_payload = 512
# Read metrics about cpu usage
[[inputs.cpu]]
## Whether to report per-cpu stats or not
percpu = true
## Whether to report total system cpu stats or not
totalcpu = true
## If true, collect raw CPU time metrics.
collect_cpu_time = false
# Read metrics about disk usage by mount point
[[inputs.disk]]
## By default, telegraf gather stats for all mountpoints.
## Setting mountpoints will restrict the stats to the specified mountpoints.
# mount_points = ["/"]
## Ignore some mountpoints by filesystem type. For example (dev)tmpfs (usually
## present on /run, /var/run, /dev/shm or /dev).
ignore_fs = ["tmpfs", "devtmpfs"]
# Read metrics about disk IO by device
[[inputs.diskio]]
## By default, telegraf will gather stats for all devices including
## disk partitions.
## Setting devices will restrict the stats to the specified devices.
# devices = ["sda", "sdb"]
## Uncomment the following line if you need disk serial numbers.
# skip_serial_number = false
# Get kernel statistics from /proc/stat
[[inputs.kernel]]
# no configuration
# Read metrics about memory usage
[[inputs.mem]]
# no configuration
# Get the number of processes and group them by status
[[inputs.processes]]
# no configuration
# Read metrics about swap memory usage
[[inputs.swap]]
# no configuration
# Read metrics about system load & uptime
[[inputs.system]]
# no configuration
Letztlich solltest du dann noch einen Test durchführen, um sicherzustellen, dass die Systemstatistiken an InfluxDb kommuniziert wurden. Dies prüfst du, indem du das folgende Kommando im Terminal ausführst. Daraufhin solltest du ein umfangreiches JSON-Output sehen, wenn alles korrekt ist. Ansonsten wäre das Output leer.
> curl "http://localhost:8086/query?q=select+*+from+telegraf..cpu"
Chronograf installieren und einrichten
Schließlich downloadest und installierst du Chronograf, indem du im Terminal die beiden unten gezeigten Kommandos ausführst.
> wget https://dl.influxdata.com/chronograf/releases/chronograf_1.4.0.0_amd64.deb
> dpkg -i chronograf_1.4.0.0_amd64.deb
Anschließend musst du Chronograf einmalig via dem folgenden Command einmalig starten.
> systemctl start chronograf
Als nächstes solltest du nun Chronograf im Browser aufrufen können, indem du http://localhost:8888 nutzt, wobei du localhost mit der IP-Adresse deines Servers austauscht. Wie dir der Screenshot unten verbildlicht, gelangst du daraufhin auf die Willkommensseite von Chronograf. Hier hast du die Möglichkeit Chronograf mit deiner InfluxDB Instanz in Verbindung zu setzen. Stelle zunächst sicher, dass der Connection String den Port 8086 antriggert und auch hier localhost durch die IP-Adresse deines Servers ersetzt wird. Für den Namen des Connection String kannst du eine Bezeichnung wählen, die du für sinnvoll hältst. Per default ist der Datenbankname von Telegraf “telegraf”. Nachdem du einen Nutzernamen eingetragen und ein Passwort festgelegt hast, bestätigst du dies mit Klick auf den Button Add Source.
Danach wirst du dann auf die Plattform von Chronograf weitergeleitet. Wenn du den zweiten Punkt in der zur linken Seite eingeblendeten Navigationsleiste anklickst, gelangst du auf die Host List-Seite, wie im folgenden Screenshot präsentiert.
Hier kannst du mit Klick auf den betreffenden Hostnamen die Seite aufrufen, auf der grafisch aufbereitete Informationen über den Grad und Verlauf deiner CPU-Nutzung und andere Systemprozesse bereitgestellt werden, wie dir der Screenshot unten zeigt.
Final musst du noch Chronograf mit Kapacitor in Verbindung setzen. Dies ist möglich über den Punkt Konfiguration. Um dies umzusetzen, klickst du den letzten Punkt in der zur linken Seite eingeblendeten Navigationsleiste. Hiernach bist du auf der Konfigurationsseite, auf der du erkennst, dass Chronograf bereits mit InfluxDB in Relation gesetzt ist. Dies wird dir über den grün gekennzeichneten Button Connected signalisiert. Durch Klick auf den Connected-Button kannst du jederzeit zwischen dem Status „verbunden“ oder „nicht verbunden“ switchen. Wenn du nicht verbunden bist, dann ist der betreffende Button grau gekennzeichnet. Diese Optionalität bietet sich vor allem an, wenn du mehr als eine Quelle in der Liste hast und die Verbindung von einer Quelle lösen möchtest, um eine andere Quelle zu nutzen.
Des Weiteren entnimmst du dem Screenshot oben den oben rechts auf der Seite platzierten + Add Config-Button. Über Betätigung dieses Buttons wirst du zu einem Web-Interface weitergeleitet, in dem du zunächst die Details deiner neuen Verbindung eintragen kannst. Dem Screenshot unten entnimmst du, dass der angetriggerte Port für die Verbindung mit Kapacitor der Port 9092 sein sollte.
Nachdem du der Verbindung einen dir als sinnvoll erscheinenden Namen gegeben hast, die dir bereits bekannten Informationen zu Nutzername und Passwort eingetragen hast und dies mit Betätigung des Buttons Connect bestätigt hast, erscheint zur rechten Seite ein weiteres Interface-Frame, in dem du Informationen zu den Benachrichtigungs-Endpunkten setzen kannst. Der Screenshot unten reflektiert, dass du dich auf der linken Seite dieses neuen Interface-Frames durch die Liste aller möglichen Event-Handler navigieren kannst. Den Endpunkt zu konfigurieren ist letztlich optional und es steht dir frei dies zu tun oder nicht. Wenn du den Endpunkt konfiguriert hast, kann Chronograf Benachrichtigungen an einen von dir gewählten Event-Handler senden und dich up to date halten. Besonders hilfreich kann die Nutzung dieses Dienstes sein, um Warnmeldungen an bestimmte URLs sowie an Anwendungen wie Slack oder HipChat zu senden. Voraussetzung ist, dass du selbst bei solch einer Anwendung registriert bist. Wie du beim Vergleichen der beiden unten präsentierten Screenshots erkennst, können für unterschiedliche Event-Handler (Alerta im 1. Screenshot und Slack im 2. Screenshot) unterschiedliche und spezifische Daten erforderlich sein, um die Verbindung herzustellen. Bestimmte erforderliche Daten sind von der betreffenden Anwendung einzuholen, z.B. wenn es sich um einen Token, eine URL oder eine Umgebung handelt.
InfluxDB mit Chronograf nutzen
Nun kommen wir zu dem Teil, in dem ich das im Tutorial InfluxDB unter Ubuntu 16.04/18.04 installieren und einrichten geschilderte Anwendungsszenario durchführe, um mir die Datenpunkte visuell aufbereitet in Chronograf plotten zu lassen. Hierzu starte ich die influx-Befehlszeilenschnittstelle (CLI) über den Command, den du im Code-Block unten siehst. Ich möchte hierbei, dass die Datenpunkte, die ich gleich in die Datenbank OnlineMarketDevelopment zur Messung SalesActivity hinzufüge, den Zeitstempel im Format Unix-Epoch in Sekunden haben.
> influx -precision s
Connected to http://localhost:8086 version 1.5.x
InfluxDB shell version: 1.5.x
Als nächstes wechsle ich in die zuvor angelegte Datenbank OnlineMarketDevelopment. über das folgende Kommando. Solltest du diese Datenbank noch nicht angelegt haben, dann tue dies, bevor du das unten stehende Kommando im Terminal eingibst.
> USE OnlineMarketDevelopment
Using database OnlineMarketDevelopment
Daraufhin werde ich alle INSERT-Operationen für die Messung SalesActivity durchführen, die du der rechten Spalte in der unten stehenden Tabelle entnimmst. Wie bereits im Anwendungsszenario vermerkt, beziehen sich die indexierten Datenpunkte auf einen Zeitraum von 15 Minuten, genau genommen auf den Zeitraum von 13:00 bis 13:15 am 17.04.2018. Zur Übersichtlichkeit für dich habe ich in der linken Spalte jeweils den dazugehörigen Zeitstempel dokumentiert.
Datum: | 17.04.2018 |
---|---|
Uhrzeit | via INSERT-Operation im Epoch-Format indexierte(r) Datenpunkt(e) |
13:00 | INSERT SalesActivity,region=“EMEA“,dc=“koeln“,gender=“male“ age=52i,buying=FALSE 1523962800
INSERT SalesActivity,region=“EMEA“,dc=“dortmund“,gender=“male“ age=25i,buying=TRUE 1523962800
INSERT SalesActivity,region=“EMEA“,dc=“herne“,gender=“female“ age=19i,buying=TRUE 1523962800
INSERT SalesActivity,region=“EMEA“,dc=“koeln“,gender=“male“ age=33i,buying=TRUE 1523962800
INSERT SalesActivity,region=“EMEA“,dc=“leverkusen“,gender=“female“ age=22i,buying=TRUE 1523962800
INSERT SalesActivity,region=“EMEA“,dc=“koeln“,gender=“female“ age=30i,buying=FALSE 1523962800
INSERT SalesActivity,region=“EMEA“,dc=“essen“,gender=“male“ age=39i,buying=TRUE 1523962800
INSERT SalesActivity,region=“EMEA“,dc=“koeln“,gender=“female“ age=18i,buying=TRUE 1523962800
INSERT SalesActivity,region=“EMEA“,dc=“essen“,gender=“male“ age=21i,buying=TRUE 1523962800
INSERT SalesActivity,region=“EMEA“,dc=“wuppertal“,gender=“female“ age=45i,buying=TRUE 1523962800
INSERT SalesActivity,region=“EMEA“,dc=“borken“,gender=“female“ age=23i,buying=TRUE 1523962800
INSERT SalesActivity,region=“EMEA“,dc=“koeln“,gender=“female“ age=50i,buying=FALSE 1523962800
INSERT SalesActivity,region=“EMEA“,dc=“niederkassel“,gender=“female“ age=28i,buying=FALSE 1523962800
INSERT SalesActivity,region=“EMEA“,dc=“leverkusen“,gender=“male“ age=37i,buying=TRUE 1523962800 |
13:02 | INSERT SalesActivity,region=“EMEA“,dc=“oberhausen“,gender=“female“ age=31i,buying=TRUE 1523962920
INSERT SalesActivity,region=“EMEA“,dc=“herne“,gender=“male“ age=27i,buying=TRUE 1523962920 INSERT SalesActivity,region=“EMEA“,dc=“koeln“,gender=“male“ age=53i,buying=FALSE 1523962920 INSERT SalesActivity,region=“EMEA“,dc=“aachen“,gender=“male“ age=25i,buying=TRUE 1523962920 INSERT SalesActivity,region=“EMEA“,dc=“koeln“,gender=“female“ age=28i,buying=TRUE 1523962920 INSERT SalesActivity,region=“EMEA“,dc=“duesseldorf“,gender=“male“ age=26i,buying=TRUE 1523962920 |
13:03 | INSERT SalesActivity,region=“EMEA“,dc=“duesseldorf“,gender=“female“ age=42i,buying=FALSE 1523962980
INSERT SalesActivity,region=“EMEA“,dc=“essen“,gender=“female“ age=26i,buying=FALSE 1523962980 INSERT SalesActivity,region=“EMEA“,dc=“bottrop“,gender=“male“ age=53i,buying=FALSE 1523962980 INSERT SalesActivity,region=“EMEA“,dc=“koeln“,gender=“male“ age=21i,buying=FALSE 1523962980 |
13:07 | INSERT SalesActivity,region=“EMEA“,dc=“dormagen“,gender=“male“ age=18i,buying=TRUE 1523963220
INSERT SalesActivity,region=“EMEA“,dc=“bocholt“,gender=“male“ age=24i,buying=TRUE 1523963220 |
13:08 | INSERT SalesActivity,region=“EMEA“,dc=“koeln“,gender=“male“ age=40i,buying=FALSE 1523963280
INSERT SalesActivity,region=“EMEA“,dc=“essen“,gender=“male“ age=56i,buying=FALSE 1523963280 INSERT SalesActivity,region=“EMEA“,dc=“frechen“,gender=“female“ age=47i,buying=FALSE 1523963280 INSERT SalesActivity,region=“EMEA“,dc=“aachen“,gender=“male“ age=39i,buying=FALSE 1523963280 INSERT SalesActivity,region=“EMEA“,dc=“leverkusen“,gender=“female“ age=51i,buying=FALSE 1523963280 INSERT SalesActivity,region=“EMEA“,dc=“bonn“,gender=“female“ age=31i,buying=TRUE 1523963280 |
13:11 | INSERT SalesActivity,region=“EMEA“,dc=“herne“,gender=“male“ age=20i,buying=TRUE 1523963460
INSERT SalesActivity,region=“EMEA“,dc=“koenigswinter“,gender=“female“ age=25i,buying=TRUE 1523963460 INSERT SalesActivity,region=“EMEA“,dc=“dortmund“,gender=“male“ age=33i,buying=TRUE 1523963460 INSERT SalesActivity,region=“EMEA“,dc=“koeln“,gender=“male“ age=30i,buying=TRUE 1523963460 INSERT SalesActivity,region=“EMEA“,dc=“duisburg“,gender=“male“ age=29i,buying=TRUE 1523963460 |
13:13 | INSERT SalesActivity,region=“EMEA“,dc=“aachen“,gender=“female“ age=28i,buying=TRUE 1523963580
INSERT SalesActivity,region=“EMEA“,dc=“bornheim“,gender=“female“ age=21i,buying=TRUE 152396358 INSERT SalesActivity,region=“EMEA“,dc=“koeln“,gender=“male“ age=35i,buying=TRUE 1523963580 |
13:14 | INSERT SalesActivity,region=“EMEA“,dc=“essen“,gender=“male“ age=60i,buying=FALSE 1523963460
INSERT SalesActivity,region=“EMEA“,dc=“bonn“,gender=“male“ age=53i,buying=FALSE 1523963640 INSERT SalesActivity,region=“EMEA“,dc=“duisburg“,gender=“female“ age=57i,buying=FALSE 1523963640 INSERT SalesActivity,region=“EMEA“,dc=“leverkusen“,gender=“female“ age=44i,buying=FALSE 1523963640 INSERT SalesActivity,region=“EMEA“,dc=“essen“,gender=“female“ age=48i,buying=FALSE 1523963640 INSERT SalesActivity,region=“EMEA“,dc=“koeln“,gender=“male“ age=41i,buying=FALSE 1523963640 INSERT SalesActivity,region=“EMEA“,dc=“wuppertal“,gender=“male“ age=48i,buying=FALSE 1523963640 INSERT SalesActivity,region=“EMEA“,dc=“herne“,gender=“female“ age=55i,buying=FALSE 1523963640 INSERT SalesActivity,region=“EMEA“,dc=“wuppertal“,gender=“female“ age=18i,buying=TRUE 1523963640 INSERT SalesActivity,region=“EMEA“,dc=“herne“,gender=“male“ age=27i,buying=TRUE 1523963640 |
13:15 | INSERT SalesActivity,region=“EMEA“,dc=“dinslaken“,gender=“female“ age=26i,buying=TRUE 1523963700
INSERT SalesActivity,region=“EMEA“,dc=“koeln“,gender=“female“ age=23i,buying=TRUE 1523963700 INSERT SalesActivity,region=“EMEA“,dc=“duisburg“,gender=“female“ age=19i,buying=TRUE 1523963700 INSERT SalesActivity,region=“EMEA“,dc=“bad_honnef“,gender=“female“ age=51i,buying=FALSE 1523963700 INSERT SalesActivity,region=“EMEA“,dc=“bonn“,gender=“male“ age=19i,buying=FALSE 1523963700 INSERT SalesActivity,region=“EMEA“,dc=“oberhausen“,gender=“male“ age=34i,buying=TRUE 1523963700 INSERT SalesActivity,region=“EMEA“,dc=“aachen“,gender=“female“ age=38i,buying=TRUE 1523963700 INSERT SalesActivity,region=“EMEA“,dc=“herne“,gender=“male“ age=21i,buying=TRUE 152396370 INSERT SalesActivity,region=“EMEA“,dc=“niederkasse“l,gender=“male“ age=28i,buying=TRUE 1523963700 INSERT SalesActivity,region=“EMEA“,dc=“leverkusen“,gender=“male“ age=32i,buying=TRUE 1523963700 INSERT SalesActivity,region=“EMEA“,dc=“koeln“,gender=“female“ age=36i,buying=TRUE 1523963700 INSERT SalesActivity,region=“EMEA“,dc=“oberhausen“,gender=“male“ age=46i,buying=FALSE 1523963700 INSERT SalesActivity,region=“EMEA“,dc=“wuppertal“,gender=“female“ age=31i,buying=TRUE 1523963700 INSERT SalesActivity,region=“EMEA“,dc=“duesseldorf“,gender=“male“ age=25i,buying=TRUE 1523963700 INSERT SalesActivity,region=“EMEA“,dc=“leverkusen“,gender=“male“ age=21i,buying=TRUE 1523963700 INSERT SalesActivity,region=“EMEA“,dc=“bochum“,gender=“male“ age=27i,buying=TRUE 1523963700 INSERT SalesActivity,region=“EMEA“,dc=“essen“,gender=“female“ age=33i,buying=TRUE 1523963700 INSERT SalesActivity,region=“EMEA“,dc=“koeln“,gender=“female“ age=40i,buying=TRUE 1523963700 INSERT SalesActivity,region=“EMEA“,dc=“duisburg“,gender=“male“ age=18i,buying=TRUE 1523963700 INSERT SalesActivity,region=“EMEA“,dc=“schwerte“,gender=“male“ age=68i,buying=FALSE 1523963700 INSERT SalesActivity,region=“EMEA“,dc=“herne“,gender=“female“ age=39i,buying=FALSE 1523963700 INSERT SalesActivity,region=“EMEA“,dc=“dormagen“,gender=“male“ age=20i,buying=FALSE 1523963700 |
Mit Chronograf ist es möglich, vordefinierte Dashboards zu nutzen oder benutzerdefinierte Dashboards zu erstellen, um in InfluxDB gespeicherte Messungen visualisieren zu lassen und die Infrastruktur zu überwachen.
Neben dem Dashboard gibt es den Data Explorer, den du – wie im Screenshot unten zu erkennen – im dritten Punkt in der zur linken Seite eingeblendeten Navigationsleiste findest. Hier ist es dir möglich, Ergebnismengen bestimmter Messungen via SELECT-Statement ausgeben zu lassen oder neue Datenpunkte in bestimmte Messungen einer Datenbank zu integrieren, upzudaten oder zu löschen.
Ein SELECT-Statement wiederum kannst du dir entweder automatisch generieren lassen und es dann bei Bedarf weiter verfeinern oder direkt selbst erstellen. Dieses wird im hierfür vorgesehenen Editor-Feld eingebunden, dass du im Data Explorer oben findest.
Wenn du für die Generierung deiner Query den Builder, bzw. den Abfrage-Generator verwenden möchtest, klickst du aus der unterhalb des Query-Editor-Feldes verfügbaren Liste von Datenbanken die betreffende Datenbank an. In meinem Beispiel wäre das die Datenbank OnlineMarketDevelopment. Der Screenshot unten zeigt, dass das Menü dann nach rechts erweitert wird, wobei du die betreffende Messung auswählen und anhand der unter der Messung gelisteten Tags das GROUP BY-Statement über Auswahl definieren kannst. Letztlich kannst du dann ganz rechts über die Check-Box(en) das/die Feld(er) auswählen, das/die die zur Messung gehörenden Werte beinhaltet.
Nachdem das SELECT-Statement generiert wurde, wird dir über die Meldung unten im Query-Editor-Feld signalisiert, ob sie erfolgreich ausfiel oder nicht. Ist sie das nicht, dann ähnelt die Meldung farblich einer Warnung. Fällt sie positiv aus, dann erscheint sie in grüner Farbe und ganz unten im Tab Graph wird automatisch der zur Query gehörende Graph geplottet.
Chronograf verwendet per default die Funktion MEAN() im SELECT-Statement und die Datenpunkte werden in automatisch generierte Zeitintervalle (:Intervall) gruppiert angezeigt. Es werden per default die Datenpunkte ermittelt, die im Zeitraum der letzten Stunde erhoben wurden (WHERE time > :dashboardTime: oder WHERE time > now() – 1h). Diese Standardfunktionen und -parameter können mithilfe der im Menü des Abfrage-Generators bereitgestellten Buttons oder durch manuelle Bearbeitung der Abfrage konfiguriert werden. So lässt sich z.B. über den auf der rechten Seite im Menü platzierten blauen Function-Button die Funktion MEAN() in die Funktion COUNT() ändern, wenn du eher eine Zählung zusammengehörender Datenpunkte anstrebst. Im Screenshot unten kannst du dies gut nachvollziehen. Hier habe ich den Klick auf den Function-Button simuliert, um zu zeigen, dass darunter dann eine Auswahl an nutzbaren Funktionen eingeblendet wird. Hier habe ich dann die COUNT-Funktion ausgewählt. Mit Klick auf den Apply-Button würde die MEAN-Funktion automatisch durch die COUNT-Funktion ersetzt werden.
Schließlich habe ich mich dazu entschieden die Query selber zu schreiben. Hierzu habe ich das SELECT-Statement, das du im Code-Snippet unten siehst, in das Editor-Feld implementiert.
SELECT COUNT("buying") AS "count_buying" FROM "OnlineMarketDevelopment"."autogen"."SalesActivity" WHERE "time" <= '2018-04-17T13:00:00Z' AND "time" <= '2018-04-17T13:15:00Z' GROUP BY time(1m)
Die aktuelle Treffermenge wird dir – wie oben bereits erwähnt – bei erfolgreich ausfallender Query sofort im Fenster unten über den Tab Graph visuell – also geplottet – wiedergeben. Dies wird dir im Screenshot unten präsentiert. Dort erkennst du, dass neben dem Tab Graph noch die beiden Tabs Table und .csv existieren. Im Tab Table kannst du dir die Ergebnisse in der Tabellenansicht anzeigen lassen oder sie dir über den Tab .csv als weiter verarbeitbare CSV-Datei herunterladen.
Ich kann das oben erstellte SELECT-Statement anpassen, was ich in zum Vorzeigen auch gemacht habe, indem ich formuliert habe GROUP BY time(5m). Dies entnimmst du dem unten eingeblendeten Code-Block. Auch könnte ich den Zeitrahmen der Datenerhebung erweitern, wenn ich z.B. Datenpunkte indexiert hätte, die am 17.04.2018 über das Zeitfenster von 13:00 bis 13:15 hinausgingen. Analog könnte ich mir auch weniger Datenpunkte ausgeben lassen, als indexiert worden sind. So könnte ich mir z.B. lediglich die Ergebnisse zum Zeitrahmen von 13:00 bis 13:10 ausgeben, bzw. plotten lassen. Da ich vor 13:00 Uhr für die Messung SalesActivity keine Datenpunkte indexiert habe, genügt es, wenn ich in der Query die WHERE-Bedingung formulieren würde als WHERE time <= ‚2018-04-17T13:10:00Z‘. Du kannst die Query nach Bedarf um Bedingungen erweitern und modellieren.
SELECT COUNT("buying") AS "count_buying" FROM "OnlineMarketDevelopment"."autogen"."SalesActivity" WHERE "time" <= '2018-04-17T13:00:00Z' AND "time" <= '2018-04-17T13:15:00Z' GROUP BY time(5m)
Der Screenshot unten verdeutlicht dir, wie sich das SELECT-Statement im oben befindlichen Code-Block – also das Umformulieren von GROUP BY time(1m) in GROUP BY time(5m) – auf das Plotten der Ergebnisse auswirkt.
Um schließlich ein Dashboard zu erstellen, wählst du – wie dir der Screenshot unten verbildlicht – den 4. Navigationspunkt in Chronograf und klickst den Button + Create Dashboard.
Daraufhin wirst du zum Hauptfenster des neu erstellten Dashboards weitergeleitet. Jedes Dashboard-Item im Dashboard basiert auf einer Query, bzw. der Ergebnismenge, die aus einem SELECT-Statement hervorgeht.
In der oberen Hälfte des Screenshots befindet sich das neu erstellte Dashboard-Item. Es ist noch leer und enthält lediglich den Titel links oben eingeblendet, den du jederzeit mittels Doppelklick nach Bedarf editieren kannst. Über Betätigung des Buttons + Add a Query, würde dir ein Editor zur Eingabe einer Query eingeblendet werden. In der zweiten Hälfte des Screenshots oben erkennst du zwei Tabs, nämlich den Tab Queries und den Tab Visualization. Der Editor zur Definition der Query würde im Tab Queries auffindbar sein. Du befindest dich dann sozusagen im Query-Editor-Modus. Wenn du den Tab Visualization betätigst, hast du die Möglichkeit, den Diagrammtyp für die Visualisierung deiner Messung auszuwählen und/oder jederzeit nach Bedarf zu ändern. Dir wird eine Reihe von Diagrammtypen zur Wahl angeboten, was dir der Screenshot unten verbildlicht.
Im Queries-Modus wird dir – wie beim Data Explorer – ein Query-Editor-Feld zur Verfügung gestellt. Auch hier kannst du dir die Query automatisch generieren lassen oder diese selber schreiben. Die Query, mit der ich das Dashboard-Item fülle, entspricht der ersten Query, die ich im Data Explorer erstellt habe.
Sobald deine Query erfolgreich ausfällt, erkennst du – wie dir der Screenshot unten verdeutlicht – im Preview-Fenster des Dashboard-Items oben die dazugehörende Visualisierung. Dir fällt darin auch auf, dass ich dem Dashboard-Item zusätzlich noch den Namen Sum of recognized activity (buying & no buying) gegeben habe. Dies habe ich getan, indem ich den Untitled Cell-Platzhalter oben links im Preview-Fenster des Dashboard-Items via Klick darauf angetriggert und ihn dann editiert habe.
Nun fixiere ich meine Ergebnisse, indem ich sie durch Klick auf den grünen Button bestätige, in dem ein Häkchen zu sehen ist. Dies führt dann dazu, dass mein erstelltes und editiertes Dashboard-Item im Dashboard fixiert hinterlegt ist, was dir der Screenshot unten nahe bringt. Oben rechts in der Leiste des im Dashboard fixierten Dashboard-Items erkennst du kleine Werkzeug-Items, mit denen du das Dashboard-Item entweder updaten, bzw. weiter editieren kannst, oder herunterladen oder gar löschen kannst.
Es ist nicht nur möglich Dashboard-Items eine Bezeichnung zu geben, sondern auch dem Dashboard selbst. Ich benenne das Dashboard Customer activity in Online-Shop, indem ich oben links den Platzhalter Name This Dashboard anklicke und meine favorisierte Bezeichnung dort in das Feld rein schreibe. Das Ergebnis bemerkst du im Screenshot unten. Über den blauen + Add Cell-Button rechts neben der Dashboard-Headline ist es dir möglich weitere Dashboard-Items zu erstellen.
Wenn du schließlich erneut den 4. Navigationspunkt in Chronograf klickst, erscheint auf der Dashboard-Seite die Gesamtübersicht aller existierenden Dashboards in Form einer Listung, wie im Screenshot unten präsentiert. Via Klick auf den verlinkten Namen eines Dashboards, gelangst du wieder zurück auf die Hauptseite des betreffenden Dashboards, in dem sich alle hierzu gehörenden Dashboard-Items befinden. Sobald du die Zeile, in der der Name des Dashboards steht, mit dem Mauszeiger anvisierst, erscheint ganz links ein roter Delete-Button, der dir ermöglicht, das komplette Dashboard jederzeit zu löschen. Via Klick auf den Button + Create Dashboard ist es dir möglich, ein neues Dashboard zu erstellen. Es können beliebig viele Dashboards nebenher existieren.
Ich möchte nun aber zunächst zu meinem bestehenden Dashboard mit der Bezeichnung Customer activity in Online-Shop fünf weitere Dashboard-Items anlegen, um mehr Kontrolle über und Vergleichbarkeit der erhobenen Daten auf einen Blick verfügbar zu haben. Hierzu navigiere ich mich zurück in das Dashboard Customer activity in Online-Shop, indem ich dessen Namen in der Dashboard-Liste anklicke. Die fünf unten aufgeführten Code-Snippets geben dir Aufschluss, mit welcher Query ich das jeweilige Dashboard Item in Chronograf erzeugen werde, wobei ich über jedem der fünf Code-Blöcke einen Hinweis auf die von mir in Chronograf gewählte Bezeichnung des Dashboard-Items voranführe.
SELECT-Statement zur Erstellung des Dashboard-Items Sum of recognized activity (buying):
SELECT COUNT("buying") AS "count_buying" FROM "OnlineMarketDevelopment"."autogen"."SalesActivity" WHERE "time" <= '2018-04-17T13:15:00Z' AND "buying"=TRUE GROUP BY time(1m)
SELECT-Statement zur Erstellung des Dashboard-Items Sum of recognized activity (buying) | age <= 35:
SELECT COUNT("buying") AS "count_buying" FROM "OnlineMarketDevelopment"."autogen"."SalesActivity" WHERE "time" <= '2018-04-17T13:15:00Z' AND "buying"=TRUE AND "age" <= 35 GROUP BY time(1m)
SELECT-Statement zur Erstellung des Dashboard-Items Sum of recognized activity (no buying) | age <= 35:
SELECT COUNT("buying") AS "count_buying" FROM "OnlineMarketDevelopment"."autogen"."SalesActivity" WHERE "time" <= '2018-04-17T13:15:00Z' AND "buying"=FALSE AND "age" <= 35 GROUP BY time(1m)
SELECT-Statement zur Erstellung des Dashboard-Items Sum of recognized activity (buying) | age > 35:
SELECT COUNT("buying") AS "count_buying" FROM "OnlineMarketDevelopment"."autogen"."SalesActivity" WHERE "time" <= '2018-04-17T13:15:00Z' AND "buying"=TRUE AND "age" > 35 GROUP BY time(1m)
SELECT-Statement zur Erstellung des Dashboard-Items Sum of recognized activity (no buying) | age > 35:
SELECT COUNT("buying") AS "count_buying" FROM "OnlineMarketDevelopment"."autogen"."SalesActivity" WHERE "time" <= '2018-04-17T13:15:00Z' AND "buying"=TRUE AND "age" > 35 GROUP BY time(1m)
Dem Screenshot unten entnimmst du schließlich, wie das Dashboard Customer activity in Online-Shop nach der Implementierung der fünf weiteren Dashboard-Items aussieht. Je nach Umfang deiner Zeitreihen-Erhebung und deinem Belieben, kannst du den geplotteten Zeitraum im jeweiligen Dashboard-Item jederzeit in der dazugehörigen Query anpassen. Sobald du mit dem Mauszeiger die oben in einem Dashboard-Item befindliche Leiste anvisierst, in der auch die Werkzeug-Icons und die Headline zu finden sind, ist es dir zudem möglich, das betreffende Item via Drag & Drop im Dashboard umzuplatzieren.
FAZIT
Dieses Tutorial hat dir – direkt anknüpfend an das Tutorial InfluxDB unter Ubuntu 16.04/18.04 installieren und einrichten – Verständnis über InfluxDB im Kontext einer managebaren Benutzeroberfläche gegeben. Du hast die zu InfluxDB gehörenden Stack-Komponenten kennengelernt und weißt nun, wie du diese auf deinem Ubuntu-Server installieren, einrichten und nutzen kannst. Ich wünsche dir viel Freude bei der Umsetzung der gelernten Inhalte.