PRTG mit Office 365
Achtung:
Dieses Skript funktioniert nicht
mehr. Microsoft hat im den September 2019 die alte "Office
Discovery Service API" API abgeschaltet. Auch die
zwischenzeitlich bereitgestellte Office 365 Management API
wird durch Graph abgelöst. Siehe dazu auch
Office 365 Status
- Reminder: We are retiring the Office
Discovery Service API
https://developer.microsoft.com/office/blogs/outlook-rest-api-v1-0-office-365-discovery-and-live-connect-api-deprecation/ - Office 365 Management APIs
https://docs.microsoft.com/de-de/office/office-365-management-api/office-365-service-communications-api-reference
https://docs.microsoft.com/de-de/office/office-365-management-api/get-started-with-office-365-management-apis - Graph: Service health and communications
: List healthOverviews
https://docs.microsoft.com/en-us/graph/api/serviceannouncement-list-healthoverviews?view=graph-rest-1.0&tabs=http
Auf der Seite O365 Status beschreibe ich, wie ein Office 365 Administrator über verschiedene APIs den Status seines Office 365 Tenants abrufen kann. Natürlich liefert Microsoft auch entsprechende Module für die eigene System Center Familie mit.
Mittlerweile gibt es auch von PRTG entsprechende Sensoren:
- PRTG Manual: Microsoft 365 Service
Status Sensor
https://www.paessler.com/manuals/prtg/microsoft_365_service_status_sensor - PRTG Manual: Microsoft 365 Service
Status Advanced Sensor
https://www.paessler.com/manuals/prtg/microsoft_365_service_status_advanced_sensor - How do I obtain credentials and set
permissions for the Microsoft 365 sensors?
https://kb.paessler.com/en/topic/88462-how-do-i-obtain-credentials-and-set-permissions-for-the-microsoft-365-sensors
Status im Portal
Zuerst habe ich mir noch mal die Statusanzeige im Dashboard "online" angeschaut. Hier sind schön die verschiedenen Produkte zu sehen.
Leider ist es nicht ganz so einfach, genau so eine Liste zu generieren, da die Office 365 API einmal die Produkte als Liste (ohne Status) liefert und ein zweiter Aufruf die verschiedenen Events meldet. Allerdings kann es pro Produkt durchaus mehrere Events geben und es werden auch bereits beendete Störungen noch eine Zeit lang mitgeführt.
PRTG-Planung
Ich habe mir daher gedacht, dass ich per PowerShell einfach ab und an beide Listen einsammle und die Ergebnisse dann vereinfacht generieren. Ich wollte schon die komplette Liste der Produkte haben, aber nicht die ganzen Teilprodukte. So gibt es z.B. "Exchange" als Service Endpoint.
Hinweis: Die Variablen sind erst belegt, wenn Sie vorher auch durch den entsprechenden Code gesetzt wurden. Der Code ist auf O365 Status beschrieben.
$Serviceenpoints FeatureNames ServiceName ------------ ----------- {Sign-in, E-Mail and calendar access... Exchange Online {Sign-In, Administration} Identity Service {Portal, Administration, Purchase an... Office 365 Portal {Audio and Video, Federation, Manage... Skype for Business {Provisioning, SharePoint Features, ... SharePoint Online {Yammer Components} Yammer Enterprise {Mobile Device Management} Mobile Device Management {Planner} Planner {Sway} Sway
Aber Exchange selbst hat selbst noch einige Unter-Features
$Serviceenpoints[0].FeatureNames Sign-in E-Mail and calendar access E-Mail timely delivery Management and Provisioning Voice mail
Da PRTG primär "Nummern" anzeigen kann, habe ich mir überlegt, dass ich einfach pro ServiceEndpoint die Anzahl der offenen Meldungen aufaddiere. Das ganze wurde in ein PowerShell-Skript gepresst, welches natürlich die Anmeldedaten eines "globalen Administrators benötigt.
PRTG Custom Sensor
Das Skript ist so ausgelegt, dass Sie es auch einfach interaktiv starten und die Ausgabe bewundern können. Ich halte mich an meine PRTG-Erfahrung, dass die Probe die Rückgabe bis auf das erste "<"-Zeichen ignoriert.
PS C:\> .\prtg-o365status.1.0.ps1 -password supergeheim PRTG-O365Status:Start PRTG-O365Status: Generate JSON Request PRTG-O365Status: Requesting Session Cookie PRTG-O365Status: Retrieving Service Endpoints PRTG-O365Status: Retrieving Status PRTG-O365Status: Parsing Status Result PRTG-O365Status: Generating Result PRTG-O365Status: Sending PRTGRESULT to STDOUT <?xml version="1.0" encoding="Windows-1252" ?> <prtg> <result> <channel>Yammer Enterprise</channel> <value>0</value> <float>0</float> <mode>Difference</mode> </result> <result> <channel>SharePoint Online</channel> <value>0</value> <float>0</float> <mode>Difference</mode> </result> <result> <channel>Office 365 Portal</channel> <value>0</value> <float>0</float> <mode>Difference</mode> </result> <result> <channel>Mobile Device Management</channel> <value>0</value> <float>0</float> <mode>Difference</mode> </result> <result> <channel>Skype for Business</channel> <value>0</value> <float>0</float> <mode>Difference</mode> </result> <result> <channel>Identity Service</channel> <value>0</value> <float>0</float> <mode>Difference</mode> </result> <result> <channel>Exchange Online</channel> <value>1</value> <float>0</float> <mode>Difference</mode> </result> <result> <channel>Planner</channel> <value>0</value> <float>0</float> <mode>Difference</mode> </result> <result> <channel>Sway</channel> <value>0</value> <float>0</float> <mode>Difference</mode> </result> </prtg>
In dem Beispiel gibt es nur bei Exchange eine "offene" Meldung. Vielleicht schaffe ich es später ja auch die "Severity" mit einzubinden. Als erste Version soll mir dies aber reichen.
Sensor einbinden
Die Installation und Konfiguration des PRTG-Sensors ist relativ schnell und einfach gemacht. Laden Sie sich das PowerShell-Skript herunter und kopieren Sie es auf die Probe ihrer Wahl in das Verzeichnis "C:\Program Files (x86)\PRTG Network Monitor\Custom Sensors\EXEXML"
Die Version 1.1 nutzt nicht mehr einen Benutzername und die abgeschaltete AdminAPI sondern eine Application Permission und Microsoft Graph. Sie müssen daher erst über portal.azure.com eine Application mit Berechtigungen anlegen
- Graph API
- Graph Berechtigungen
-
Get-O365Usage
Auf der Seite beschreibe ich die Konfiguration einer Application mit Berechtigungen - Get access without a user
https://docs.microsoft.com/en-us/graph/auth-v2-service - List serviceAnnouncement messages
https://learn.microsoft.com/en-us/graph/api/serviceannouncement-list-messages?view=graph-rest-1.0&tabs=http
Die zur App passende ApplicationID (= ClientID) und das ClientSecret muss dann im Skript hinterlegt oder als Parameter übergeben werden
param ( $clientid = 'pass or enter', $ClientSecret = 'pass or enter' )
Addieren Sie dann einen Custom-Sensor.
Sie müssen die Anmeldedaten eines Office 365 Administrators entweder im Skript oder per Parameter übergeben. Um das Kennwort besser zu schützen, können Sie die Daten auch mit Get-Credential erfassen und in eine "sichere Datei" ablegen. Allerdings ist der Import im Skript noch nicht umgesetzt.
Aufgrund der Belastung durch PowerShell sollte das Skript vielleicht nicht alle 30 Sekunden laufen. Bei mir hat das Skript eine Laufzeit von ca. 4 Sekunden ohne merkliche CPU-Last. Je nach Anzahl der Meldungen kann es aber auch schon mal 100kybte herunterladen.
Ausgabe in PRTG
Die Ausgabe der XML liefert an PRTG einen eigenen Wert pro "Service Endpoint". Wenn es keine Fehler gibt, dann stehen hier alle auf "0". Sollte aber ein Event noch kein "Enddatum" haben, dann wird er dem jeweiligen Service Endpoint zugeschlagen.
Über eine längere Zeit, z.B. 30 Tage sind die Daten schon interessant.
Ich habe als Default hinterlegt, dass ab einem Event der Bereich auf "Warnung" geht. Auch auf der Mobile App ist der Status über die Zeit gut zu sehen:
Weitere Links
- Office 365 Status
- PRTG
- PRTG:Custom Sensor
-
Automate Your PRTG Tasks Using
CLI
https://blog.paessler.com/automate-your-prtg-tasks-using-cli
Netflow Filter per PowerShell auf Office 365 IP-Adressen einrichten -
Get alerted on data center
outages with Microsoft Teams
https://blog.paessler.com/get-alerted-on-data-center-outages-with-microsoft-teams - Office 365 Service Communications API
Overview
https://msdn.microsoft.com/en-us/library/office/dn776043.aspx - Using PowerShell to obtain your Tenants
Office365 Health Dashboard
http://blogs.technet.com/b/cammurray/archive/2014/09/24/using-PowerShell-to-obtain-the-office365-dashboard.aspx - View your Office 365 service health dashboard
https://portal.microsoftonline.com/servicestatus/servicestatus.aspx - Query Office 365 Service
Communication API
https://ingogegenwarth.wordpress.com/2016/11/18/query-office-365-service-communication-api/ - http://status.office365.com/
- https://twitter.com/office365status
- Office 365 Service
Communications API Overview
https://msdn.microsoft.com/en-us/library/office/dn776043.aspx - Office 365 APIs platform
overview
https://msdn.microsoft.com/en-us/office/office365/howto/platform-development-overview - Using PowerShell to obtain
your Tenants Office365 Health
Dashboard
https://blogs.technet.microsoft.com/cammurray/2014/09/23/using-powershell-to-obtain-your-tenants-office365-health-dashboard/ - Get Office 365 Events
https://gallery.technet.microsoft.com/Get-Office-365-Events-ae991b72 - PRTG – Office 365 Status
überwachen
https://www.team-debold.de/2016/07/22/prtg-office-365-status-ueberwachen/ - PRTG – Office 365 Lizenzen
im Blick
https://www.team-debold.de/2016/11/05/prtg-office-365-lizenzen-im-blick/ - PRTG – Office 365 Status
überwachen
http://www.team-debold.de/2016/07/22/prtg-office-365-status-ueberwachen - Statusseite von Google Cloud
Service
https://status.cloud.google.com/ - Basic network monitoring for Office 365
https://practical365.com/blog/basic-network-monitoring-for-office-365/