Skip to content

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

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