Bug Reference

CLOUDSTACK-9998 - Getting issue details... STATUS

Functional Specification

Introduction and Use-case

Several organizations use Prometheus based metrics/monitoring, the aim is to develop a CloudStack metrics exporter for Prometheus server which can export metrics such as CPU, memory, cores, VMs, volumes, IPs.

Implementation and Metrics Details

The exporter can be implemented as a CloudStack plugin that is disabled by default. When enabled, it listens on a configured port and allows configured IPs to access metrics data on a web service endpoint (/metrics).

The metrics are exported per zone and contain zone names and host names, ips where-ever applicable.

List of metrics exported per zone (pop):
    - Total hosts
    - Online hosts
    - Offline hosts
    - Per host:
      - CPU speed Used
      - CPU speed Total
      - RAM Used
      - RAM Total
      - Total VMs running on host
      - CPU cores Used
      - CPU cores Total
    - CPU speed Allocated for zone
- CPU cores Allocated for zone
- RAM Allocated for zone
- VMs (count in all states)
- Volumes Ready
- Volumes Destroyed
- Volumes Total
- Storage Pools (Primary/Secondary)
- Disk size allocated (only for primary storage)
- Disk size total
- Disk size used
    - Private IP allocated
    - Private IP total
    - Public IP addresses allocated
    - Public IP addresses total
    - Shared Network IPs total
    - Shared Network IPs allocated
    - VLAN Allocated
    - VLAN Total

         -  CloudStack cpu cores limit (summation across domains)
         -  CloudStack memory limit (summation across domains)

Global Settings

1. prometheus.exporter.enable - (default: false), Enable the prometheus exporter plugin, management server restart needed.

2. prometheus.exporter.port - (default: 9595), The prometheus exporter server port.

3. prometheus.exporter.allowed.ips - (default:, List of comma separated prometheus server ips (with no spaces) that should be allowed to access the metrics endpoint.

  • No labels


  1. Seems good! I would however also allow ::1 as we are going to the IPv6 world! (smile)

  2. Looks like it is generic? That is, any adaptor can read using this protocol and write  to any metric / time-series store? Also, why not use the admin API?

    1. @Chiradeep Vittal - Yes, admin API is not consumeable unless you provide credentials, Prometheus server may not understand how to send a signed API request which is why it is implemented on a separate port with minimal IP/source based access control. Secondly, currently supported API responses serialized as JSON and XML only, however prometheus consumes a line separate key/value pair (syntax).