Zum Inhalt

Microsoft Cloud Monitoring — Dynamics 365 & Business Central

Stand: 7. März 2026 System: Raspberry Pi 5 (raspip5, 192.168.178.199)


Inhaltsverzeichnis

  1. Übersicht
  2. Dynamics 365 CRM Exporter
  3. Azure App Registration
  4. Blackbox HTTP-Probes
  5. Grafana Dashboards
  6. Alert-Regeln
  7. Gatus Status-Page
  8. Schwellwerte
  9. Fehlerbehebung

1. Übersicht

Das Microsoft Cloud Monitoring überwacht die Erreichbarkeit und Performance von:

  • Dynamics 365 CRM (creativekirche.crm4.dynamics.com) — Customer Service Workspace
  • Business Central (businesscentral.dynamics.com) — ERP/Finanzen
  • Microsoft Login (login.microsoftonline.com) — Entra ID / OAuth
  • Outlook 365 (outlook.office365.com) — E-Mail
  • Microsoft Service Health — offizielle Störungsmeldungen von Microsoft

Monitoring-Schichten

Schicht Tool Was wird gemessen
HTTP-Erreichbarkeit Blackbox Exporter Ist die URL erreichbar? Wie lange dauert der Seitenaufruf?
CRM API Performance Dynamics365 Exporter Wie schnell antwortet die CRM-API? (WhoAmI, Accounts, Contacts, Cases)
Service Health Dynamics365 Exporter (Graph API) Meldet Microsoft eine Störung?
DNS-Auflösung Blackbox Exporter (DNS) Können die Firewalls die MS-Domains auflösen?
ICMP Ping Blackbox Exporter Netzwerk-Latenz zu Microsoft-Servern

2. Dynamics 365 CRM Exporter

Container

Eigenschaft Wert
Container dynamics365-exporter
Port 9790
Image Custom Python Build
Code /data/docker/monitoring/exporters/dynamics365/exporter.py
Dockerfile /data/docker/monitoring/exporters/dynamics365/Dockerfile
Credentials /home/ak/.env.dynamics
Scrape-Intervall 60s

Metriken

Metrik Beschreibung Baseline
dynamics365_auth_duration_seconds OAuth Token-Anfrage Dauer ~125ms
dynamics365_auth_success OAuth erfolgreich (1/0) 1
dynamics365_api_whoami_duration_seconds WhoAmI API-Call (einfachster Call) ~145ms
dynamics365_api_accounts_duration_seconds Accounts-Abfrage (Top 5) ~150ms
dynamics365_api_contacts_duration_seconds Contacts-Abfrage (Top 5) ~150ms
dynamics365_api_incidents_duration_seconds Cases/Incidents-Abfrage (Top 5) ~145ms
dynamics365_api_total_duration_seconds Gesamtdauer aller API-Calls ~585ms
dynamics365_service_health_status MS Service Health (Enum) serviceOperational
dynamics365_active_issues_total Aktive MS-Störungen 0
dynamics365_scrape_success Gesamter Scrape erfolgreich (1/0) 1

Datenfluss

Exporter → OAuth Token (login.microsoftonline.com)
         → CRM API Calls (creativekirche.crm4.dynamics.com/api/data/v9.2/)
         → Graph API Service Health (graph.microsoft.com)
         → Prometheus Metriken (:9790/metrics)
         → Prometheus scrapet alle 60s
         → Grafana Dashboard + Alertmanager

3. Azure App Registration

Eigenschaft Wert
Name CRM-Monitoring-Exporter
Tenant ID 6745ed26-c599-4098-a610-c8825a6e077f
Client ID 0d78a2cc-0f18-40fb-aec1-15a208cc3fe4
Client Secret in /home/ak/.env.dynamics

API-Berechtigungen

API Berechtigung Typ
Microsoft Graph ServiceHealth.Read.All Anwendung (nicht delegiert!)
Dynamics CRM user_impersonation Delegiert (nicht relevant für Client Credentials)

Power Platform App User

  • Umgebung: "Creative Kirche" (creativekirche.crm4.dynamics.com)
  • Sicherheitsrolle: Serviceleser
  • Wichtig: Die Default-Umgebung "Stiftung Creative Kirche" (org4b8c5d9d.crm4.dynamics.com) ist LEER — nicht verwenden!

4. Blackbox HTTP-Probes

Alle Microsoft-Dienste werden von zwei Standorten per HTTP geprobt:

Standort Blackbox Exporter Probe-Herkunft
Hauptstandort Salto-Server (172.17.0.1:9117) 10.128.40.x
Referenz Lokal auf Pi (blackbox-exporter:9115) 192.168.178.x

Überwachte URLs

URL Dienst Bemerkung
https://creativekirche.crm4.dynamics.com Dynamics 365 CRM Produktiv-Umgebung
https://businesscentral.dynamics.com Business Central Allgemein
https://businesscentral.dynamics.com/creativekirche.onmicrosoft.com BC Tenant-spezifisch
https://login.microsoftonline.com Microsoft Login / Entra ID
https://outlook.office365.com Outlook 365 Antwortet mit HTTP 417 (normal!)

Wichtig: Outlook antwortet mit HTTP 417 (Expectation Failed). Dieser Statuscode muss in valid_status_codes der Blackbox-Config stehen: - Lokal: /data/docker/monitoring/blackbox/blackbox.yml - Salto: C:\blackbox_exporter\blackbox_exporter-0.25.0.windows-amd64\blackbox.yml


5. Grafana Dashboards

Microsoft Cloud Services (UID: microsoft-cloud-2026)

  • Ordner: System
  • Tags: CreativeKirche, dynamics365, businesscentral, m365
  • Variable: $standort (Hauptstandort / Referenz / Alle)

Panels: - Status-Übersicht: CRM, BC, Login, Outlook Erreichbarkeit + Auth + MS-Störungen - CRM API Performance: 6 Gauges (WhoAmI, Auth, Accounts, Contacts, Cases, Gesamt) - CRM API Verlauf: Timeseries mit Schwellwert-Linien - HTTP-Latenz: 3 Panels (CRM / BC / M365) + Gesamtvergleich - DNS-Auflösung pro Standort - ICMP Ping-Latenz - Schwellwerte-Referenz (eingeklappt)

CK Netze KLV (UID: ck-netze-klv-2026)

  • "Microsoft Cloud" Stat-Panel prüft CRM + BC + Login Erreichbarkeit
  • Verlaufschart "Antwortzeit Microsoft Cloud" zeigt CRM + BC + Login Linien
  • Erklärungstabelle mit Schwellwerten für alle MS-Dienste

6. Alert-Regeln

Konfiguration: /data/docker/monitoring/prometheus/alerts.yml

Dynamics 365 CRM (Gruppe: dynamics365_crm)

Alert Schwelle For Severity
Dynamics365APIDown WhoAmI fehlschlägt 2min critical
CRMHTTPDown HTTP-Probe fehlschlägt (Hauptstandort) 2min critical
Dynamics365APISlow WhoAmI > 3s 2min warning
Dynamics365APICritical WhoAmI > 10s 1min critical
CRMHTTPSlow HTTP > 1.5s (Hauptstandort) 3min warning
Dynamics365ServiceDegradation MS meldet Störung 1min warning
Dynamics365ActiveIssues Aktive MS-Probleme > 0 1min warning

Business Central (Gruppe: business_central)

Alert Schwelle For Severity
BusinessCentralDown HTTP-Probe fehlschlägt (Hauptstandort) 2min critical
BusinessCentralSlow HTTP > 2s (Hauptstandort) 3min warning

Alertmanager-Routing

Alertmanager → alertmanager-ntfy-bridge (:8095) → ntfy (:80/monitoring) → iOS App
            → GMX E-Mail

Die Bridge formatiert Alerts als lesbare deutsche Nachrichten mit Standort-Mapping und Severity→Priorität-Zuordnung.


7. Gatus Status-Page

URL: http://192.168.178.199:8091 Config: /data/docker/gatus/config.yaml

Gruppe "Microsoft Cloud"

Endpoint URL Schwelle
Dynamics 365 CRM https://creativekirche.crm4.dynamics.com < 1500ms
Business Central https://businesscentral.dynamics.com < 2000ms
Outlook 365 https://outlook.office365.com < 2000ms
Microsoft Login https://login.microsoftonline.com < 2000ms

8. Schwellwerte

Baselines gemessen am 07.03.2026. Gelb ≈ 2× Baseline, Rot ≈ 5× Baseline.

Dienst Baseline Gelb (Warning) Rot (Critical)
CRM API WhoAmI ~145ms > 500ms > 2.000ms
CRM API Gesamt ~585ms > 2.000ms > 5.000ms
CRM OAuth Auth ~125ms > 500ms > 2.000ms
CRM HTTP (Blackbox) ~330ms > 500ms > 1.500ms
BC HTTP (Blackbox) ~550ms > 800ms > 2.000ms
MS Login HTTP ~400ms > 600ms > 2.000ms
Outlook HTTP ~100ms > 600ms > 2.000ms
DNS-Auflösung ~10-50ms > 200ms > 500ms

9. Fehlerbehebung

Exporter zeigt "The user is not a member of the organization"

→ App User fehlt in der richtigen Power Platform Umgebung. Muss in "Creative Kirche" (nicht "Stiftung Creative Kirche") angelegt sein.

Lösung: Power Platform Admin Center → Umgebungen → "Creative Kirche" → Einstellungen → Benutzer + Berechtigungen → Anwendungsbenutzer → Client ID eingeben → Rolle "Serviceleser"

Graph API 403 (Service Health)

ServiceHealth.Read.All ist als delegierte statt Anwendungs-Berechtigung konfiguriert.

Lösung: Azure Portal → App-Registrierungen → CRM-Monitoring-Exporter → API-Berechtigungen → Delegierte entfernen → als Anwendung hinzufügen → Admin-Zustimmung erteilen

Outlook Probe zeigt "probe_success 0"

→ HTTP 417 fehlt in valid_status_codes der Blackbox-Config. Muss auf BEIDEN Blackbox-Exportern (lokal + Salto) angepasst werden.

Container neustarten

cd /data/docker && docker compose restart dynamics365-exporter
docker logs dynamics365-exporter --tail 20