OSprofiler Guide

OSprofiler is a library from oslo. It’s used for performance analysis. Please see Official Doc for more detail.


OSprofiler now supports some kind of backends, such as Ceilometer, ElasticSearch , Messaging and MongoDB.


1. Ceilometer is only used for data collection, and Messaging is only used for data transfer. So Ceilometer only works when Messaging is enabled. 2. ElasticSearch and MongoDB support both data collection and transfer. So they can be used standalone.

In this guide, we take MongoDB for example.

There are some new config options.


Enables the profiling for all services on this node. Default value is False (fully disable the profiling feature). This function may bring down Zaqar’s performance, so please set to disable in production environment.


Connection string for a notifier backend. Default value is messaging:// which sets the notifier to oslo_messaging. Here we set it to “mongodb://localhost:27017”


Secret key(s) to use for encrypting context data for performance profiling. This string value should have the following format: <key1>[,<key2>,…<keyn>], where each key is some random string. A user who triggers the profiling via the REST API has to set one of these keys in the headers of the REST API call to include profiling results of this node for this particular project.

trace_wsgi_transport, trace_message_store and trace_management_store

The three layers during a user’s request flow. Set to True to enable tracing for each layer.

So In this example, we should add the following config options:

enabled = True
connection_string = mongodb://localhost:27017
hmac_keys = 123
trace_wsgi_transport = True
trace_message_store = True
trace_management_store = True


If you want to use MQ and Ceilometer, please leave the connection_string empty or indicate the MQ information. And please make sure that the following config options have be set in Ceilometer.conf

event_dispatchers = database

topics = notifications, profiler

Then restart Zaqar service

Command Line

we can use OpenStack Client to analyse the user request now. For example, if we want to know the performance for “queue list”, we can do like this:

1. OpenStack Client now supports OSprofiler by default. Only thing we need to do is adding --os-profile {hmac_keys} in the command:

openstack queue list --os-profile 123

“123” here is what we set in Zaqar config file. After the request is done, OpenStack Client will return a trace ID like:

Trace ID: 2902c7a3-ee18-4b08-aae7-4e34388f9352
Display trace with command:
osprofiler trace show --html 2902c7a3-ee18-4b08-aae7-4e34388f9352

Now the trace information has been stored in MongoDB already.

2. Use the command from the openstack client return information. The osprofiler command uses Ceilometer for data collection by default, so we need use --connection-string to change it to mongoDB here:

osprofiler trace show --html 2902c7a3-ee18-4b08-aae7-4e34388f9352 --connection-string mongodb://localhost:27017

Then you can see the analysis information in html format now.

It also supports json format:

osprofiler trace show --json 2902c7a3-ee18-4b08-aae7-4e34388f9352 --connection-string mongodb://localhost:27017

Of course it supports to save the result to a file:

osprofiler trace show --json 2902c7a3-ee18-4b08-aae7-4e34388f9352 --out list_test --connection-string mongodb://localhost:27017

Then you can open the file “list_test” to get the result.


If you used MQ for data transfer, the “–connection-string” here could be ignored or set it to your Ceilometer endpoint.