最近看了点Gnocchi方面的知识,这里拿出来和大家分享下,交流下,同时如果有不对的地方也请大家多多指正。
Ceilometer + Gnocchi:
Gnocchi在Openstack中作为Ceilometer的一个存储模块,它将Ceilometer发送过来的sample进行了分层,分类,聚合,储存。这里来张官方的构架图看看。
这里可以清楚的看到Ceilometer的Collector 将从数据总线上收集过来的event和metering数据进行了分别储存。Gnocchi则负责metering数据的存储。
Gnocchi 概念
为什么要有Gnocchi?
这里可以参考JD大神的博客
https://julien.danjou.info/blog/2014/openstack-ceilometer-the-gnocchi-experiment
Gnocchi 由什么组成,其功能是什么?
Gnocchi是由gnocchi api,gnocchi metric, gnocchi statsd三个组件组成。
gnocchi api: 如你所知,暴露出来接受外部Ceilometer或者命令行来调用。
gnocchi metric:这个比较有意思,它可以将gnocchi 暂存 在file中sample数据根据定义的规则进行聚合,并储存规划到其他file中(gnocchi默认用file backend来储存聚合的数据,当然swift和ceph也可以用)
gnocchi statsd: 这个是个网络进程来监听你上通过UDP,TCP协议传输过来的数据。也是暴露给外端进行使用的一个功能。
想要知道官方怎么说的,可以参照这个
http://docs.openstack.org/developer/gnocchi/architecture.html
Gnocchi数据存储的框架是什么样的呢?
(此文介绍默认的file存储方式)
Gnocchi 将sample数据也进行了分类储存,分别由index driver和storage driver负责。
- index driver: 主要负责 resource和其对应的metrics的存储。
- storage driver : 主要负责 metric和其对应data 值的存储。
resource: 指的是环境中创建出来的一些虚拟资源,比如一个instance,network interface,disk 等。
metric:指的是对一个虚拟资源的度量衡,一个虚拟资源一般会用多个度量衡来描述,比如一个instance可以有cpu个数,cpu利用率之类的度量衡,可以参考ceilometer pipeline的配置文档来了解各个度量衡的意思和用处,这里就不多说了。
data:每个度量衡的值,可以是一个值也可以是一批值。以timestamp:value形式存在。
再来张官方的图看看
这张图中可以出gnocchi rest api调用不同的driver将数据分类储存在了SQL DB和Swift中(这里可以配置成file或ceph后端)。
Gnocchi 是将data聚合后进行储存的,那么遵循的聚合规律是什么,该如何定义这些规律也就成了问题。
Gnocchi 的聚合方式是由archive policy定义的。现在看看archive policy长什么样吧。
HTTP/1.1 200 OK
Content-Length: 598
Content-Type: application/json; charset=UTF-8
{
"archive_policy": {
"aggregation_methods": [
"std",
"sum",
"mean",
"max",
"median",
"count",
"min",
"95pct"
],
"back_window": 0,
"definition": [
{
"granularity": "0:00:01",
"points": 3600,
"timespan": "1:00:00"
},
{
"granularity": "0:01:00",
"points": 10080,
"timespan": "7 days, 0:00:00"
},
{
"granularity": "1:00:00",
"points": 8760,
"timespan": "365 days, 0:00:00"
}
],
"name": "high"
},
"created_by_project_id": "46476b8c-04e8-4276-89bf-0e8d7f4c4758",
"created_by_user_id": "f0396120-5c47-4583-a45e-f5387a00425f",
"id": "399239ea-61e5-4eee-9343-ab5039c432b4",
"name": null,