Prometheus exporter exposing Azure Resource health status as up
metrics.
This exporter does not export metrics from Azure Monitor API, please use the azure_metrics_exporter for that. Note that the azure-health-exporter
is following the same label naming used in the azure_metrics_exporter
, in order to ease metric joins in PromQL queries.
This exporter call Azure API from an existing subscription with these requirements:
- An application must be registered (e.g., Azure Active Directory -> App registrations -> New application registration)
Note that Azure imposes a very low rate limit for the Resource Health API calls. The Resource Health provider is returning an X-Ms-Ratelimit-Remaining-Subscription-Resource-Requests
header, which means, as per documentation, that the "service has overridden the default limit". The limit has been observed to be 100 requests per 10 minutes. To minimize impact, the exporter has been designed to perform only one Resource Health request per scrape. The rate limit remaining count is also exposed as a metric.
To run this project, you will need a working Go environment.
go get -u github.com/FXinnovation/azure-health-exporter
Build the sources with
make build
./azure-health-exporter
The exporter expects these environment variables to configure the Azure API connection.
Environment Variable | Description |
---|---|
AZURE_SUBSCRIPTION_ID | Found under properties in the Azure portal for your application/service |
AZURE_TENANT_ID | Found under Azure Active Directory > Properties and listed as Directory ID |
AZURE_CLIENT_ID | Also listed as Application Id , is obtained by registering an application under 'Azure Active Directory' |
AZURE_CLIENT_SECRET | Is generated by selecting your application/service under Azure Active Directory, selecting 'keys', and generating a new key |
By default, the exporter optional config file is expected in config/config.yml
.
Use -h flag to list available options.
make test
Configuration is usually done in config/config.yml
.
An example can be found in config/config_example.yml.
Configuration element | Description |
---|---|
resource_configurations | (Mandatory) A list of configuration elements to select resources to monitor for health |
resource_types | (Mandatory) A list of resource type to filter resources (must be part of the supported type list) |
resource_tags | (Mandatory) A map of resource tag name and value to filter resources |
expose_azure_tag_info | (Optional, default to false ) Whether or not to expose the azure_tag_info metric |
You can run images published in dockerhub.
You can also build a docker image using:
make docker
The resulting image is named fxinnovation/azure-health-exporter:<git-branch>
.
The image exposes port 9613 and expects an optional config in /opt/azure-health-exporter/config.yml
.
To configure it, you must pass the environment variables, and you can bind-mount a config from your host:
docker run -p 9613:9613 -v /path/on/host/config/config.yml:/opt/azure-health-exporter/config/config.yml -e AZURE_SUBSCRIPTION_ID="my_subscription_id" -e AZURE_TENANT_ID="my_tenant_id" -e AZURE_CLIENT_ID="my_client_id" -e AZURE_CLIENT_SECRET="my_client_secret" fxinnovation/azure-health-exporter:<git-branch>
Metric | Description |
---|---|
azure_resource_health_availability_up | Resource health availability that relies on signals from different Azure services to assess whether a resource is healthy. This UP metric is 0 if availability status is Unavailable , and is 1 otherwise. |
azure_tag_info | Tags of the Azure resource, exposed only if expose_azure_tag_info config is set to true |
azure_resource_health_ratelimit_remaining_requests | Azure subscription scoped Resource Health requests remaining (based on X-Ms-Ratelimit-Remaining-Subscription-Resource-Requests header) |
Example:
# HELP azure_resource_health_availability_up Resource health availability that relies on signals from different Azure services to assess whether a resource is healthy
# TYPE azure_resource_health_availability_up gauge
azure_resource_health_availability_up{resource_group="my_group",resource_name="my_name",resource_type="Microsoft.Storage/storageAccounts",subscription_id="xxx"} 1
# HELP azure_tag_info Tags of the Azure resource
# TYPE azure_tag_info gauge
azure_tag_info{resource_group="my_group",resource_name="my_name",resource_type="Microsoft.Storage/storageAccounts",subscription_id="xxx",tag_monitoring="enabled"} 1
# HELP azure_resource_health_ratelimit_remaining_requests Azure subscription scoped Resource Health requests remaining (based on X-Ms-Ratelimit-Remaining-Subscription-Resource-Requests header)
# TYPE azure_resource_health_ratelimit_remaining_requests gauge
azure_resource_health_ratelimit_remaining_requests{subscription_id="xxx"} 98
Refer to CONTRIBUTING.md.
Apache License 2.0, see LICENSE.