Skip to content

Warning

License: Pro - Requires a Pro or Enterprise license.

Overview

The Azure AD Connect Health probe monitors the health of your hybrid identity directory synchronization — the process that keeps an on-premises Active Directory in sync with Microsoft Entra ID (Azure AD). It polls the Azure AD Connect Health service through the Azure management API, using an Entra ID app registration for authentication, and reports whether directory sync is healthy, whether the sync agents are online, and how recently each agent last reported.

The probe authenticates as a service principal (app registration) with the client-credentials flow — no user sign-in and no software installed on the sync servers themselves. One probe instance covers one Entra tenant; add more instances for additional tenants.

Collected data:

  • Reachability of the Azure AD Connect Health API
  • Per sync-service health status (Healthy / Warning / Error)
  • Healthy vs total registered sync agents, per sync service
  • Directory-sync export error counts, bucketed by error type
  • Per-agent liveness — seconds since each sync agent last reported to Azure AD Connect Health

All metrics are emitted under the senhub.ad_hybrid.* namespace. Sync-service and per-agent series carry attributes (service.name, agent.server, error.bucket) that keep instances distinct in OTLP/Prometheus and act as filters in the Sensor URLs tab of the console.

Quick Start

Basic Configuration

# probes.d/40-ad-hybrid.yaml — each file under probes.d/ is a YAML array of probes
- name: ad-hybrid-prod
  type: ad_hybrid
  params:
    tenant_id: "00000000-0000-0000-0000-000000000000"
    client_id: "11111111-1111-1111-1111-111111111111"
    client_secret: "${secret:ad-hybrid.client_secret}"   # OS secret store; inline plaintext is auto-sealed on install
    interval: 300

The ${secret:...} reference resolves the app registration's client secret from the OS-native secret store (see Configuration). The tenant_id, client_id and client_secret come from the Entra ID app registration (see Requirements).

Multiple Tenants

Monitor several tenants with separate probe instances:

# probes.d/40-ad-hybrid.yaml
- name: ad-hybrid-corp
  type: ad_hybrid
  params:
    tenant_id: "00000000-0000-0000-0000-000000000000"
    client_id: "11111111-1111-1111-1111-111111111111"
    client_secret: "${secret:ad-hybrid-corp.client_secret}"
    interval: 300

- name: ad-hybrid
  type: ad_hybrid
  params:
    tenant_id: "22222222-2222-2222-2222-222222222222"
    client_id: "33333333-3333-3333-3333-333333333333"
    client_secret: "${secret:ad-hybrid.client_secret}"
    interval: 600

Configuration Parameters

Parameter Must set Default Description
tenant_id Yes - Entra ID tenant (directory) ID
client_id Yes - Application (client) ID of the app registration
client_secret Yes - Client secret of the app registration. A secret: reference it with ${secret:…}, ${env:…} or ${file:…} rather than writing it in the file
interval No 300 Seconds between collections
timeout No 30 Per-request timeout in seconds for calls to the Azure management API

Metrics Collected

Sync and agent series carry attributes identifying the sync service (senhub.ad_hybrid.service.name) and, where applicable, the reporting agent server (senhub.ad_hybrid.agent.server) or the error bucket (senhub.ad_hybrid.error.bucket).

Overview

Metric Unit Description
senhub.ad_hybrid.up 1 1 when the Azure AD Connect Health API answered this cycle, else 0

Sync

Metric Unit Description
senhub.ad_hybrid.sync.health 1 Sync service health (Healthy=2, Warning=1, Error/other=0), per service.name
senhub.ad_hybrid.sync.agents.healthy {agent} Number of sync agents reporting a healthy state, per service.name
senhub.ad_hybrid.sync.agent.count {agent} Total number of registered sync agents, per service.name
senhub.ad_hybrid.sync.export_errors {error} Directory-sync export error count, per service.name and error.bucket

Agents

Metric Unit Description
senhub.ad_hybrid.agent.last_seen s Seconds since the sync agent last reported to Azure AD Connect Health, per service.name and agent.server

Requirements

  • Azure AD Connect Health enabled for the tenant (part of Microsoft Entra ID P1/P2 licensing), with the Health agents installed and reporting on your directory-sync servers.
  • An Entra ID app registration (service principal) with a client secret, used for the client-credentials flow.
  • The app registration must have read access to Azure AD Connect Health — grant it a directory read role (for example the Global Reader or Reports Reader role, or an equivalent role with read access to the Azure AD Hybrid Health service resource) so it can list sync services and agents through the Azure management API.
  • Outbound HTTPS (port 443) from the agent host to the Azure management endpoint (management.azure.com) and the Entra ID login endpoint (login.microsoftonline.com).

Outputs

Azure AD Connect Health metrics are available through every configured output — OTLP, Prometheus, and the pull formats (PRTG, Nagios, Web UI). For PRTG and Nagios, query the probe by its configured name:

curl "http://localhost:8080/api/{agentkey}/prtg/metrics/ad-hybrid-prod"
curl "http://localhost:8080/api/{agentkey}/nagios/metrics/ad-hybrid-prod"

Metric reference

Every metric this probe can emit. Metric is the OpenTelemetry name the OTLP, Prometheus and Zabbix outputs derive theirs from. Name is what a Nagios check and the API metrics= filter match. PRTG channel is the label PRTG shows, placeholders filled from the series' tags.

Metric Name PRTG channel Unit Description
senhub.ad_hybrid.up ad_hybrid_up Service Reachable # 1 when the Azure AD Connect Health API answered this cycle, else 0
senhub.ad_hybrid.sync.health ad_hybrid_sync_health Sync Health ({service_name}) # Sync service health (Healthy=2, Warning=1, Error/other=0)
senhub.ad_hybrid.sync.agents.healthy ad_hybrid_sync_agents_healthy Healthy Sync Agents ({service_name}) # Number of sync agents reporting a healthy state
senhub.ad_hybrid.sync.agent.count ad_hybrid_sync_agents_total Total Sync Agents ({service_name}) # Total number of registered sync agents
senhub.ad_hybrid.sync.export_errors ad_hybrid_sync_export_errors Export Errors ({error_bucket}) # Directory-sync export error count, per error bucket
senhub.ad_hybrid.agent.last_seen ad_hybrid_agent_last_seen Agent Last Seen ({agent_server}) s Seconds since the sync agent last reported to Azure AD Connect Health