Declarative snmp metric pollster
blueprint declarative-snmp-metrics Change-Id: I47305a9de5c70c7d31030bd919e31ba71d335440
This commit is contained in:
parent
540cc9a43d
commit
59aafc0c4a
198
specs/liberty/declarative-snmp-metrics.rst
Normal file
198
specs/liberty/declarative-snmp-metrics.rst
Normal file
@ -0,0 +1,198 @@
|
|||||||
|
..
|
||||||
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||||
|
License.
|
||||||
|
|
||||||
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||||
|
|
||||||
|
==========================================
|
||||||
|
Declarative snmp metrics
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
https://blueprints.launchpad.net/ceilometer/+spec/declarative-snmp-metrics
|
||||||
|
|
||||||
|
This blueprint wants to add a mechanism so we can add new snmp metrics in a
|
||||||
|
declarative way instead of writing new source code for new pollsters.
|
||||||
|
|
||||||
|
|
||||||
|
Problem description
|
||||||
|
===================
|
||||||
|
|
||||||
|
Currently, we use a generic snmp hardware inspector and a python dict which
|
||||||
|
defines the mapping between snmp oid/operations and the metrics value the
|
||||||
|
caller wants(See the following link for the description of that mapping).
|
||||||
|
|
||||||
|
https://github.com/openstack/ceilometer/blob/stable/kilo/ceilometer/hardware/inspector/snmp.py#L112
|
||||||
|
|
||||||
|
On top of that generic snmp inspector, we still have separate hardware
|
||||||
|
pollsters doing things like setting multiple fields in the Sample object.
|
||||||
|
It's ok to add a dozen of new metrics. But if want to add hundreds of new snmp
|
||||||
|
metrics, we need to do it in a declarative way, instead of writing new
|
||||||
|
pollster code for every new snmp metrics added.
|
||||||
|
|
||||||
|
|
||||||
|
Proposed change
|
||||||
|
===============
|
||||||
|
|
||||||
|
While keeping the current snmp related hardware.* pollsters intact for
|
||||||
|
backward compatibility, we'll add a new generic snmp pollster, which
|
||||||
|
can return different types of snmp related metrics based on user request.
|
||||||
|
|
||||||
|
This generic snmp pollster will load a definition from a yaml definition
|
||||||
|
file which defines the parameters used to call into the generic snmp
|
||||||
|
inspector, and also other fields in the final Sample object the pollster
|
||||||
|
returns, like name/unit/type. However, the resource_id/user_id/project_id
|
||||||
|
will still be read from the resources returned by the discover just
|
||||||
|
like what we do today.
|
||||||
|
|
||||||
|
|
||||||
|
The yaml definition would be something like the followings::
|
||||||
|
|
||||||
|
---
|
||||||
|
- counter_name: hardware.cpu.load.15min
|
||||||
|
unit: process
|
||||||
|
type: gauge
|
||||||
|
snmp_inspector:
|
||||||
|
matching_type: type_exact,
|
||||||
|
oid: "1.3.6.1.4.1.2021.10.1.3.1",
|
||||||
|
type: float
|
||||||
|
metadata: { }
|
||||||
|
post_op:
|
||||||
|
|
||||||
|
- counter_name: hardware.network.incoming.bytes
|
||||||
|
unit: B
|
||||||
|
type: cumulative
|
||||||
|
snmp_inspector:
|
||||||
|
matching_type: type_prefix
|
||||||
|
metric_oid: "1.3.6.1.2.1.2.2.1.10"
|
||||||
|
metadata: {
|
||||||
|
name: {
|
||||||
|
oid: "1.3.6.1.2.1.2.2.1.2",
|
||||||
|
type: "str",
|
||||||
|
},
|
||||||
|
speed: {
|
||||||
|
oid: "1.3.6.1.2.1.2.2.1.5",
|
||||||
|
type: "lambda x: int(x) / 8",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
post_op: "_post_op_net"
|
||||||
|
|
||||||
|
Please see the following link for the detailed explanation of the
|
||||||
|
snmp_inspector dict in the definition:
|
||||||
|
|
||||||
|
https://github.com/openstack/ceilometer/blob/stable/kilo/ceilometer/hardware/inspector/snmp.py#L112
|
||||||
|
|
||||||
|
When adding new snmp metrics, we only needs to add the new definitions into
|
||||||
|
the yaml definition. No need to writing new code.
|
||||||
|
|
||||||
|
Because the new generic snmp pollster could return multiple different types
|
||||||
|
of meters, it would bring the following changes to the current polling
|
||||||
|
agent implementation:
|
||||||
|
|
||||||
|
1. Currently, because of the mapping of meter pollster plugin one meter,
|
||||||
|
when deciding whether a pollster is needed for a given pipeline, we
|
||||||
|
use the pollster plugin's entry point name. This will be changed. We'll
|
||||||
|
add a new helper function which could return all the meters that pollster
|
||||||
|
could return, and use that helper function in the above process to decide
|
||||||
|
whether a pollster is needed for a given pipeline.
|
||||||
|
|
||||||
|
2. When calling the pollster plugin to get the samples, we'll pass
|
||||||
|
the pipeline definition as a new parameter to get_samples() call. So
|
||||||
|
instead of return all the samples, the pollster can only return what
|
||||||
|
the pipeline source asks for.
|
||||||
|
|
||||||
|
Alternatives
|
||||||
|
------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Data model impact
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
REST API impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Security impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Pipeline impact
|
||||||
|
---------------
|
||||||
|
|
||||||
|
No changes for the admin in how to configure the pipeline yaml file.
|
||||||
|
|
||||||
|
Other end user impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Performance/Scalability Impacts
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Other deployer impact
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
Need to deploy a new yaml definition file on the system running polling agent.
|
||||||
|
|
||||||
|
Developer impact
|
||||||
|
----------------
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
Assignee(s)
|
||||||
|
-----------
|
||||||
|
|
||||||
|
|
||||||
|
Primary assignee:
|
||||||
|
<lianhao-lu>
|
||||||
|
|
||||||
|
Ongoing maintainer:
|
||||||
|
<lianhao-lu>
|
||||||
|
|
||||||
|
Work Items
|
||||||
|
----------
|
||||||
|
|
||||||
|
* enhance the pipeline to support new source definition
|
||||||
|
* implement the generic snmp pollster and its yaml definition file
|
||||||
|
|
||||||
|
|
||||||
|
Future lifecycle
|
||||||
|
================
|
||||||
|
|
||||||
|
To be maintained by <lianhao-lu>
|
||||||
|
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
============
|
||||||
|
|
||||||
|
N/A
|
||||||
|
|
||||||
|
|
||||||
|
Testing
|
||||||
|
=======
|
||||||
|
|
||||||
|
The functionality test should be covered in the 3rd party CI of
|
||||||
|
Intel Hradware-Meters CI.
|
||||||
|
|
||||||
|
|
||||||
|
Documentation Impact
|
||||||
|
====================
|
||||||
|
|
||||||
|
Need to update the openstack-manual admin manual about the change to the pipeline
|
||||||
|
definition.
|
||||||
|
|
||||||
|
|
||||||
|
References
|
||||||
|
==========
|
||||||
|
|
||||||
|
N/A
|
Loading…
Reference in New Issue
Block a user