First draft of plugin/agent documentation. Fixes bug 1018311.
Change-Id: I5723ab7cdf3f552b23927380a764c53f7beb4f10
This commit is contained in:
parent
d179cbf4ef
commit
1b7b651d86
99
doc/dev/agent/writing_agent_plugin.rst
Normal file
99
doc/dev/agent/writing_agent_plugin.rst
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
..
|
||||||
|
Copyright 2012 Nicolas Barcet for Canonical
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
not use this file except in compliance with the License. You may obtain
|
||||||
|
a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
License for the specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
|
||||||
|
This documentation has for objective to give you some clues on how to write a
|
||||||
|
new agent or plugin for Ceilometer a to use if you wish to instrument a
|
||||||
|
functionality which has not yet been covered by an existing one.
|
||||||
|
|
||||||
|
Agent
|
||||||
|
=====
|
||||||
|
There is currently only one agent defined for Ceilometer which can be found at: ``ceilometer/agent/``
|
||||||
|
As you will see in the ``manager.py`` file, this agent will automatically load any
|
||||||
|
plugin defined in the namesace ``ceilometer.poll.compute``.
|
||||||
|
|
||||||
|
Agents are added by implementing a new nova.manager.Manager class, in the same
|
||||||
|
way it was done for the AgentManager for the compute agent in the file
|
||||||
|
``ceilometer/agent/manager.py``.
|
||||||
|
|
||||||
|
Plugins
|
||||||
|
=======
|
||||||
|
An agent can support multiple plugins to retrieve different information and
|
||||||
|
send them to the collector. As stated above, an agent will automatically
|
||||||
|
activate all plugins of a given class. For example, the compute agent will
|
||||||
|
load all plugins of class ``ceilometer.poll.compute``. This will load, among
|
||||||
|
others, the ceilometer.compute.libvirt.CPUPollster, which is defined in the
|
||||||
|
file ``ceilometer/compute/libvirt.py`` as well as the ceilometer.compute.notifications.InstanceNotifications plugin
|
||||||
|
which is defined in the file ``ceilometer/compute/notifications.py``
|
||||||
|
|
||||||
|
We are using these two existing plugins as examples as the first one provides
|
||||||
|
an example of how to interact when you need to retrieve information from an
|
||||||
|
external system (pollster) and the second one is an example of how to forward
|
||||||
|
an existing event notification on the standard OpenStack queue to ceilometer.
|
||||||
|
|
||||||
|
Pollster
|
||||||
|
--------
|
||||||
|
Pollsters are defined as subclasses of the ``ceilometer.plugin.PollsterBase`` meta
|
||||||
|
class as defined in the ``ceilometer/plugin.py`` file. Pollsters must implement
|
||||||
|
one method: ``get_counters(self, manager, context)``, which returns a
|
||||||
|
a sequence of ``Counter`` objects as defined in the ``ceilometer/counter.py`` file.
|
||||||
|
|
||||||
|
In the ``CPUPollster`` plugin, the ``get_counters`` method is implemented as a loop
|
||||||
|
which, for each instances running on the local host, retrieves the cpu_time
|
||||||
|
from libvirt and send back two ``Counter`` objects. The first one, named
|
||||||
|
"cpu", is of type "cumulative", meaning that between two polls, its value is
|
||||||
|
not reset, or in other word that the cpu value is always provided as a duration
|
||||||
|
that continuously increases since the creation of the instance. The second one,
|
||||||
|
named "instance", is of type "delta", meaning that it's value is just the
|
||||||
|
volume since the last poll. Here, the instance counter is only used as a way
|
||||||
|
to tell the system that the instance is still running, hence the hard coded
|
||||||
|
value of 1.
|
||||||
|
|
||||||
|
Note that the ``LOG`` method is only used as a debugging tool and does not
|
||||||
|
participate in the actual metering activity.
|
||||||
|
|
||||||
|
Notification
|
||||||
|
------------
|
||||||
|
Notifiications are defined as subclass of the ``ceilometer.plugin.NotificationBase``
|
||||||
|
meta class as defined in the ``ceilometer/plugin.py`` file. Notifications must
|
||||||
|
implement two methods:
|
||||||
|
|
||||||
|
``get_event_types(self)`` which should return a sequence of strings defining the event types to be given to the plugin and
|
||||||
|
|
||||||
|
``process_notification(self, message)`` which receives an event message from the list provided to get_event_types and returns a sequence of Counter objects as defined in the ``ceilometer/counter.py`` file.
|
||||||
|
|
||||||
|
In the ``InstanceNotifications`` plugin, it listens to three events:
|
||||||
|
|
||||||
|
* compute.instance.create.end
|
||||||
|
|
||||||
|
* compute.instance.exists
|
||||||
|
|
||||||
|
* compute.instance.delete.start
|
||||||
|
|
||||||
|
using the ``get_event_type`` method and subsequently the method
|
||||||
|
``process_notification`` will be invoked each time such events are happening which
|
||||||
|
generates the appropriate counter objects to be sent to the collector.
|
||||||
|
|
||||||
|
Tests
|
||||||
|
=====
|
||||||
|
Any new plugin or agent contribution will only be accepted into the project if
|
||||||
|
provided together with unit tests. Those are defined for the compute agent
|
||||||
|
plugins in the directory ``tests/compute`` and for the agent itself in ``test/agent``.
|
||||||
|
Unit tests are run in a continuous integration process for each commit made to
|
||||||
|
the project, thus ensuring as best as possible that a given patch has no side
|
||||||
|
effect to the rest of the project.
|
||||||
|
|
||||||
|
### FIXME: could not find a unit test for CPUPollster
|
||||||
|
|
||||||
|
|
48
doc/dev/index.rst
Normal file
48
doc/dev/index.rst
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
..
|
||||||
|
Copyright 2012 Nicolas Barcet for Canonical
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
not use this file except in compliance with the License. You may obtain
|
||||||
|
a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
License for the specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
|
||||||
|
==================================================
|
||||||
|
Welcome to the Ceilometer developer documentation!
|
||||||
|
==================================================
|
||||||
|
|
||||||
|
The ceilometer project aims to deliver a unique point of contact for billing systems to aquire all meters they need to establish customer billing, accross all current and future OpenStack core components.
|
||||||
|
|
||||||
|
What is the purpose of the project and vision for it?
|
||||||
|
=====================================================
|
||||||
|
|
||||||
|
* Provide efficient collection of metering data, in terms of CPU and network costs.
|
||||||
|
* Allow deployers to integrate with the metering system directly or by replacing components.
|
||||||
|
* Data may be collected by monitoring notifications sent from existing services or by polling the infrastructure.
|
||||||
|
* Allow deployers to configure the type of data collected to meet their operating requirements.
|
||||||
|
* The data collected by the metering system is made visible to some users through a REST API.
|
||||||
|
* The metering messages are signed and non repudiable (http://en.wikipedia.org/wiki/Non-repudiation)
|
||||||
|
|
||||||
|
This documentation has for objective to give you some clues on how to contribute code to ceilometer.
|
||||||
|
|
||||||
|
Table of content
|
||||||
|
================
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
initial_setup
|
||||||
|
agent/writing_plugin_agent
|
||||||
|
|
||||||
|
Indices and tables
|
||||||
|
==================
|
||||||
|
|
||||||
|
* :ref:`genindex`
|
||||||
|
* :ref:`modindex`
|
||||||
|
* :ref:`search`
|
44
doc/dev/initial_setup.rst
Normal file
44
doc/dev/initial_setup.rst
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
..
|
||||||
|
Copyright 2012 Nicolas Barcet for Canonical
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
not use this file except in compliance with the License. You may obtain
|
||||||
|
a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
License for the specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
|
||||||
|
Initial reading
|
||||||
|
===============
|
||||||
|
|
||||||
|
If you are not yet familiar with ceilometer's architecture, it would be
|
||||||
|
advisable that you start by reading the blueprint:
|
||||||
|
http://wiki.openstack.org/EfficientMetering
|
||||||
|
and more specifically the architecture which has been agreed on:
|
||||||
|
http://wiki.openstack.org/EfficientMetering/ArchitectureProposalV1
|
||||||
|
|
||||||
|
In order to contribute to the ceilometer project, you will also need to:
|
||||||
|
|
||||||
|
1. Have signed openstack's contributor's agreement
|
||||||
|
http://wiki.openstack.org/CLA
|
||||||
|
|
||||||
|
2. Be familiar with git and the OpenStack gerrit review process
|
||||||
|
http://wiki.openstack.org/GerritWorkflow
|
||||||
|
|
||||||
|
Setting up the project
|
||||||
|
======================
|
||||||
|
|
||||||
|
1. The first thing you will need to do is to clone the ceilometer project on your local machine:
|
||||||
|
git clone https://github.com/stackforge/ceilometer.git
|
||||||
|
|
||||||
|
2. Once this is done, you need to setup the review process:
|
||||||
|
git remote add gerrit ssh://<username>@review.stackforge.org:29418/stackforge/ceilometer.git
|
||||||
|
|
||||||
|
3. Create a topic branch and switch to it
|
||||||
|
git checkout -b TOPIC-BRANCH
|
||||||
|
|
Loading…
Reference in New Issue
Block a user