Export Consul service health to Prometheus.
To run it:
make ./consul_exporter [flags]
|consul_up||Was the last query of Consul successful|
|consul_raft_peers||How many peers (servers) are in the Raft cluster|
|consul_serf_lan_members||How many members are in the cluster|
|consul_catalog_services||How many services are in the cluster|
|consul_catalog_service_node_healthy||Is this service healthy on this node||service, node|
|consul_health_node_status||Status of health checks associated with a node||check, node|
|consul_health_service_status||Status of health checks associated with a service||check, node, service|
|consul_catalog_kv||The values for selected keys in Consul's key/value catalog. Keys with non-numeric values are omitted||key|
consul.server: Address (host and port) of the Consul instance we should
connect to. This could be a local agent (
localhost:8500, for instance), or
the address of a Consul server.
consul.health-summary: Collects information about each registered
service and exports
consul_catalog_service_node_healthy. This requires n+1
Consul API queries to gather all information about each service. Health check
information are available via
consul_health_service_statusas well, but
only for services which have a health check configured. Defaults to true.
web.listen-address: Address to listen on for web interface and telemetry.
web.telemetry-path: Path under which to expose metrics.
log.level: Logging level.
This exporter supports grabbing key/value pairs from Consul's KV store and
exposing them to Prometheus. This can be useful, for instance, if you use
Consul KV to store your intended cluster size, and want to graph that value
against the actual value found via monitoring.
kv.prefix: Prefix under which to look for KV pairs.
kv.filter: Only store keys that match this regex pattern.
A prefix must be supplied to activate this feature. Pass
/ if you want to
search the entire keyspace.
Are my services healthy?
min(consul_catalog_service_node_healthy) by (service)
Values of 1 mean that all nodes for the service are passing. Values of 0 mean at least one node for the service is not passing.
What service nodes are failing?
sum by (node, service)(consul_catalog_service_node_healthy == 0)
You can deploy this exporter using the prom/consul-exporter Docker image.
docker pull prom/consul-exporter docker run -d -p 9107:9107 prom/consul-exporter -consul.server=172.17.42.1:8500
Keep in mind that your container needs to be able to communicate with the Consul server or agent. Use an IP accessible from the container or set the
--dns-search options of the
docker run command:
docker run -d -p 9107:9107 --dns=172.17.42.1 --dns-search=service.consul \ prom/consul-exporter -consul.server=consul:8500