Exporters Prometheus pour OpenStack¶
Introduction¶
Les exporters exposent les métriques au format Prometheus. Chaque composant (OS, containers, services OpenStack, bases de données) a son exporter dédié.
Prérequis¶
- Prometheus Stack installé
- Accès aux services à monitorer
Points à apprendre¶
Vue d'ensemble des exporters¶
graph TB
subgraph Infrastructure["Infrastructure Exporters"]
node[Node Exporter :9100<br/>CPU, RAM, Disk<br/>Network, Load]
cadvisor[cAdvisor :8080<br/>Container metrics<br/>CPU, Memory per container]
end
subgraph OpenStack_Exp["OpenStack Exporters"]
os_exp[OpenStack Exporter :9180<br/>API metrics<br/>Quotas, Resources]
libvirt[Libvirt Exporter :9177<br/>VM metrics]
end
subgraph Data_Layer["Data Layer Exporters"]
mysql[MySQL Exporter :9104<br/>Galera, Queries<br/>Connections]
rabbitmq[RabbitMQ Exporter :15692<br/>Queues, Connections<br/>Messages]
memcached[Memcached Exporter :9150<br/>Cache hits/miss]
end
subgraph Network["Network Exporters"]
haproxy[HAProxy Exporter :9101<br/>Frontend/Backend<br/>Connections, Errors]
blackbox[Blackbox Exporter :9115<br/>HTTP probes<br/>Endpoint checks]
end
subgraph Storage["Storage Exporters"]
ceph[Ceph Exporter :9128<br/>OSD, Pool<br/>PG states]
end
Node Exporter¶
# Métriques système de base
# Port: 9100
# Vérifier
curl http://controller-1:9100/metrics | head -50
# Métriques principales
node_cpu_seconds_total # CPU time
node_memory_MemTotal_bytes # Total RAM
node_memory_MemAvailable_bytes # Available RAM
node_filesystem_size_bytes # Disk size
node_filesystem_avail_bytes # Disk available
node_network_receive_bytes_total # Network RX
node_network_transmit_bytes_total # Network TX
node_load1, node_load5, node_load15 # Load average
Configuration node_exporter¶
# /etc/kolla/config/prometheus/node_exporter.yml
collectors:
enabled:
- cpu
- diskstats
- filesystem
- loadavg
- meminfo
- netdev
- stat
- time
- vmstat
disabled:
- textfile # Si non utilisé
cAdvisor¶
# Métriques containers Docker
# Port: 8080
# Métriques principales
container_cpu_usage_seconds_total
container_memory_usage_bytes
container_memory_working_set_bytes
container_network_receive_bytes_total
container_network_transmit_bytes_total
container_fs_usage_bytes
container_fs_limit_bytes
OpenStack Exporter¶
# Métriques OpenStack via API
# Port: 9180
# Installation manuelle si pas via Kolla
docker run -d --name openstack-exporter \
-p 9180:9180 \
-v /etc/openstack/clouds.yaml:/etc/openstack/clouds.yaml:ro \
quay.io/niedbalski/openstack-exporter:latest \
--os-cloud openstack
# Métriques exposées
openstack_nova_total_vms
openstack_nova_running_vms
openstack_nova_vcpus_total
openstack_nova_vcpus_used
openstack_nova_memory_total_bytes
openstack_nova_memory_used_bytes
openstack_neutron_networks
openstack_neutron_subnets
openstack_neutron_routers
openstack_neutron_ports
openstack_cinder_volumes
openstack_cinder_volume_size_bytes
openstack_glance_images
openstack_keystone_domains
openstack_keystone_projects
openstack_keystone_users
HAProxy Exporter¶
# Port: 9101
# Métriques clés
haproxy_frontend_current_sessions
haproxy_frontend_http_requests_total
haproxy_frontend_bytes_in_total
haproxy_frontend_bytes_out_total
haproxy_backend_current_sessions
haproxy_backend_http_responses_total
haproxy_backend_response_time_average_seconds
haproxy_server_status # 1 = UP, 0 = DOWN
MySQL/Galera Exporter¶
# Port: 9104
# Configuration
# Nécessite un user MySQL avec permissions SELECT
docker exec mariadb mysql -e "
CREATE USER 'exporter'@'%' IDENTIFIED BY 'password';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'%';
"
# Métriques Galera
mysql_global_status_wsrep_cluster_size
mysql_global_status_wsrep_cluster_status
mysql_global_status_wsrep_local_state
mysql_global_status_wsrep_ready
mysql_global_status_wsrep_connected
# Métriques générales
mysql_global_status_connections
mysql_global_status_threads_connected
mysql_global_status_queries
mysql_global_status_slow_queries
mysql_global_status_innodb_buffer_pool_reads
RabbitMQ Exporter¶
# Port: 15692 (intégré depuis RabbitMQ 3.8+)
# Activer le plugin
rabbitmq-plugins enable rabbitmq_prometheus
# Métriques
rabbitmq_connections_total
rabbitmq_channels_total
rabbitmq_queues_total
rabbitmq_queue_messages
rabbitmq_queue_messages_ready
rabbitmq_queue_messages_unacked
rabbitmq_queue_consumers
rabbitmq_io_read_bytes_total
rabbitmq_io_write_bytes_total
Ceph Exporter¶
# Via Ceph MGR prometheus module
# Port: 9283 (MGR)
# Activer le module
ceph mgr module enable prometheus
# Métriques
ceph_health_status # 0=OK, 1=WARN, 2=ERR
ceph_osd_up
ceph_osd_in
ceph_pool_stored_bytes
ceph_pool_objects
ceph_pg_active
ceph_pg_clean
ceph_pg_degraded
ceph_cluster_total_bytes
ceph_cluster_total_used_bytes
Blackbox Exporter (probes)¶
# /etc/kolla/config/prometheus/blackbox.yml
modules:
http_2xx:
prober: http
timeout: 5s
http:
valid_http_versions: ["HTTP/1.1", "HTTP/2"]
valid_status_codes: [200]
method: GET
http_healthcheck:
prober: http
timeout: 5s
http:
valid_status_codes: [200, 204]
method: GET
fail_if_body_not_matches_regexp:
- "OK|healthy"
tcp_connect:
prober: tcp
timeout: 5s
# Scrape config pour blackbox
- job_name: 'blackbox-http'
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- https://10.0.0.10:5000/v3 # Keystone
- https://10.0.0.10:8774 # Nova
- https://10.0.0.10:9696 # Neutron
- https://10.0.0.10:9292 # Glance
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: blackbox-exporter:9115
Tableau récapitulatif des ports¶
| Exporter | Port | Métriques |
|---|---|---|
| Node Exporter | 9100 | Système |
| cAdvisor | 8080 | Containers |
| OpenStack Exporter | 9180 | Services OpenStack |
| HAProxy Exporter | 9101 | Load Balancer |
| MySQL Exporter | 9104 | MariaDB/Galera |
| RabbitMQ | 15692 | Message Queue |
| Memcached Exporter | 9150 | Cache |
| Ceph MGR | 9283 | Storage |
| Blackbox Exporter | 9115 | Probes HTTP/TCP |
| Libvirt Exporter | 9177 | VMs KVM |
Exemples pratiques¶
Script de vérification des exporters¶
#!/bin/bash
# check-exporters.sh
HOSTS="controller-1 controller-2 controller-3 compute-1 compute-2"
check_exporter() {
local host=$1
local port=$2
local name=$3
if curl -s --connect-timeout 2 "http://${host}:${port}/metrics" > /dev/null; then
echo "✓ ${host}:${port} (${name})"
else
echo "✗ ${host}:${port} (${name}) - FAILED"
fi
}
echo "=== Node Exporter (9100) ==="
for host in $HOSTS; do
check_exporter $host 9100 "node"
done
echo -e "\n=== cAdvisor (8080) ==="
for host in controller-1 controller-2 controller-3; do
check_exporter $host 8080 "cadvisor"
done
echo -e "\n=== HAProxy (9101) ==="
for host in controller-1 controller-2 controller-3; do
check_exporter $host 9101 "haproxy"
done
echo -e "\n=== MySQL (9104) ==="
for host in controller-1 controller-2 controller-3; do
check_exporter $host 9104 "mysql"
done
echo -e "\n=== RabbitMQ (15692) ==="
for host in controller-1 controller-2 controller-3; do
check_exporter $host 15692 "rabbitmq"
done
Exporter custom (textfile)¶
# Créer des métriques custom via textfile collector
mkdir -p /var/lib/node_exporter/textfile
# Script qui génère des métriques
cat > /etc/cron.d/openstack-metrics <<'EOF'
*/5 * * * * root /opt/scripts/openstack-metrics.sh > /var/lib/node_exporter/textfile/openstack.prom
EOF
# /opt/scripts/openstack-metrics.sh
#!/bin/bash
source /root/openrc
# Compter les instances
INSTANCES=$(openstack server list --all-projects -f value | wc -l)
echo "openstack_instances_total $INSTANCES"
# Compter les volumes
VOLUMES=$(openstack volume list --all-projects -f value | wc -l)
echo "openstack_volumes_total $VOLUMES"
Ressources¶
Checkpoint¶
- Node Exporter sur tous les hosts
- cAdvisor sur les controllers
- OpenStack Exporter fonctionnel
- HAProxy Exporter accessible
- MySQL/Galera Exporter avec métriques wsrep
- RabbitMQ metrics plugin activé
- Ceph MGR prometheus module activé
- Tous les targets UP dans Prometheus