ceilometer-监控项扩展

简介


  • 在compute节点通过polister轮询获取instance的监控数据,并通过publisher调用了RPC发送监控数据到消息队列;
  • collect从消息队列中匹配接受数据,并调用storage接口进行存储;

扩展

添加一个ceilometer-agent-compute监控项mem.max

/usr/lib/python2.7/site-packages/ceilometer-2014.2-py2.7.egg-info/entry_points.txt

1
2
3
[ceilometer.poll.compute]

mem.max = ceilometer.compute.pollsters.mem:MaxMemPollster

ceilometer/compute/pollsters/mem.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import ceilometer
from ceilometer.compute import plugin
from ceilometer.compute.pollsters import util
from ceilometer.compute.virt import inspector as virt_inspector
from ceilometer.openstack.common.gettextutils import _
from ceilometer.openstack.common import log
from ceilometer import sample

LOG = log.getLogger(name)

class MaxMemPollster(plugin.ComputePollster):
def get_samples(self, manager, cache, resources):
for instance in resources:
LOG.debug(_(‘checking instance %s’), instance.id)
instance_name = util.instance_name(instance)
try:
mem_info = manager.inspector.inspect_mems(instance_name)
LOG.debug(_(“mem.max: %(instance)s %(max)d”),
{‘instance’: instance.dict,
‘max’: mem_info.max})
yield util.make_sample_from_instance(
instance,
name=‘mem.max’,
type=sample.TYPE_GAUGE,
unit=‘MB’,
volume=mem_info.max,
)
except virt_inspector.InstanceNotFoundException as err:
# Instance was deleted while getting samples. Ignore it.
LOG.debug((‘Exception while getting samples %s’), err)
except ceilometer.NotImplementedError:
# Selected inspector does not implement this pollster.
LOG.debug((‘Obtaining mem is not implemented for %s’
), manager.inspector.class.name)
except Exception as err:
LOG.exception(_(‘could not get mem for %(id)s: %(e)s’),
{‘id’: instance.id, ‘e’: err})

ceilometer/compute/virt/inspector.py

1
2
3
4
5
class Inspector(object):

def inspect_mems(self,instance,duration=None):
raise ceilometer.NotImplementedError
MaxMem = collections.namedtuple(‘MaxMem’, [‘max’])

ceilometer/compute/virt/libvirt/inspector.py

1
2
3
4
5
class LibvirtInspector(virt_inspector.Inspector):
def inspect_mems(self, instance_name):
domain = self._lookup_by_name(instance_name)
maxMem = domain.maxMemory()
return virt_inspector.MaxMem(max=maxMem,)

重启服务即有新的收集数据了

1
ceilometer sample-list -m maxMem -q resource_id=9af11e66-30ef-42cf-8f48-bc4bfb03cc03