magnum/specs/stats-api-spec.rst
Vijendar Komalla 1ef059b646 Specification for Magnum stats API
blueprint magnum-stats-api
Change-Id: I97a3ac0bf96208e1c8d909271fe770dff5532898
2016-12-19 11:37:57 -06:00

229 lines
6.6 KiB
ReStructuredText

========================
Magnum Cluster Stats API
========================
Launchpad blueprint:
https://blueprints.launchpad.net/magnum/+spec/magnum-stats-api
This proposal is to add a new Magnum statistics API to provide useful metrics
to OpenStack administrators/service providers as well as users.
Problem Description
-------------------
Currently there is no magnum API to get usage metrics. This specification
document proposes to add a new stats endpoint to Magnum API. The proposed
stats endpoint will provide useful metrics such as overall current usage info
to OpenStack service providers and also non-admin tenants will be able to
fetch tenant scoped statistics.
Use Cases
---------
Below given are some of the use cases that can be addressed by implementing
stats API for Magnum:
1. A Magnum tenant with admin role would like to get the total number of
active clusters, nodes, floating IPs and Cinder volumes for all active
tenants.
2. A Magnum tenant with admin role would like to get the total number of
active clusters, nodes, floating IPs and Cinder volumes for a specific
tenant.
3. A Magnum tenant without admin role can get the total number of active
clusters, nodes, floating IPs and Cinder volumes scoped to that tenant.
4. A Magnum tenant would like to discover the sum of allocated server capacity
for a given cluster (in terms of aggregate vcpu, memory, local storage, and
cinder volume storage).
5. A Magnum tenant with admin role would like to discover the aggregate server
capacity (in terms of aggregate vcpu, memory, local storage, and cinder
volume storage) allocated by all clusters belonging to a specific tenant or
all the tenants.
Please note that this is not an exhaustive list of use cases and additional
specs will be proposed based on the community needs.
Proposed Changes
----------------
The proposed change is to add a new '/stats' REST API endpoint to Magnum
service that will provide total number of clusters, nodes, floating IPs,
Cinder volumes and also a summary view of server capacity (in terms of
aggregate vcpu, memory, local storage, and cinder volume storage) allocated
to a cluster, or to all the clusters owned by the given tenant or all the
tenants.
1. Add an API that returns total number of clusters, nodes, floating IPs, and
Cinder volumes of all tenants.
2. Add an API that returns total number of clusters, nodes, floating IPs, and
Cinder volumes of a specific tenant.
3. Add an API that returns aggregate vcpu, memory, local storage, and cinder
volume storage for the given cluster.
4. Add an API that returns aggregate vcpu, memory, local storage, and cinder
volume storage allocated by all clusters belonging to a specific tenant.
5. Update policy.json file to enable access to '/stats' endpoint to owner and
admin (using a policy rule admin_or_owner).
In the initial implementation stats data will be aggregated from Magnum DB
and/or from other OpenStack services on demand. There will be some interaction
between the conductor and the drivers through an interface. If needed, this
on-demand stats aggregation implementation can be updated in future without
affecting the REST API behavior. For example, if the proposed on-demand data
aggregation is not responsive, Magnum conductor may need to collect the stats
periodically and save in the Magnum DB.
Initial work in progress review [2].
Alternatives
------------
Without proposed stats endpoint, an administrator could use OpenStack clients
to get some basic statistics such as server count, volume count etc. by
relying on the Magnum naming convention. For example, to get nova instance
count:
nova list | grep -e "kube-" -e "swarm-" -e "mesos-" | wc
For the number of cinder volumes:
cinder list | grep "docker_volume" | wc -l
For float IPs count:
openstack ip floating list -f value|wc -l
For clusters count:
magnum cluster-list | grep "CREATE_COMPLETE" | wc -l
Data model impact
-----------------
None, because data will be aggregated and summarized at the time of each stats
API request, so no stats need to be persisted in the data store.
REST API impact
---------------
Add a new REST endpoint '/stats' as shown below:
A GET request with admin role to '/stats?type=cluster' will return the total
clusters, nodes, floating IPs and Cinder volumes for all active tenants.
A GET request without admin role to '/stats?type=cluster' will return the
total clusters, nodes, floating IPs and Cinder volumes for the current tenant.
A GET request with admin role to '/stats?type=cluster&tenant=<tenant-id>' will
return the total clusters, nodes, floating IPs and Cinder volumes for the
given tenant.
A GET request to '/stats?type=cluster&tenant=<tenant-id>' without admin role
will result in HTTP status code 403 (Permission denied) if the requester
tenant-id does not match the tenant-id provided in the URI. If it matches,
stats will be scoped to the requested tenant.
Other Implementation Option
---------------------------
Existing /cluster API can be updated to include stats info as shown below:
A 'GET' request with admin role to '/cluster/stats' will return total active
clusters and nodes across all the tenants.
A 'GET' request to '/cluster/stats/<tenant-id>' will return total clusters and
nodes for the given tenant.
A 'GET' request without admin role to '/cluster/stats/<tenant-id>' will result
in HTTP status code 403 (Permission denied).
This option was discussed and rejected due to the fact that /cluster/stats
collide with /cluster/<cluster-name/id>.
Security impact
---------------
There will be changes to policy.json file that enable access to '/stats'
endpoint to owner and admin (using a policy rule admin_or_owner).
Notifications impact
--------------------
None
Other end user impact
---------------------
New /stats endpoint will be available to users.
Performance impact
------------------
None
Other deployer impact
---------------------
None.
Developer impact
----------------
None
Implementation
--------------
Assignee(s)
-----------
Primary assignee
vijendar-komalla
Work Items
----------
1. Implement /stats API in Magnum service.
2. Document new API.
3. Update Magnum CLI to expose stats functionality.
Dependencies
------------
None
Testing
-------
1. Since a new stats endpoint will be introduced with this proposal, need to
update some unit tests.
2. Add unit tests and functional tests for new functionality introduced.
Documentation Impact
--------------------
Update API documentation to include stats API information.
References
----------
[1] - Magnum cluster statistics API blueprint:
https://blueprints.launchpad.net/magnum/+spec/magnum-stats-api
[2] - Proposed change under review:
https://review.openstack.org/391301