Ceilometer原理及介绍


本博客所有文章采用的授权方式为 自由转载-非商用-非衍生-保持署名 ,转载请务必注明出处,谢谢。

声明:
本博客欢迎转发,但请注明出处,保留原作者信息
博客地址:孟阿龙的博客
所有内容为本人学习、研究、总结。如有雷同,实属荣幸


注: 本文基于当前Openstack的Q版本进行分析

1. 背景

ceilometer项目是openstack中用来做计量计费功能的一个组件,后来又逐步发展增加了部分监控采集、告警的功能。由于种种原因,ceilometer项目在Openstack中已经处于一种没落的状态,基本没有什么新的特性开发了,原本该项目的PTL也另起炉灶开始在做Gnocchi项目(ceilometer的后端存储系统)。虽然该项目已经没有前几年活跃,但是还是在很多公有云场景中有比较多的应用,而生产环境中,可能很多公司还用的是M、N版本。

2. 基本概念

  • meter:
    针对一个资源的某些测量值,比如,一个虚拟机可以有多个meters:虚拟机在一段时间内cpu的使用时间、磁盘的请求次数等。在ceilometer中针对这些meter定义了三种类型:
    • Cumulative(累积型): 随着时间会不断增长(eg. disk I/O)
    • Gauge(测量型):离散型的值(eg. floating IPs)和浮动的值(eg. swift对象的数量)
    • Delta(变化量):一段时间内某个采集值的变化量(eg. 带宽变化量)
  • sample:
    针对一个特定的meter的具体数据结构
  • event:
    在某个特定时间,发生的一个动作,比如:19:09:08 创建了一个虚拟机
  • resource:
    资源,比如instance(虚拟机)、disk(磁盘)都是资源

3. High-Level 架构

ceilo-arch.png

如上,是当前Ceilometer的一个全局概览逻辑图.
以上ceilometer的每一个服务都是基于可横向扩展来设计的。实际生产环境中,可以根据系统的负载,决定来增加实例或者增加单个实例的worker数。当前Ceilometer主要提供两个核心服务:

  1. polling agent:轮询agent,是一个deamon服务,通过周期性调用Openstack内部服务的接口或者一些外部接口获取指定resource的meter数据
  2. notification agent:一个deamon服务,通过监听消息队列获取相关数据,将其转换为event和sample,并根据pipeline中定义的方法将数据发送出去
    这和以前的版本相比,简化了不少,以前ceilometer包含了(polling-agent,notification-agent,collector,ceilometer-api)
    通过Ceilometer收集到的数据可以被发送到不同的后端。Gnocchi是用来提供对捕获到的时间序列的测量数据的存储和查询。Gnocchi未来的趋势是取代当前现存的metering数据存储接口(当前存储在mongodb、mysql等存储后端)。Aodh是一个告警服务,在满足用户设置的告警条件时,可以发送告警信息,其后端可以对接不同的数据库。Panko是用来获取系统中的各类事件并将其存储到对应后端数据库。

4. 数据获取的过程

4.1 数据采集

1-agents.png

上图展示了ceilometer-agent怎样从不同的数据源获取到数据
Ceilometer共有两种方法来收集数据:

  1. Notification agent,从notification bus上获取消息,将其转换为ceilometer的sample或者event数据
  2. Polling agent,周期性调用系统中的一些API或者外部工具来获取数据。轮询服务可能会对API服务带来较大的影响,因此对应的API服务需要针对这种轮询机制做一些优化。
    以上第一种方法是ceilometer-agent-notification提供的,他可以监控消息队列上的信息。第二种方法是通过polling-agent实现,通过配置可以实现轮询本地虚拟化层或者远程API来获取数据。

4.2 notification agent监听数据

2-1-collection-notification.png

notification-agent可以消费来自不同服务上报的消息数据。
这个系统的核心是notification-agent这个deamon服务,他可以监听openstack组件(比如nova、glance/cinder/neutron/等)发送到消息队列上的数据,以及ceilometer内部发送过来数据

notification-agent加载ceilometer.notification这个namespace下的一个或者多个插件.每个插件都可以监听任何topic,默认的都会监听notifications.info, notifications.sample,notifications.error.监听进程从配置的topic抓取下来消息之后,将其分发到合适的插件处理成event和sample。

基于Sample的插件提供了一个方法来获取他们所关注的事件类型,然后据此调用对应的回调方法来处理消息。注册的毁掉方法通过notification的pipeline来配置生效与否。通过插件配置的事件类型对新进来的消息进行过滤,因此回调接口最终只会收到他们所关心的数据。

4.3 Polling Agent轮询获取数据

2-2-collection-poll.png

Polling-agent通过主动调用service接口查询来获取数据。

部署在计算节点上的polling-agent用来轮询计算资源的数据(这样agent可以更有效的和本地虚拟化层交互),也被称为compute-agent。
通过服务API轮询查询非计算资源相关数据的agent部署在控制节点上,也被称为central-agent。在all-in-one环境中,一个agent也支持同时提供以上两种角色。
相反的,也可以通过部署多个agent实例来分担系统负载。Polling-agent进程可以加载ceilometer.poll.compute,ceilometer.poll.central,ceilometer.poll.ipmi这三个namespace中配置的插件。

4.4 数据处理

4.4.1 pipeline manager

3-Pipeline.png

以上组件实现ceiloemter的pipeline。
ceilometer提供抓取数据的agent,控制数据、通过多重pipeline将数据发送到多种后端的能力。这种功能通过notification-agent来实现。

4.4.2 数据发送

5-multi-publish.png

上图展示了一个sample数据怎样被发送到多个不同后端
当前处理过的数据可以被发送到8种不同的后端

  1. gnocchi, 发送samples/event数据到Gnocchi-api
  2. notifier, 发送数据到消息队列,最终可以被内部系统消费
  3. udp, 通过UDP包将数据发送出去
  4. http, 发送数据到REST接口
  5. file, 发送数据到指定的文件
  6. zaqar, 一个用于web和移动开发者的多租户云消息和通知服务
  7. https, 通过SSL加密的REST接口HTTP服务
  8. prometheus, 发送samples数据到 Prometheus Pushgateway

5. 存储/访问数据

Ceilometer是设计用来单纯的生产和序列化云数据。Ceilometer生产的数据可以被发送到通过pipeline-publishers中定义 的多重后端。推荐的方法是将数据发送到Gnocchi用于有效的时间序列存储以及资源生命周期的追踪。

参考:
https://docs.openstack.org/ceilometer/latest/contributor/architecture.html

以上我们可以看出,ceilometer关键的组件包含:ceilometer-agent-compute,ceilometer-agent-notification,插件采集数据这几个核心,后边会分别对其进行分析:

  1. ceilometer-compute-agent(已完成)
  2. 插件采集数据的原理和过程分析(已完成)
  3. ceilometer-agent-notification (待分析)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,596评论 18 139
  • Objectives 2012年Ceilometer创建的时候,目的只是为了提供基础设施为OpenStack项目收...
    黑加仑妞阅读 932评论 0 0
  • 第一章 OpenStack基础 OpenStack管理的资源及提供的服务OpenStack做为一个操作系统,...
    sgt_tiger阅读 12,863评论 4 72
  • 文/烨子 1 从上周四的晚上起,日子突然变得忙碌起来。岳母周四上午因为身体不适,被送到省中医院,诊断结果为脑梗塞,...
    烨子人生阅读 1,293评论 2 3
  • if ()else{} 三目:条件 ?条件成立 : 条件不成立 只有一个语句 if()语句 if(true) a...
    warmT_阅读 8,717评论 0 3