Exchange Server Dashboards: Grafana, InfluxDB, PowerShell, PRTG und Telegraf

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:

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:

Exchange Server Dashboards: Grafana, InfluxDB, PowerShell, PRTG und Telegraf

Das Dashboard greift auf PRTG und die InfluxDB zu. Die folgenden Anzeigen kommen aus der Influx DB:

Exchange Server Dashboards: Grafana, InfluxDB, PowerShell, PRTG und Telegraf

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:

Exchange Server Dashboards: Grafana, InfluxDB, PowerShell, PRTG und Telegraf

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: “*”

Exchange Server Dashboards: Grafana, InfluxDB, PowerShell, PRTG und Telegraf

Danach muss der PRTG Core Server Dienst einmal neu gestartet werden. Jetzt kann ein PRTG Benutzer für Grafana angelegt werden:

Exchange Server Dashboards: Grafana, InfluxDB, PowerShell, PRTG und Telegraf

Nachdem der Benutzer angelegt wurde, muss der Hash des Kennworts kopiert werden, der Passhash wird für die Einrichtung der Datenquelle in Grafana verwendet:

Exchange Server Dashboards: Grafana, InfluxDB, PowerShell, PRTG und Telegraf

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:

Exchange Server Dashboards: Grafana, InfluxDB, PowerShell, PRTG und Telegraf

Für die Datenquelle sind nun die entsprechenden Einstellungen nötig:

Exchange Server Dashboards: Grafana, InfluxDB, PowerShell, PRTG und Telegraf

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:

Exchange Server Dashboards: Grafana, InfluxDB, PowerShell, PRTG und Telegraf

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:

Exchange Server Dashboards: Grafana, InfluxDB, PowerShell, PRTG und Telegraf

Die Beispielkonfiguration gibt es hier zum Download:

Danach kann Telegraf als Windows Dienst angelegt werden:

telegraf.exe --service install -config "c:\program files\telegraf\telegraf.conf"

Exchange Server Dashboards: Grafana, InfluxDB, PowerShell, PRTG und Telegraf

Jetzt kann der Dienst gestartet werden:

Exchange Server Dashboards: Grafana, InfluxDB, PowerShell, PRTG und Telegraf

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:

Exchange Server Dashboards: Grafana, InfluxDB, PowerShell, PRTG und Telegraf

Sobald die neue Datenbank eingebunden ist, lasen sich daraus auch wieder schicke Dashboards bauen:

Exchange Server Dashboards: Grafana, InfluxDB, PowerShell, PRTG und Telegraf

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

9 Gedanken zu „Exchange Server Dashboards: Grafana, InfluxDB, PowerShell, PRTG und Telegraf“

  1. 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 :(

    Antworten
  2. 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.

    Antworten
  3. 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

    Antworten
  4. 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.

    Antworten

Schreibe einen Kommentar