Эта страница ещё не переведена: показана английская версия.
Microsoft 365¶
Microsoft 365 through Microsoft Graph: services that are degraded or interrupted, active incidents and advisories, licenses about to run out, and users flagged at risk.
DumbMonit signs in as an Entra application (client credentials flow): it
exchanges the application's client ID and secret for a one-hour token at
login.microsoftonline.com, keeps it until it expires, and reads
graph.microsoft.com once a minute. Every call is a read; the application
only holds read permissions.
This is an Internet API: the address of the device is the API's
(graph.microsoft.com), not a machine's, and nothing in your network is
contacted.
Validated against the vendor documentation only — not yet tested on a real system
This integration was built from the Microsoft Graph v1.0 documentation, not against a live tenant. It only reads. Tell us what breaks.
Network ports to open¶
From the DumbMonit server (or its relay agent) to the device:
| Port | Protocol | Purpose |
|---|---|---|
| 443 | TCP | Microsoft Graph API (HTTPS, graph.microsoft.com) |
| 443 | TCP | Microsoft sign-in, token request (HTTPS, login.microsoftonline.com) |
What it watches¶
All metrics are prefixed dumbmonit_m365_.
| Metric | Labels | Meaning |
|---|---|---|
service_ok |
service |
1 while the service reports a healthy state (operational, restored, resolved, mitigated), 0 otherwise. |
services, services_degraded |
Services listed, and how many are not healthy. | |
incidents_active, advisories_active |
Unresolved service issues, by classification. | |
service_issues |
service, classification |
Unresolved issues per service (incident or advisory). |
license_used_percent |
sku |
Assigned units over purchased units, in percent. |
license_consumed, license_enabled, license_available |
sku |
Assigned, purchased and remaining units. |
licenses_exhausted |
Number of paid licenses with every unit assigned. | |
risky_users, risky_users_high |
Users at risk, and those at high risk. | |
signin_failures_1h |
Failed sign-ins of the last hour (at most 100); only when risky users cannot be read. | |
issues_readable, licenses_readable, risky_readable, signins_readable |
1 when that read was allowed, 0 when Microsoft refused it. |
Free and trial licenses (Power BI free, Power Automate free, Windows Store…) and licenses with no purchased unit are ignored: their gauge means nothing.
Only the service health is mandatory. If your tenant has no Entra ID P2
license, the risky users read is refused: risky_readable is 0, DumbMonit
counts the failed sign-ins of the last hour instead (Entra ID P1 and
AuditLog.Read.All), and if that is refused too the probe still succeeds
without any risk data.
The built-in rules that apply:
- Microsoft 365 service degraded: a service is degraded, interrupted or under investigation for 10 minutes (Advisory, reminded every 6 hours).
- Microsoft 365 licenses exhausted: every unit of a paid license is assigned (Advisory, reminded daily).
- Microsoft 365 licenses nearly full: more than 95 % of a paid license is assigned (Info, reminded weekly).
- Microsoft 365 users at risk: at least one user is flagged at risk (Advisory, reminded daily).
The monitor page¶
The Microsoft 365 panel says what is wrong in a sentence, shows the degraded services, the active incidents, the exhausted licenses and the users at risk, then lists the services with their state, the active incidents and the licenses with their usage.
Create a read-only Entra application for DumbMonit¶
-
In the Microsoft Entra admin center (entra.microsoft.com), open Entra ID → App registrations → New registration, name it DumbMonit, keep a single tenant and register it.
-
On the Overview page, copy the Application (client) ID and the Directory (tenant) ID.
-
Open API permissions → Add a permission → Microsoft Graph → Application permissions, add the permissions listed below, then click Grant admin consent.
-
Open Certificates & secrets → New client secret and copy its Value (not the Secret ID): it is shown once and it expires, so note the date.
-
In DumbMonit, enter graph.microsoft.com as address, paste the client ID and the secret value, and fill in the Tenant ID option.
Required permissions¶
Add them as application permissions (not delegated), then grant admin consent.
- ServiceHealth.Read.All — Reads the health of each service and its active incidents (required).
- LicenseAssignment.Read.All — Reads purchased and assigned license counts per SKU (optional).
- IdentityRiskyUser.Read.All — Reads users flagged at risk; needs Entra ID P2 (optional).
- AuditLog.Read.All — Counts failed sign-ins when risk data is unavailable; needs Entra ID P1 (optional).
Warning
Admin consent gives the application tenant-wide read access to the data above. Use a dedicated app registration with only these permissions, and renew its client secret before it expires.
Vendor documentation: https://learn.microsoft.com/en-us/graph/api/serviceannouncement-list-healthoverviews
Notes¶
The client secret expires (24 months at most). When it does, DumbMonit shows "Microsoft refused the application": create a new secret and paste its value. Add the Microsoft Entra ID integration to be warned before that happens.
Credentials¶
| Credential | Fields |
|---|---|
| Entra application | Application (client) ID and the client secret Value. |
Address: graph.microsoft.com. Options:
- Tenant ID (required): the Directory (tenant) ID, a GUID, or a verified domain name.
- Sign-in URL:
https://login.microsoftonline.comby default. Change it only for a sovereign cloud (for examplehttps://login.microsoftonline.us, withgraph.microsoft.usas address). - Timeout per request (seconds) (15 s).
Troubleshooting¶
"Microsoft refused the application": the client ID or the secret is wrong, or the secret expired. Copy the secret Value, not its ID.
"Microsoft knows no tenant": the Tenant ID is wrong; copy the Directory (tenant) ID of the app registration.
"Microsoft Graph refused … (403): grant the application the ServiceHealth.Read.All application permission": add it and click Grant admin consent; it can take a few minutes to apply.
risky_readable stays 0: the tenant has no Entra ID P2 license, or
IdentityRiskyUser.Read.All was not granted. Nothing is broken.
No licenses listed: LicenseAssignment.Read.All is missing
(licenses_readable is 0), or every license of the tenant is free.