Statsman (vormals LyncDash)

Im ersten Moment habe ich einen Déjà-vu gehabt, als ich diesen Download gefunden und installiert habe. Zum einen entspricht der logische Aufbau fast der SDN-Umsetzung in Lync (Siehe SDN - mit Lync) und zum anderen ist das quasi die Version von Microsoft zu meinem angefangenen Projekt SDN - LiveView 1. Aber dann ist es doch ein bisschen was anderes. Microsoft hat Statsman wie folgt umschrieben:

Skype für Business Server Statistics Manager is a powerful dashboard-driven tool that allows you to view Skype für Business Server health and performance data in real time. You can poll performance data across hundreds of servers every few seconds, and view the results instantly on the Statistics Manager Website. You can use Statistics Manager to pinpoint ongoing performance issues, view the results of a planned change to your environment, track resolution of outages, and much more. Out of the box, Statistics Manager is configured with Key Health Indicator (KHI) thresholds, and can be customized to suit your deployment’s unique needs. 
Quelle: Microsoft

Ende April 2016 wurde die Version 1.1 veröffentlich.
In aller Kürze: Mehr Performanc Counter, einige Bugfixes, Eventlogs, Poolfailover und Gegenüberstellung von Pools. Alles unter dem gleichen Download-Link. Upgrade per Powershell mit Deinstallation der Version 1.0 und Neuinstallation unter Beibehaltung der Einstellungen.

Achtung: Version 1.1 sichert die Webseite über eine lokale Gruppe "StatsManWebSiteUsers" ab. die per Default Leer ist. Nach dem Update müssen Sie hier die entsprechenden Benutzer oder Gruppen addieren.

Es ist also doch kein "LiveView" der aktuellen SIP-Verbindungen. Aber des wegen ist das Tool nicht weniger uninteressant.

Funktionsweise

Im Grund sammeln die Agenten auf dem Servern die Performance-Counter und andere relevanten Daten ein und senden diese an einen Sammler, der auf der anderen Seite von einer Webseite angesprochen.

Dazu wird auf jeden Lync/Skype für Business Server ein Performance Agent installiert, der lokal die kritischen Performancedaten ausliest und überwacht. Das geht lokal schneller als remote über einen RPC oder WMI-Kanal und erlaubt auch sekündliche Übertragungen, was z.B. nicht im Scope von Programmen wie z.B. SCOM oder PRTG ist. Auf der anderen Seite wird auf einem anderen Server der StatmanAgentListener installiert, der auf Port 8443 die Verbindungen der verteilten Agenten entgegen nimmt. Eine Sonderfunktion das das "Redis"-Modul, welches Microsoft über GtiHub entwickelt und verteilt. Dazu später mehr. Über die weiterhin zu installierende Webseite kann dann ein authentifizierter Benutzer die Daten wieder einsehen.

Zertifikate werden zur Verschlüsselung und Identifizierung der Gegenstelle genutzt. Empfehlenswert sind Zertifikate einer internen PKI. Es können aber auch "SelfSigned"-Zertifikate genutzt werden, da die Gegenstelle nur den "Thumbprint" prüfen und keine komplette CRL-Abfrage durchführen.

Microsoft erwartet damit, dass Sie als Administrator damit...

  • ...Die Auswirkungen von Patches und Updates direkt nach der Installation besser beurteilen können,
    z.B. in dem man die Key Health Indikatoren vor und nachher vergleicht.
  • Ausfälle und Störungen schneller dingfest machen kann
    Die Übersicht einer Landkarte mit kleinen farbigen Indikatoren hilft dabei
  • Performanceprobleme erkennen
    Auch hier sind die Echtzeitdaten ein besserer Indikator als periodisch aufgezeichnete Statistiken.

Download

Der Download des StatsMan kann von der Microsoft Seite erfolgen.

Skype für Business Server, Real-Time Statistics Manager (64-bit)
https://www.microsoft.com/en-us/download/details.aspx?id=49491

Der Download besteht aus drei eigenständigen MIS-Dateien

Die drei Dateien haben folgenden Inhalt und werden auf den angegebenen Systemen installiert.

Zusätzlich benötigen Sie aber noch das Redis-Paket von GitHub:

Redis 2.8 Branch
https://GitHub.com/MSOpenTech/redis

Wichtig
Die Installation kann theoretisch auch auf einem Frontend Server erfolgen. Dies ist aber nicht ratsam, da die Statistik in einer InMemory Datenbank gehalten wird.

Komponente Aufgabe Installation Voraussetzung

StatsManPerfAgent.msi

Der Agent wird auf jedem Lync/SkypefB Server installiert, auf dem er Performance-Daten auslesen und an den Listener senden soll

Auf jedem Frontend Server

  • Windows 2008R2+
  • NET.4.0+

StatsManPerfAgentListener.msi

Der Listener wird in der Regel auf einem Management-Server installiert, da er die Daten von allen anderen Servern, genauer den Agenten auf den Servern, annimmt

beliebiger Server aber kein Frondend

  • Windows 2012R2
  • Redis 2.8

StatsManWebSite.msi

Diese Komponente installiert sich in einem IIS als eigene Webseite und Übernimmt die Aufbereitung der Daten für den Client.

beliebiger Server aber kein Frondend

  • Windows 2012R2
  • Redis 2.8

Browser

Die aufbereiteten Berichte können Sie sich in einem Browser anzeigen.

beliebig

Getestet mit:

  • IE11+
  • Edge 20.10240+
  • Chrome 46+

Der Versuch das die Webseite z.B. auf einem Windows 2012 (ohne R2)-Server oder gar Windows 7 Workstation zu installieren, wird mit der folgender Fehlermeldung gestoppt:

Ich würde dennoch nicht versuchen eine der Komponenten nun unter Windows .81 zu installieren.

Installation Redis

Was ist das  für eine Komponente, die Microsoft selbst auf GitHub bereit stellt und hierfür braucht? Eine Suche nach Redis ergab erst mal Treffer bei Wikipedia und Unix-Seiten

Es ist eine "InMemory"-Datenbank und gehört zur Familie der NoSQL-Datenbanken, die mit relativ einfachen Tabellen arbeiten aber viel schneller sind. Anscheinend hat Microsoft hier diesen Weg gewählt, da die Daten eigentlich nur "Realtime"-Informationen enthalten und keine Langzeitstatistiken. So ist der Zugriff und die Nutzung aber vermutlich einfacher als eigene Speicherstrukturen aufzubauen. Microsoft hat diese Datenbank auf Windows portiert und nutzt sie mit Statsman. Es ist nicht das erste Mal, dass Microsoft weder die ESE-Datenbank noch die SQL-Engine nutzt, von der es ja auch eine "Light"-Version gibt. Anscheinend sind beide für die bei Statsman anfallenden Daten nicht optimal.

Die Installation ist unspektakulär bis auf den TCP-Port, den die REDIS-Engine benötigt. Ein Zugriff über das LAN auf die REDIS-Instanz ist nicht erforderlich. Daher sollten Sie die Checkbox entgegen dem Default entfernen oder nachträglich in der Windows Firewall die Regel löschen.

Ich habe nicht lange genug gesucht um Informationen über die Authentifizierung und den Schutz der Daten in der REDIS-Instanz zu schreiben. In der REDIS-Konfig-Datei können Sie die Listener-IP, Port etc. konfigurieren.
Über die interne Struktur von STATSMAN ist noch nichts bekannt, so dass ein direkter Zugriff auf die Datenbank aktuell nicht möglich ist. Sie ist aber mit der richtigen Konfiguration erst mal nur von "Localhost" erreichbar.

Das zweite wichtige Fenster erlaubt ihnen eine Beschränkung auf den Hauptspeicher festzulegen. Die Default beschränken hier erst einmal nichts.

Die REDIS-Instanz wird als Windows Dienst angelegt, der automatisch startet:'

Tipp: Konfigurieren Sie den Dienst derart, dass er sich im Fehlerfall auch wieder neu startet.

Im Anwendungs-Eventlog finden Sie verschiedene Meldungen beim Start des Dienstes, die sie ggfls. überwachen können.

Achtung: Der Redis-Datenbank muss man manchmal auf die Finger schauen, dass Sie nicht die Festplatte vollschreibt.

Hier mal ein Bild von einem Server mit 40 GB Redis Dateien

Zertifikat?

Der Schutz der Verbindung zwischen den Agenten und dem Listener wird per TLS gewährleistet und bei der späteren Installation sind die Thumbprints anzugeben. Warum auch immer hat Microsoft in der Anleitung  auf "Deploy Statistics Manager in Skype für Business Server 2015 https://technet.microsoft.com/EN-US/library/mt604837.aspx" die Einrichtung eines Zertifikats als letzten Schritt vorgesehen.

Das ist natürlich Unfug, wenn Sie schon vorher für den Listener als auch die Webseite entsprechende Zertifikate vorweisen müssen. Fordern Sie vor der Installation daher ein Server/WebServer-Zertifikat an, wenn das System noch kein Zertifikat haben sollte.

Sie können natürlich auch temporär mit einem "SelfSigned"-Zertifikat arbeiten, welches per PowerShell schnell ausgestellt ist:

New-SelfSignedCertificate `
   -DNSName StatsManListener `
   -CertStoreLocation Cert:\LocalMachine\My

Das erstellte Zertifikat ist aber nur 1 Jahr gültig. Es funktioniert aber, da während der Installation jeweils der "Thumbprint" als Verifikation einzugeben ist und im Betrieb dann keine CRL oder Zertifikatskette überprüft wird.

Installation StatsManPerfAgentListener

Ich installiere nach der REDIS-Datenbank zuerst den Listener, der die Daten von den Agenten später annimmt. Das kleine MSI-Paket ist schnell gestartet und es gibt neben den Lizenzvereinbarungen etc. nur einen Dialog, der Eingaben erfordert:

Hier müssen Sie ein Service-Kennwort eingeben und ein Zertifikat auswählen, ehe die Installation weiter gehen kann. Die Pfade und der Port sind die Standard-Werte. Sie können diese natürlich anpassen.

Tipp:
Kopieren Sie sich hier den Thumbprint irgendwo hin. Sie brauchen ihn später bei der Installation des Agenten.

Nach der Installation finden Sie einen neuen Dienst im Servicemanager, der auch automatisch startet und im Fehlerfall auch immer wieder gestartet wird. 

Konfiguration importieren

Die Microsoft Anleitung beginnt nun schon mit der Installation der Agenten auf den Servern. Ich ziehe hier aber den darauffolgenden Schritt erst einmal vor. Der Listener nimmt nämlich nicht von jedem Server Daten an, sondern nur von Servern, die auch in seiner Konfiguration gepflegt sind. Dazu müssen Sie die CSPool-Konfiguration in eine XML-Datei speicherm, die dann auf dem Listener importiert wird

#Export der 
get-cspool | export-clixml poolinfo.xml

Diese Datei benötigen Sie dann auf dem Listener um sie dort zu importieren 

# Zuerst ins Verzeichnis des Listeners wechseln
[PS]>cd "C:\Program Files\Skype für Business Server StatsMan Listener"

#Import der XML-Datei 
[PS]>Update-StatsManServerInfo.ps1 -CsPoolFile .\cspool.xm
l
Total input servers = 7 : Final servers being written : 7
Input 4 servers.
ADD: lync001 : Site_Paderborn, Pool_lync001, Role_CentralManagementDatabase, Role_MediationServer, Role_FrontEnd
ADD: lyncedge : Site_Paderborn, Pool_lyncedge, Role_EdgeServer
ADD: owc001 : Site_Paderborn, Pool_owc001, Role_WacServer
ADD: sql001 : Site_Paderborn, Pool_nawsql001, Role_MonitoringDatabase
New Servers: 4 Updated Servers: 0 Unchanged Existing: 0
Are you ready to Update key redishash:///_ServerInfo on localhost Y|[N]:y
Successfully wrote 4 entries to key _ServerInfo on localhost

Die Änderungen werden umgehend aktiv.

Installation StatsManWebSite

Sie könnten nun schon die Agenten installieren, aber ich stelle erst immer das "Backend" fertig, ehe ich auf die Server gehe. Die Installation der Agenten zum Senden von Daten habe ich logisch daher an das Ende gestellt.

Hinweis:
Die WebSeite verbindet sich per "localhost:6379" mit der REDIS-Datenbank. Installieren Sie daher die Webseite mit auf dem gleichen Server. In der CONFIG-Datei kann dies aber anscheinend auch geändert werden.

Der nächste Schritt ist die Installation der Webseite. Auch hier gibt es eigentlich nur einen relevanten Dialog:

Wenn Sie auf dem Server bislang noch keinen IIS installiert haben, holt das Setup dies nach. Entsprechend verzögert sich etwas die Installation:

Wer nun ganz schnell ist und auf "http://localhost:8080" geht, sieht aber erst mal nur eine Fehlermeldung

Das ist noch normal, solange keine Agenten Daten an den Listener senden.

Für eine spätere Fehlersuche oder Kontrolle sind zwei Dateien interessant:

  • C:\Program Files\Skype für Business Server StatsMan Listener\PerfAgentListener.exe.config
    Diese Datei enthält die aktuelle Konfiguration. Hier stehen z.B. auch die Pfade zur REDIS-Datenbank etc.
  • C:\ProgramData\Microsoft\StatsMan\Logs\Listener.log
    Diese Datei enthält das Protokoll des Listener. Leider schreibt er selbst keine Meldungen ins Eventlog

Damit ist die Installation auf dem Server erst mal abgeschlossen.

Über die URL https://localhost:8080/healthcheck können Sie eine Statistik der Webseite abrufen.
Leider gibt es anscheinend sonst keine Option die Daten anders zu erhalten.

Webseite absichern.

Statsman 1.1 hat per Default jedem authentifizierten Benutzer den Zugriff auf die Statistikdaten gewährt. Das ist so natürlich nicht wünschenswert. Daher hatte ich noch beschrieben, wie sie dies durch eine IIS-Konfiguration abstellen. Sie installieren zuerst das erforderliche Feature für den IIS um anhand von Benutzer und Gruppen zu filtern. Eine Filterung nach Source-IP wäre auch denkbar.

# Feature zum Beschraenken von Benutzern und Gruppen
Add-WindowsFeature Web-URL-Auth

# Feature zur Steuerung nach Subnetz
# Add-WindowsFeature Web-IP-Security

Danach konnten Sie im IIS-Manager auf der Webseite selbst die "Authorization Rules" bearbeiten, z.B. indem Sie eine "Allow"-Regel für die Personen oder Gruppen, die auf diese Webseite zugreifen dürfen, addiert haben.

Mit Statsman 1.1 hat Microsoft hier selbst schon nachgebessert. Die Installation erfordert weiterhin eine Authentifizierung aber beschränkt den Zugriff auf eine lokale Gruppe "StatsManWebSiteUsers".

Diese Gruppe ist per Default "leer". Ich habe hier schon mal die zwei CSGruppen addiert, damit zumindest die Skype for Business Administratoren die Daten einsehen können.

Die Berechtigung ist dann allerdings per NTFS auf die Dateien des Webservers angewendet worden.

Diese Sicherung "per Default" ist aber schon mal ein wichtiger Schritt. Es hatte mich selbst überrascht, dass Version 1.0 so ganz ohne diese Absicherung damals installiert wurde.

Der Vorteil dieser Filterung ist, dass die Einstellungen nicht mehr an das NTFS-Dateisystem gebunden sind, sondern in der Web.config landen und so viel schneller auch auf anderen Webserver kopiert werden können.

Installation StatsManPerfAgent

Nun geht es an die Installation der Agenten auf den verteilten Servern. Bei der Konfiguration des Listeners hat das Powershell-Skript "Update-StatsManServerInfo.ps1" schön eine Liste der Server mit ihren Rollen geliefert, die für den Statsman interessant sind. Sie müssen nun natürlich nicht auf allen diesen Servern den Agenten installieren. Aber da sie mit Statsman ja ihre Lync/Skype für Business-Umgebung überwachen wollen, sollten Sie schon zumindest die Server zu überwachen, die auch mit Lync/Skype für Business - Diensten ausgestattet sind. Das sind primär die Frontend und Edge-Server aber durchaus auch separate Mediation Server etc.

Auch die Installation der Agenten wird neben den üblichen Lizenzinformationen durch einen zentralen Konfigurationsdialog dominiert. Hier sind wieder das Service Password als auch die URL des Listeners einzutragen.

Beim Thumbprint müssen Sie die Werte in "UPPERCASE eingeben. Ansonsten beschwert sich das Setup, dass es keine 40 Zeichen wären

Die Installation ist dann auch nach wenigen Sekunden abgeschlossen und auf dem Server wurde ein eigener Dienst installiert, der auch sofort gestartet wird. In der Regel können fast alle Server mit dem Listener über 8443 kommunizieren. ein Sonderfall stellt hier der Edge-Server darf, der meist etwas außerhalb steht. Hier müssen Sie ggfls. noch eine Firewall-Regel eintragen, dass er auch von "halb draußen" zum Statsman Listener kommt

Statistiken anzeigen

Es dauert in der Regel nur wenige Sekunden, bis die ersten Daten von den Agenten auf den Servern zum Listener übertragen werden und dieser die Daten aufbereiten kann. Hier ein paar erste Bilder einer kleinen Installation, die nachts nicht wirklich viel zu tun hat.

Über das Menü können verschiedene Ansichten ausgewählt werden. Hier sehen Sie einen Blick auf meine Spielumgebung mit einem Frontend Server und einem Edge-Server. Jedes kleine Quadrat steht für einen Key Health Indikator (KHI) auf dem Server. Die grauen Quadrate sind auf den Servern nicht relevant.

Schaut man sich das auf einer größeren Farm mit drei Frontend-Servern und zwei DatenbankServer zzgl. SQL-Mirror-Server an, dann wird das schon interessanter:

Hier sind dann schon einige rote Punkte zu sehen, die innerhalb des angezeigten Intervalls die KHI-Counter gerissen haben. Sie können dann auch über die roten Felder mit der Maus gehen und sehen in einer Vorschau die Beschreibung. Ein Klick darauf springt direkt zur diesem Diagramm.

Hinweis:
Wenn Sie über die Filter einen Zeitraum auswählen, zu dem keine Daten gesammelt wurden, dann sind die Counter "Rot". Sie erkennen so also auch Unterbrechungen im Monitoring.

Betrieb und Sicherheit

Eine Überwachungssoftware zu installieren ist das eine. Sie muss aber auch lange Zeit betriebssicher laufen und selbst "überwachbar" sein. Daher habe ich versucht etwas hinter die Kulissen zu schauen und die Risiken des Betriebs zu erfassen:

  • Eventlog
    Jedes gute Program sollte bei Fehlern aber auch Start/Ende etc im Eventlog protokollieren. Ich habe absichtlich Dienste wie z.B. REDIS beendet aber die Statsman-Dienste haben sich nicht beschwert. Nur der Redis-Service selbst protokolliert bei einem Start ein paar Daten.
  • Service Recovery
    Windows erlaubt es bei der Einrichtung von Diensten auch Aktionen zu hinterlegen, wenn der Dienst einmal ungeplant beendet werden würde. Der "Skype für Business StatsMan Listener" ist hier so bei allen drei Optionen auf "Restart Service" gestellt.- Auch der "StatsManPerfAgent" ist auf 3c Restart gestellt. Nur der Redis-Service startet sich gar nicht automatisch.
  • Firewall
    Hier scheint das Setup soweit vieles richtig gemacht zu haben. für jeden Dienst werden entsprechende Regeln angelegt. für vorsichtige Administratoren sind diese allerdings zu "offen". Alle Dienste nehmen von ANY:ANY auf ihre Ports die Protokolle ab und mit Ausnahme des Redis-Service sind die anderen Dienst auch nicht auf das Programm sondern "System" zugelassen. Hier könnte ein Administrator z.B. die Remote.IP-Liste der Agenten manuell pflegen und nicht "Any" zulassen.
  • IIS, SSL und IISAuthentifizierung
    Schade, dass die StatsMan Web Seite per Default einfach nur den Port 8080 per HTTP erreichbar macht. Ganz unsicher ist es nicht, da als Authentifizierung nur "Integrated" zugelassen ist. Damit scheiden anonyme Zugriffe als auch die Verwendung von unsicheren Kennworte aus.

    Allerdings gibt es auch noch keine Beschränkung auf bestimmte Benutzer oder Gruppen. In der Standardinstallation kann jeder authentifizierte Benutzer die Daten einsehen. Über das Feature "Web-Url-Auth" können Sie das von Hand nachträglich einrichten.

Ich habe eine ziemlich lange Liste von "Issues" Richtung Microsoft gesendet und hoffe, dass Microsoft sehr zügig eine verbesserte Version veröffentlich. Aktuell können Sie natürlich selbst auf der Webseite z.B. den Zugriff auf die Default.ASPX beschränken.

Fehlersuche und Debugging

Ich bin natürlich durch die frühe Installation in einige Fallen gelaufen, die sich durch eine bessere Beschreibung hätten vermeiden lassen. Auf der anderen Seite habe ich natürlich "suchen" müssen und den ein oder anderen Trick gefunden, Fehler zu entdecken. Leider ist das Eventlog bezüglich Statsman nicht sehr hilfreich, weil da nichts drin zu finden ist.

Und wenn man den Agent laut Anleitung vor der Konfiguration der Topologie installiert, dann wird er einfach starten und dann mit einem Fehler sich beenden. Ein Neustart über den Dienstmanager wiederholt einfach nur den Fehler. 

Gerade beim Agent sollten Sie wissen, dass dieser auch in einer CMD-Box einfach interaktiv gestartet werden kann. Und dann sieht man sehr schön den Fehler.

Anscheinend fängt der Agent den Fehler aber nicht ab, so dass ein DrWatson-Dump erzeugt wird,

Eine andere Quelle sind die verschiedenen Log-Files die Statsman lokal ablegt 

  • C:\ProgramData\Microsoft\StatsMan\Logs
    Diese Datei enthält Fehler und Meldungen des Agenten auf dem jeweiligen Server
  • C:\ProgramData\Microsoft\StatsMan\Logs\Listener.log
    Diese Datei enthält das Protokoll des Listener.

Weitere Links