《转》ceilometer的数据采集机制入门

问题导读1.ceilometer负责什么事情?2.ceilometer 有哪些概念?3.ceilometer 如何采集hardware?附上openstack 官网API ceilometer主要负责监控数据的采集,采集的项目包括虚拟机的性能数据,neutron-l3-router使用的网络带宽,glance&cinder&swift等租户使用信息,甚至是通过snmp采集物理机的信息,以及采集支持opendaylight的网络设备信息。基本概念ceilometer 主要有下面几个概念:alarm 是ceilometer的告警机制,你可以通过阈值或者组合条件告警,并设置告警时触发的action采集机制ceilometer的各个服务中,与采集相关的服务是ceilometer-collector、ceilometer-agent-central、ceilometer-agent-compute、ceilometer-agent-notification。我们可以通过下图了解一下他们之间的关系:

agent-*服务负责采集信息,采集的信息可以通过三种方式publish出来,包括RPC、UDP、File。RPC是将采集的信息以payload方式发布到消息队列,,collector服务通过监听对应的queue来收集这些信息,并保存到存储介质中;UDP通过socket创建一个UDP数据通道,然后collector通过bind这个socket来接收数据,并保存到存储介质中;File方式比较直接,就是将采集的数据以filelog的方式写入log文件中。至于使用哪种方式publish,那么就要看你的pipline文件是如何配置的了,具体可以查看/etc/ceilometer/pipline.yaml中的publishers配置。agent-*三个采集组件分别负责采集不同类型的信息,agent-notification负责收集各个组件推送到oslo-messaging的消息,oslo-messaging是openstack整体的消息队列框架,所有组件的消息队列都使用这个组件;agent-compute只负责收集虚拟机的CPU内存IO等信息,所以他需要安装在Hypervisor机器上;agent-central是通过各个组件API方式收集有用的信息;agent-notification只需监听AMQP中的queue即可收到信息,而agent-compute和agent-central都需要定期Poll轮询收集信息。看下图来了解一下:

信息通过agent-*采集并由collector汇总处理,最终需要持久化到存储介质中,ceilometer目前支持的存储包括mysql、DB2、HBase、mongoDB,从支持的数据库来看,监控数据持久化的压力还是相当大的。

采集项agent-*组件在启动时候,通过stevedore的插件机制来加载采集项,包括每个采集项对应的执行程序。stevedore的插件配置是利用了setuptools的entry_points,所以我们可以通过查看entry_points的配置信息,来确定有哪些采集项。如果你的程序打包完毕并发布到了python的搜索路径中,那么你需要查看ceilometer的egg文件来查看,或者你可以下载源码查看setup.cf文件,相关信息如下:

[entry_points]ceilometer.notification = instance = ceilometer.compute.notifications.instance:Instance instance_flavor = ceilometer.compute.notifications.instance:InstanceFlavor memory = ceilometer.compute.notifications.instance:Memory … …ceilometer.poll.compute = disk.read.requests = ceilometer.compute.pollsters.disk:ReadRequestsPollster cpu = ceilometer.compute.pollsters.cpu:CPUPollster … …ceilometer.poll.central = image = ceilometer.image.glance:ImagePollster storage.containers.objects = ceilometer.objectstore.swift:ContainersObjectsPollster … …

ceilometer.notification 对应的是agent-notification组件,ceilometer.poll.compute对应的是agent-compute组件,ceilometer.poll.central对应的是agent-central组件。采集neutron l3 router 的bandwidth与ceilometer其他采集方式不同的是,bandwidth的采集是通过neutron-meter-agent收集,然后push到oslo-messaging,ceilometer-agent-notification通过监听消息队列来收取bandwidth信息,可以看一些官方的wiki(https://wiki.openstack.org/wiki/Neutron/Metering/Bandwidth)。按照wiki上的描述,设置好rule,ceilometer就可以收集bandwidth信息了,router上的流量计算是利用了iptables的特性,iptables本身可以用于做流量统计,这里不清楚的去Google一下即可。比如我们使用neutron-meter 设定了这样一组规则:

$ neutron meter-label-rule-list+————————————–+———-+———–+——————+| id | excluded | direction | remote_ip_prefix |+————————————–+———-+———–+——————+| d2f28556-7369-42a7-9a92-9f2a12e929ce | False | egress | 66.66.66.0/24 || e6a3542d-596b-415a-ab96-90df211c027b | False | ingress | 66.66.66.0/24 |+————————————–+———-+———–+——————+

那么对应此规则建立的iptables规则如下:

陪我们走过一段别人无法替代的记忆。在那里,

《转》ceilometer的数据采集机制入门

相关文章:

你感兴趣的文章:

标签云: