《Openstack ceilometer监控项扩展》( http://eccp.csdb.cn/blog/?p=352 )主要介绍了对虚拟机监控项扩展, 比較简单。怎样在ceilometer框架基础上,添加对宿主机、服务等的监控?本文以宿主机监控为例,具体介绍扩展方法。

首先,整体介绍Ceilometer採集监控数据到持久化存储的流程,在compute节点上通过pollster的轮询机制获取宿主机的各监控数据,通过publisher调用rpc将监控数据发送到消息队列。collector端依据约定的topic接收对应管道发送的数据。并调用storage接口 进行持久化存储,详细流程例如以下图所看到的。

其次,在该框架下怎样扩展新的监控模块,顺其自然的想法即依次改动以上模块,其重点是配置文件的设置。须要定义发送端和接收端的topic、secrete和method才干将数据顺利发送到collector端进行存储。下面具体介绍各模块的改动方法。

一、compute数据採集pollster模块

该模块主要负责数据的採集,採集宿主机CPU、内存、网络等信息,封装成自己定义数据格式后通过publisher发送到消息队列,该部分与ceilometer监控项扩展相似。

1、在ceilometer/ceilometer/compute/plugin.py中定义宿主机获取数据的基类。

class ServerPollster(plugin.PollsterBase):
@abc.abstractmethod
def get_samples(self, manager, cache, instances):

2、在ceilometer/ceilometer/compute下新建server_pollsters包。在该包下新建server_cpu.py、server_mem.py等。继承ServerPollster类实现get_samples方法,将获取的数据封装成定义的数据格式返回就可以。可參考虚拟机採集数据架构。


3、同监控项的扩展,在ceilometer/setup.cfg中添加监控项pollster的配置。最后全部改动完毕后。又一次安装ceilometer。

二、发送数据publisher模块

1、改动ceilometer/pipeline.yaml配置文件,配置发送和接收数据的方式。

-
name: server_pipeline
interval: 60
counters:
- "server.cpu"
- "server.mem"
transformers:
publishers:
- rpc://? target=record_server_data&meter_type=server

当中,name为pipeline的名字;interval为轮询的时间间隔;counters为该pipeline的pollster名字;transformers若发送的数据在进行publisher之前须要进一步处理,可设置transformers进行转换。publishers指定发送数据到collector的方式,target指定collector端的接收方。依据meter_type获取rpc的topic、secret和method。


同一时候,须要设置ceilometer/ceilometer.conf文件,设置server的topic、secret、method信息。详细配置例如以下:

[publisher_rpc]
server_topic=server
server_secret=True
server_method=record_server_data

2、因为添加了新的topic发送通道。所以须要对ceilometer/ceilometer/publisher/rpc.py做对应的改动。

首先,须要改动初始化函数,读取pipeline和ceilometer配置文件信息。

其次,改动publish_counters函数,因为pipeline文件会对全部的counters每隔10分钟轮询一次。ceilometer默认採用topic为metering。其数据封装格式同样。但因为新增不同监控模块的数据封装格式不同。所以须要分开处理,10分钟轮询时仅仅对counter类型为sample的数据进行publish。详细例如以下:

if self.meter_type == 'metering':
meters = [
meter_message_from_counter_beta(
counter,
self.topic_secret[self.meter_type],
source)
for counter in counters if type(counter) == sample.Sample
]
else:
meters = [
meter_message_from_counter_beta(
counter,
self.topic_secret[self.meter_type],
source)
for counter in counters
]
topic = self.meter_type

三、接收数据collector模块

1、ceilometer/ceilometer/collector/service.py文件initialize_service_hook中定义worker用于接收rpc发送过来的数据。详细配置例如以下:

for k, v in cfg.CONF.publisher_rpc.iteritems():
if k.endswith('topic'):
self.conn.create_worker(
v,
rpc_dispatcher.RpcDispatcher([self]),
'ceilometer.collector.' + v,
)

2、定义对应的target用于接收採集的数据,例如以下所看到的:

def record_server_data(self, context, data):
for dispatcher in self.dispatchers:
dispatcher.record_data(context, data, 'server')

当中。最后一个參数指定本次发送过来的topic类型。在调用dispatch.record_data方法时。用于调用对应的存储数据的方法,进而使得数据持久化到不同的数据库表中。


3、dispatch也是在原基础上做了对应的调整。该调整依据当前数据接收的topic,调用不同的方法。进行数据库的存储,详细例如以下:

def record_data(self, context, data, meter_type):
if not isinstance(data, list):
data = [data]
for meter in data:
if self.secret_method[meter_type] and
publisher_rpc.verify_signature(meter,
self.secret_method[meter_type][0]):
try:
if meter.get('timestamp'):
meter['timestamp'] =
self.time_to_date(meter['timestamp'])
method = getattr(self.storage_conn.__class__,
self.secret_method[meter_type][1])
method(self.storage_conn, meter)
except Exception as err:
LOG.error('Failed to record metering data: %s', err)
LOG.exception(err)
else:
LOG.warning(
'message signature invalid, discarding message: %r',
meter)

四、持久化存储模块

1、因为新增宿主机数据模块的监測,需增一张数据库表,所以storage模块也需做对应的改动。

首先,须要改动ceilometer/ceilometer/storage/base.py文件,添加接口:

@abc.abstractmethod
def record_server_data(self, data):

2、在ceilometer/ceilometer/storage/impl_mongodb.py的Connection类中实如今接口。

3、设计相应的数据库表结构,在ceilometer/ceilometer/storage/sqlalchemy/models.py中设置model相应的Server类。


4、在ceilometer/ceilometer/storage/sqlalchemy/migrate_repo/versions/001_add_meter_table.py中定义相应的表。

以上配置完毕后,source隔离环境又一次安装ceilometer,重新启动服务。就可以在mongodb数据库中查看到新增server表。表中存储相应counter的数据。

<转>Openstack ceilometer 宿主机监控模块扩展的更多相关文章

  1. openStack使用宿主机监控

    10个vm 平稳运行 top 数值

  2. Openstack Ceilometer监控项扩展

    Openstack ceilometer主要用于监控虚拟机.服务(glance.image.network等)和事件.虚拟机的监控项主要包括CPU.磁盘.网络.instance.本文在现有监控项的基础 ...

  3. <转>Openstack Ceilometer监控项扩展

    Openstack ceilometer主要用于监控虚拟机.服务(glance.image.network等)和事件.虚拟机的监控项主要包含CPU.磁盘.网络.instance.本文在现有监控项的基础 ...

  4. 通过桥接虚拟网卡使VMWare和宿主机实现双向通讯

    0.为什么选择虚拟网卡和桥接模式 首先虚拟机网络设置为NAT,虚拟机实现上网是很方便的,但是宿主机访问虚拟机就比较麻烦了(需要单独配置端口转发),桥接就能很好的解决这个问题,桥接模式会把虚拟机当做宿主 ...

  5. 在Linux客户机与Windows宿主机之间建立共享(VitrualBox)

    VirtualBox中,如果客户机和宿主机都是Windows的话,共享相对是比较方便的.一般是通过\\vboxsvr\shared 这样的路径访问即可. 但是如果客户机是Linux的话,就略微麻烦一点 ...

  6. 宿主机远程桌面连接vmware中的虚拟机

    参考了:http://jingyan.baidu.com/article/3052f5a1e8c56397f21f8674.html   感谢~ 宿主机安装了vmware,vmware中安装虚拟机,怎 ...

  7. SecureCRT连接VirtualBox下的ubuntu以及NMP的搭建与通过宿主机访问该NGINX服务器过程

    一直使用wamp作为开发环境,只是工作中时常会遇到在wamp下没问题但是提交到服务器生产环境会出现一些意想不到的情况,由此萌生了在本机搭建LNMP环境的想法,我个人不知道其他人的虚拟机搭建服务器环境是 ...

  8. 云平台 为什么推荐使用小VM 而不是大VM独占宿主机的方式部署游戏服?

    近期公司X游戏项目,提了一个游戏VM资源的需求,是 64GB RAM + 30Core CPU 的VM规格,而一个VM部署10个游戏服.而我们云平台推荐的VM规格为 4 Core CPU + 4GB ...

  9. Linux:宿主机通过桥接方式连接的VMware内部Linux14.04虚拟机(静态IP)实现上网方案

    首先,我们要弄清楚三种常见的连接方式中的桥接方式的网络结构: .bridged(桥接模式) 在这种模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机,它可以访问网内任何一台机器.在桥 ...

随机推荐

  1. phpMyAdmin 高级功能尚未完全设置,部分功能未激活(转载)

    phpMyAdmin 高级功能尚未完全设置,部分功能未激活.请点击这里查看原因. 第一步: 使用Mysql管理员帐号通过phpmyadmin登陆,然后点击“导入”,然后点击“浏览”按钮,找到phpmy ...

  2. 洛谷1387 二维dp 不是特别简略的题解 智商题

    洛谷1387 dp题目,刚开始写的时候使用了前缀和加搜索,复杂度大概在O(n ^ 3)级别,感觉这么写还是比较对得起普及/提高-的难度的..后来看了题解区各位大神的题解,开始一脸mb,之后备受启发. ...

  3. java properties类读取配置文件

    1.JAVA Properties类,在java.util包里,具体类是java.util.properties.Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值 ...

  4. HDU 4314 Contest 2

    可以知道,逃出的人中,最后一个应当是A+B最长的,这是很容易发现的.那么,最选逃出去的必定是A+B最短的.这符合最优. 于是,可以把各小矮人按A+B的和由大到小排序.定义DP[i][j]为i个人中逃出 ...

  5. Raspberry PI 系列 —— 裸机点亮LED灯

    Raspberry PI 系列 -- 裸机点亮LED灯 背景 近期刚买了Raspberry PI B+,配置执行了官方提供的Raspbian系统,折腾了一周Linux系统,感觉没啥意思,于是就试着想了 ...

  6. Android DatePickerDialog样式不一致的问题

    三星和华为的平板上,DatePickerDialog的显示样式不一致.三星的仅仅显示月日年选择框,而华为的平板上另外还显示了日历表.代码同样. 可能是系统控件做了部分改动,后来你发现是能够设置的: D ...

  7. ICMP 隧道——将流量封装进 IMCP 的 ping 数据包中,旨在利用 ping 穿透防火墙的检测

    利用 ICMP 隧道穿透防火墙 转自:http://xiaix.me/li-yong-icmp-sui-dao-chuan-tou-fang-huo-qiang/ 以前穿透防火墙总是使用 SSH 隧道 ...

  8. mount ntfs 失败解决办法

    在双系统中,ntfs可能会应为windows的缓存而挂载失败.可用下面命令修复. Use ntfsfix in the terminal, even if you can't access Windo ...

  9. css3 字体、2D转换、3D转换

    学习篇之CSS3 字体.2D转换.3D转换 一.字体 @font-face 将字体文件存放到 web 服务器上,通过CSS3 @font-face规则中定义,它会在需要时被自动下载到用户的计算机上. ...

  10. (转载)PopuWindow和软键盘共存时的设置

    PopuWindow和软键盘共存时的设置 收藏 artshell 发表于 2年前 阅读 1499 收藏 10 点赞 2 评论 0 腾讯云上实验室 1小时搭建人工智能应用 让技术更容易入门>> ...