Export the usage information of your running projects inside OpenStack via your
(hopefully) existing Prometheus-Setup. Currently only two metrics are exported, namely
the values of total_memory_mb_usage and total_vcpus_usage of the
os-simple-tenant-usage-API.
Exported labels per project are:
domain_iddomain_nameproject_idproject_name
All dependencies are managed with a requirements.txt. Create a virtual environment with a tool of your choosing
(e.g. pyenv with pyenv-virtualenv or venv) and
install with pip install -r requirements.txt.
A docker image is available as well and all command line options do have corresponding environment variables.
usage: project_usage_exporter.py [-h] [-d DUMMY_DATA] [-w DUMMY_WEIGHTS]
                                 [--domain [DOMAIN [DOMAIN ...]]]
                                 [--domain-id DOMAIN_ID]
                                 [--simple-vm-id SIMPLE_VM_ID]
                                 [--simple-vm-tag SIMPLE_VM_TAG]
                                 [--weight-update-frequency WEIGHT_UPDATE_FREQUENCY]
                                 [--weight-update-endpoint WEIGHT_UPDATE_ENDPOINT]
                                 [--start-date-endpoint START_DATE_ENDPOINT]
                                 [-s START] [-i UPDATE_INTERVAL] [-p PORT]
                                 [-v]
Query project usages from an openstack instance and provide it in a prometheus
compatible format. Alternatively develop in local mode and emulate machines
and projects.
optional arguments:
  -h, --help            show this help message and exit
  -d DUMMY_DATA, --dummy-data DUMMY_DATA
                        Use dummy values instead of connecting to an openstack
                        instance. Usage values are calculated based on the
                        configured existence. Toml files can be updated on the
                        fly as they are read every time a dummy-cloud function
                        is called (functions of nested classes excluded). Take
                        a look at the example file for an explanation
                        resources/dummy_cc.toml. Can also be provided via
                        environment variable $USAGE_EXPORTER_DUMMY_FILE
                        (default: None)
  -w DUMMY_WEIGHTS, --dummy-weights DUMMY_WEIGHTS
                        Use dummy weight endpoint instead of connecting to the
                        api. Take a look at the example file for an
                        explanation resources/dummy_weights.toml. Can also be
                        provided via environment variable
                        $USAGE_EXPORTER_DUMMY_WEIGHTS_FILE (default: None)
  --domain [DOMAIN [DOMAIN ...]]
                        Only export usages of projects belonging to one of the
                        given domains. Separate them via comma if passing via
                        environment variable $USAGE_EXPORTER_PROJECT_DOMAINS.
                        If no domains are specified all readable projects are
                        exported. (default: ['elixir'])
  --domain-id DOMAIN_ID
                        Only export usages of projects belonging to the domain
                        identified by the given ID. Takes precedence over any
                        specified domain and default values. Can also be set
                        via $USAGE_EXPORTER_PROJECT_DOMAIN_ID (default: )
  --simple-vm-id SIMPLE_VM_ID
                        The ID of the Openstack project, that hosts the
                        SimpleVm projects. Can also be set vis
                        $USAGE_EXPORTER_SIMPLE_VM_PROJECT_ID (default: )
  --simple-vm-tag SIMPLE_VM_TAG
                        The metadata of the Openstack project, that hosts the
                        SimpleVm projects. It is used to differentiate the
                        simple vm projects, default: project_name Can also be
                        set vis $USAGE_EXPORTER_SIMPLE_VM_PROJECT_TAG
                        (default: project_name)
  --weight-update-frequency WEIGHT_UPDATE_FREQUENCY
                        The frequency of checking if there is a weight update.
                        Is a multiple of the update interval length . Defaults
                        to the value of environment variable
                        $USAGE_EXPORTER_WEIGHT_UPDATE_FREQUENCY or 10
                        (default: 10)
  --weight-update-endpoint WEIGHT_UPDATE_ENDPOINT
                        The endpoint url where the current weights can be
                        updated . Defaults to the value of environment
                        variable $USAGE_EXPORTER_WEIGHTS_UPDATE_ENDPOINT or
                        will be left blank (default: )
  --start-date-endpoint START_DATE_ENDPOINT
                        The endpoint url where the start date can be
                        requested. If defined, requested date takes precedence
                        over all other start date arguments. Defaults to the
                        value of environment variable
                        $USAGE_EXPORTER_START_DATE_ENDPOINT or will be left
                        blank (default: )
  -s START, --start START
                        Beginning time of stats (YYYY-MM-DD). If set the value
                        of environment variable $USAGE_EXPORTER_START_DATE is
                        used. Uses maya for parsing. (default: 2021-07-20
                        18:04:41.399703)
  -i UPDATE_INTERVAL, --update-interval UPDATE_INTERVAL
                        Time to sleep between intervals, in case the calls
                        cause to much load on your openstack instance.
                        Defaults to the value of environment variable
                        $USAGE_EXPORTER_UPDATE_INTERVAL or 300 (in seconds)
                        (default: 30)
  -p PORT, --port PORT  Port to provide metrics on (default: 8080)
  -v, --verbose         Activate logging debug level (default: 0)
GNU AGPLv3 @ tluettje
USAGE_EXPORTER_DUMMY_FILE
USAGE_EXPORTER_DUMMY_WEIGHTS_FILE
USAGE_EXPORTER_PROJECT_DOMAINS
USAGE_EXPORTER_PROJECT_DOMAIN_ID 
USAGE_EXPORTER_SIMPLE_VM_PROJECT_ID 
USAGE_EXPORTER_SIMPLE_VM_PROJECT_TAG
USAGE_EXPORTER_WEIGHT_UPDATE_FREQUENCY 
USAGE_EXPORTER_WEIGHTS_UPDATE_ENDPOINT
USAGE_EXPORTER_START_DATE_ENDPOINT
USAGE_EXPORTER_START_DATE
USAGE_EXPORTER_UPDATE_INTERVAL
If you simply want to take a look at the output, try any modification or do not have any
access to an OpenStack instance you can emulate running projects and machines with
simple toml files. A few profiles are available inside the /resources folder.
./project_usage_exporter.py \
 -d resources/dummy_cc.toml -w resources/dummy_weights.toml \
 --domain --simple-vm-id 123realsimplevmor
docker run -e USAGE_EXPORTER_DUMMY_FILE=/code/resources/dummy_cc.toml \
           -e USAGE_EXPORTER_DUMMY_WEIGHTS_FILE=/code/resources/dummy_weigths.toml \
           -e USAGE_EXPORTER_PROJECT_DOMAINS= \
           -p 8080:8080 denbicloud/os_project_usage_exporter:latest
This will emulate a few projects with machines without any domain restrictions. The
resources folder is also available inside the docker container at /code/resources.
Note: If you want to fetch mb and vcpu weights from an active endpoint, you need to omit the
-w DUMMY_WEIGHTS, --dummy-weights DUMMY_WEIGHTS argument or respectively the USAGE_EXPORTER_DUMMY_WEIGHTS_FILE
environment as providing a dummy weights file deactivates fetching weights from and active endpoint.
Simply source your admin-openrc.sh before starting the exporter. Depending on the size
of your instance you might want test different values for --update-interval to
determine how much load (if any) is caused by the queries.
In case of docker you have to insert your password inside the openrc file, and remove
any lines other than key=value pairs. Surrounding quotes will be considered part of
the values therefore remove them as well.
docker run --env-file openrc -p 8080:8080 denbicloud/os_project_usage_exporter:latest