Jan Kappen hat zum Thema Grafana, InfluxDB und PowerShell ein super HowTo geschrieben. Jan beschreibt die Installation, Konfiguration und Nutzung von Grafana und InfluxDB auf seinem Blog:
- Grafana, InfluxDB und Windows PowerShell – Teil 1
- Grafana, InfluxDB und Windows PowerShell – Teil 2
- Grafana, InfluxDB und Windows PowerShell – Teil 3
- Grafana, InfluxDB und Windows PowerShell – Teil 4
- Grafana, InfluxDB und Windows PowerShell – Teil 5
Für Neulinge (wie Mich) in Sachen Grafana und InfluxDB ist dies das perfekte HowTo.
An dieser Stelle vielen Dank an Jan! Er hat mich mit seinem HowTo auf ein sehr spannendes Thema aufmerksam gemacht.
Ich habe Jan’s Umgebung nachgebaut. Die Testumgebung ist in wenigen Minuten installiert und kann direkt mit Daten gefüttert werden.
Basierend auf Jan’s Howto habe ich dann angefangen die Influx Datenbank mit Daten aus Exchange Server und Sophos UTM zu füttern. Dazu konnte ich sogar die Scripte aus meinem letzten Howto weiterverwenden und musste diese nur ein klein wenig anpassen.
Nach kurzer Einarbeitung und stöbern im System, bin ich dann darauf aufmerksam geworden, dass auch bestehende Monitoring Systeme wie zum Beispiel PRTG in Grafana integriert werden können. Ab hier wurde es dann für mich sehr spannend, dies ist mal ein erster Entwurf von mir für ein Dashboard:
Das Dashboard greift auf PRTG und die InfluxDB zu. Die folgenden Anzeigen kommen aus der Influx DB:
Um diese Daten in die InfluxDB zu schreiben, habe ich das Beispiel Script von Jan verwendet und entsprechend angepasst. Für die Exchange Werte habe ich folgendes Script verwendet:
while ($true){ $InfluxDBHost = "http://INFLUXDBSERVER:8086" $IfluxDBName = "InfluxDBName" $username = "influxusername" $password = "password" | ConvertTo-SecureString -asPlainText -Force $Cred = New-Object System.Management.Automation.PSCredential($username,$password) $ExchangeServer = "Exchange" #Exchange Snapin Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn; $SendMailsPerHour = (Get-MessageTrackingLog -Server $ExchangeServer -EventId RECEIVE -Start (get-date).addhours(-1) | Where {$_.Source -eq "STOREDRIVER"} | select timestamp | measure).count $ReceivedPerHour = (Get-MessageTrackingLog -Server $ExchangeServer -EventId DELIVER -Start (get-date).addhours(-1) | select timestamp | measure).count $MailsInQueues = (Get-Queue -Server $ExchangeServer | where {$_.DeliveryType -ne "ShadowRedundancy"} | select messagecount | measure messagecount -Sum).sum $metrics = @{ "Send per Hour" = $SendMailsPerHour "Received per Hour" = $ReceivedPerHour "Mails In Queues" = $MailsInQueues } $metrics Write-Influx -Measure Exchange -Tags @{Server=$env:COMPUTERNAME} -Metrics $metrics -Database $IfluxDBName -Server $InfluxDBHost -Credential $Cred -Verbose start-sleep 600 }
Die Daten der UTM werden mit folgendem Script in die InfluxDB geschrieben:
while ($true){ $InfluxDBHost = "http://INFLUXDBSERVER:8086" $IfluxDBName = "InfluxDBName" $username = "influxusername" $password = "password" | ConvertTo-SecureString -asPlainText -Force $Cred = New-Object System.Management.Automation.PSCredential($username,$password) $UTMHostNameorIP = "UTMDNSNAMEORIP" $Loginuser = "loginuser" $LoginUserPassword = "password" $LoginUserPasswordSec = ConvertTo-SecureString $LoginUserPassword -AsPlainText -Force $LoginCreds = New-Object System.Management.Automation.PSCredential($Loginuser,$LoginUserPasswordSec) #Connect SSH Session try { $ConnectSSHSession = New-SSHSession -ComputerName $UTMHostNameorIP -Credential $LoginCreds -AcceptKey:$true } catch { write-host "Can't connect to UTM" } #Query Quarantine try { $StrQuarantine = (Invoke-SSHCommand -Command "find /var/storage/chroot-smtp/spool/quarantine -type f | wc -l" -Index $ConnectSSHSession.SessionId).Output [int]$Quarantine = [convert]::ToInt32($StrQuarantine, 10) } catch { write-host "Can't query Quarantine mails" } if ($Quarantine -eq 1 -or $Quarantine -eq 0) { $Quarantine = 0 } else { $Quarantine = ($Quarantine -1)/2 } #Query Output Queue (Spool) try { $StrOutput = (Invoke-SSHCommand -Command "find /var/storage/chroot-smtp/spool/output -type f | wc -l" -Index $ConnectSSHSession.SessionId).Output [int]$Output = [convert]::ToInt32($StrOutput, 10) } catch { write-host "Can't query Output (spool) mails" } if ($Output -eq 1 -or $Output -eq 0) { $Output = 0 } else { $Output = ($Output -1)/2 } #Query corrupt Queue try { $StrCorrupt = (Invoke-SSHCommand -Command "find /var/storage/chroot-smtp/spool/corrupt -type f | wc -l" -Index $ConnectSSHSession.SessionId).Output [int]$Corrupt = [convert]::ToInt32($StrCorrupt , 10) } catch { write-host "Can't query corrupt mails" } if ($Corrupt -eq 1 -or $Corrupt -eq 0) { $Corrupt = 0 } else { $Corrupt = ($Corrupt -1)/2 } #Disconnect SSH Session $DisconnectSSHSession = Remove-SSHSession -Index $ConnectSSHSession.SessionId $metrics = @{ "Quarantine" = $Quarantine "Spool" = $Output "Corrupt" = $Corrupt } $metrics Write-Influx -Measure UTM -Tags @{Server=$UTMHostNameorIP} -Metrics $metrics -Database $IfluxDBName -Server $InfluxDBHost -Credential $Cred -Verbose start-sleep 600 }
Für den Testbetrieb laufen die beiden Scripte noch als Schleife, später werde ich die Script wohl einfach zyklisch per Taskplaner ausführen.
Die restlichen Grafen stammen direkt aus PRTG. Dazu musste PRTG nur als Datenquelle angebunden werden, dies ist im folgendem beschrieben.
Ich werde jetzt erst mal noch weiter mit Grafana und InfluxDB rumspielen. Mir fallen da noch unzählige Anwendungsmöglichkeiten ein…
Es macht sich zumindest schon mal sehr gut im Büro. Sehr angenehm, dass beim Refresh der Daten kein Reload der Seite erfolgt, es kommt also zu keinem “Zucken” der Darstellung:
Einbindung von PRTG in Grafana
Damit PRTG von Grafana als Datenquelle benutzt werden kann, muss zunächst der folgende Registry Key auf dem PRTG Server hinzugefügt werden
- Pfad: HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Paessler\PRTG Network Monitor\Server
- Name: AccessControlAllowOriginHTTPHeader
- Typ: Zeichenfolge (REG_SZ)
- Wert: “*”
Danach muss der PRTG Core Server Dienst einmal neu gestartet werden. Jetzt kann ein PRTG Benutzer für Grafana angelegt werden:
Nachdem der Benutzer angelegt wurde, muss der Hash des Kennworts kopiert werden, der Passhash wird für die Einrichtung der Datenquelle in Grafana verwendet:
Am besten meldet man sich jetzt mit dem neuen Benutzer an PRTG an und prüft ob der Benutzer Lesezugriff auf die Geräte und Sensoren hat, danach kann das PRTG Plugin für Grafana auf dem Grafana Server installiert werden, auch hier muss Grafana zunächst neu gestartet werden:
grafana-cli plugins install jasonlashua-prtg-datasource service grafana-server restart
Nun kann die Verbindung zu PRTG konfiguriert werden:
Für die Datenquelle sind nun die entsprechenden Einstellungen nötig:
Nach einen Klick auf “Save & Test” wird die entsprechende PRTG API Version angezeigt. Damit nun auch Daten aus PRTG angezeigt werden können, muss Grafana noch einmal neu gestartet werden:
service grafana-server restart
Jetzt lassen sich auch Grafen aus den Sensordaten aus PRTG erstellen.Auch die Windows Leistungsdaten (CPU, RAM, Netzwerk, Disk) lassen sich mit wenig Aufwand in InfluxDB speichern.
Windows Leistungsdaten in InfluxDB speichern (Telegraf)
Das Tool “Telegraf” kann Daten von Windows, Linux und MacOS Systemen an die InfluxDB senden. Für Windows Systeme sind hier besonders die Performance Counter interessant.
Damit die gängigsten Leistungsdaten von Windows Systemen an InfluxDB gesendet werden können, muss zunächst das Telegraf runtergeladen werden:
Die beiden Dateien aus dem ZIP-Archiv können nun unter C:\Programme\Telegraf auf dem Windows System gespeichert werden, welches seine Leistungsdaten an InfluxDB schicken soll:
Danach kann die Telegraf.conf Datei bearbeitet werden, ich habe dazu eine entsprechende Beispielkonfiguration gefunden, welche es hier zum Download gibt. In der folgenden .Conf Datei müssen nur die Zeilen 93, 115 und 116 angepasst werden:
Die Beispielkonfiguration gibt es hier zum Download:
Telegraf.conf
Danach kann Telegraf als Windows Dienst angelegt werden:
telegraf.exe --service install -config "c:\program files\telegraf\telegraf.conf"
Jetzt kann der Dienst gestartet werden:
Telegraf speichert die Leistungsdaten nun in der Influx Datenbank “WinPerfStats” (siehe oben, blauer Kasten). Ich fand es etwas übersichtlicher eine neue Datenbank für die Leistungsdaten zu erstellen. Wer dies nicht möchte, kann auch eine vorhandene Datenbank verwenden (die neue Datenbank muss nicht extra erzeugt werden, dies erledigt Telegraf).
Die neue Influx Datenbank kann jetzt ebenfalls als Datenquelle hinzugefügt werden:
Sobald die neue Datenbank eingebunden ist, lasen sich daraus auch wieder schicke Dashboards bauen:
Aufräumen in der InfluxDB
Nach einigen Tests landet auch mal einiger Datenmüll in der InfluxDB, dieser lässt sich aber einfach bereinigen, hier mal ein paar einfache Kommandos zum Aufräumen.
Datenbanken anzeigen:
- show databases
Datenbank auswählen:
- use DBNAME
Datenbank löschen:
- drop database DBNAME
Measurements anzeigen:
- show measurements
Measurements löschen:
- drop measurement NAME
Hier gibt es eine gute Übersicht der wichtigsten Befehle und Aktionen:
Database management using InfluxQL
Sehr cool nur leider wird das PRTG Plugin für Grafana nicht mehr aktiv weiterentwickelt :( Das hindert mich aktuell daran Grafana mal auf der Arbeit zu implementieren :(
Alle wege führen zu Frank… unbeirrt am forschen und entdecken von node-red und grafana, bin ich mal wieder hier gelandet. :o)
Danke Frank für die viele guten Artikel.
Hallo Frank,
könntst Du bitte Dein erstes Dashboard mit mir teilen? Ich schreibe die Informationen meines Exchanges erfolgreich in die influxdb, schaffe es aber nicht, mein dashboard so zu gestalten, dass die Metriken
„Send per Hour“ = $SendMailsPerHour
„Received per Hour“ = $ReceivedPerHour
„Mails In Queues“ = $MailsInQueues
angezeigt werden (die aus dem angepassten Skript von Jan) Eventuell hast du sogar ein umfassendes Exchange Dashboard mit passender telegraf Konfiguration rumliegen? Du würdest mir mit allem sehr helfen =)
Vielen Dank im Vorraus,
Sebastian
Vielen Dank für diesen wirklich super Artikel. Habe mir ein Dashboard gemacht um Exchange, SCCM und einige AD Informationen zu überwachen. Hat man viel schneller alles wichtige im Blick als mit SCOM.
Hi Frank,
wie hast du das gelöst mit der Data Rate zwischen Grafana und PRTG?
Ich bringe die Werte bei Grafana nicht heraus.
Hi Manuela,
da hab ich nichts spezielles gemacht, nur nach dem anlegen der Datasource noch einmal den Grafana Service neugestartet. Da hat es direkt funktioniert.
Gruß,
Frank