声明:以下内容是对Gnocchi官网:https://docs.openstack.org/developer/gnocchi/architecture.html
内容的大致翻译
Gnocchi包含了集中服务:一个HTTP REST API(参见:https://docs.openstack.org/developer/gnocchi/rest.html),一个可选的用于聚合统计信息的是守护进程,并且是一个异步处理的守护进程(叫做gnocchi-metricd)。数据可以通过HTTP REST API或者网络守护进程statsd daemon被接收到。 Gnocchi-metricd可以在后端对接收到的数据执行操作(例如统计计算,计量清零)。
HTTP REST API和异步处理守护进程都是无状态的,并且是可扩展的。额外的workers可以根据负载情况被添加。
包含了集中服务:一个HTTP REST API(参见:https://docs.openstack.org/developer/gnocchi/rest.html),一个可选的用于聚合统计信息的是守护进程,并且是一个异步处理的守护进程(叫做gnocchi-metricd)。数据可以通过HTTP REST API或者网络守护进程statsd daemon被接收到。 Gnocchi-metricd可以在后端对接收到的数据执行操作(例如统计计算,计量清零)。
HTTP REST API和异步处理守护进程都是无状态的,并且是可扩展的。额外的workers可以根据负载情况被添加。
Gnocchi使用三种不同的后端存储数据:一个用于存储新的即将到来的测量值(incoming driver),一个用于存储时间序列(storage driver),还有一个是用于检索数据(index driver)。
Incoming driver负责存储发送到监控项的新的measures。它默认是和storage driver是同一个driver。
Storage driver负责存储创建的监控项的measures。它接收时间戳timestamp和值,并且根据定义的归档策略来预先计算聚合值。
Indexer driver负责存储所有资源的索引,归档策略和监控项,以及它们的定义,类型和属性。Indexer driver也负连接资源和监控项。
使用三种不同的后端存储数据:一个用于存储新的即将到来的测量值(incoming driver),一个用于存储时间序列(storage driver),还有一个是用于检索数据(index driver)。
Incoming driver负责存储发送到监控项的新的measures。它默认是和storage driver是同一个driver。
Storage driver负责存储创建的监控项的measures。它接收时间戳timestamp和值,并且根据定义的归档策略来预先计算聚合值。
Indexer driver负责存储所有资源的索引,归档策略和监控项,以及它们的定义,类型和属性。Indexer driver也负连接资源和监控项。
Gnocchi目前支持不同的存储后端:
File(默认),Ceph(首选),OpenStack Swift,S3, Redis
这些后端是基于名叫Carbonara的中间件,该中间件是用来处理时间序列的操作,因为上述存储技术无法处理时间序列。
Carbonara对于后面上述的支持是比较好的,并且是易于扩展的。Ceph和Sift原本就是比文件driver更具有扩展性的。
根据你系统的大小,使用file driver并且存储你在磁盘上的数据一般各哦吟咏了。如果你需要扩展为数台服务器,你可以通过NFS来贡献数据。S3,Ceph和Swift drivers更容易扩展。Ceph提供了更好的一致性,因此推荐用Ceph。
目前支持不同的存储后端:
File(默认),Ceph(首选),OpenStack Swift,S3, Redis
这些后端是基于名叫Carbonara的中间件,该中间件是用来处理时间序列的操作,因为上述存储技术无法处理时间序列。
Carbonara对于后面上述的支持是比较好的,并且是易于扩展的。Ceph和Sift原本就是比文件driver更具有扩展性的。
根据你系统的大小,使用file driver并且存储你在磁盘上的数据一般各哦吟咏了。如果你需要扩展为数台服务器,你可以通过NFS来贡献数据。S3,Ceph和Swift drivers更容易扩展。Ceph提供了更好的一致性,因此推荐用Ceph。
gnocchi目前支持4种drivers。
PostgreSQL(首选)
MySQL(至少版本是5.6.4)
这些drivers提供了大多数相同的性能和特性,PostgreSQL具有更高的性能并且有一些额外的特性(例如 资源持续时长计算)。
目前支持4种drivers。
PostgreSQL(首选)
MySQL(至少版本是5.6.4)
这些drivers提供了大多数相同的性能和特性,PostgreSQL具有更高的性能并且有一些额外的特性(例如 资源持续时长计算)。
Gnocchi使用一个基于Carnonara的定制化文件格式。在Gnocchi中,一个时间序列是点的集合,在时间序列中的每一个点都有measure或者采样值sample。存储格式会被各种技术压缩,因此计算时间序列的大小在最坏情况下被下面的公式计算:
点的个数 * 8byte = 时间序列大小
点的各数可以被下面的公式确定
点的个数 = 持续时间 / 粒度
使用一个基于Carnonara的定制化文件格式。在Gnocchi中,一个时间序列是点的集合,在时间序列中的每一个点都有measure或者采样值sample。存储格式会被各种技术压缩,因此计算时间序列的大小在最坏情况下被下面的公式计算:
点的个数 * 8byte = 时间序列大小
点的各数可以被下面的公式确定
点的个数 = 持续时间 / 粒度
pip install gnocchi
根据系统的架构所需要的drivers和特性,安装时需要携带额外的参数
pip install gnocchi[postgresql,ceph,keystone]
着将会安装postgresql来支持indexer driver,Ceph支持存储,Keystone支持验证和授权。
下面时可用的变量列表:
keystone:
mysql:支持indexer
postgresql:支持indexer
swift:支持storage
s3:支持storage
ceph:支持storage
ceph_recommended_lib:支持Ceph >= 0.80的storage
ceph_alternative_lib:支持Ceph >= 10.1.0的storage
file:提供file driver支持
redis:提供storage支持
doc:文档构建支持
test:单元和功能性测试支持
为了从source安装Gnocchi,运行python标准的安装程序
pip install -e.
根据drivers和你想使用的特性,你需要安装额外的变量
pip install -e.[postgresql,ceph,ceph_recommended_lib]
根据系统的架构所需要的drivers和特性,安装时需要携带额外的参数
pip install gnocchi[postgresql,ceph,keystone]
着将会安装postgresql来支持indexer driver,Ceph支持存储,Keystone支持验证和授权。
下面时可用的变量列表:
keystone:
mysql:支持indexer
postgresql:支持indexer
swift:支持storage
s3:支持storage
ceph:支持storage
ceph_recommended_lib:支持Ceph >= 0.80的storage
ceph_alternative_lib:支持Ceph >= 10.1.0的storage
file:提供file driver支持
redis:提供storage支持
doc:文档构建支持
test:单元和功能性测试支持
为了从source安装Gnocchi,运行python标准的安装程序
pip install -e.
根据drivers和你想使用的特性,你需要安装额外的变量
pip install -e.[postgresql,ceph,ceph_recommended_lib]
ceph需要一个已经创建的Ceph 用户和一个pool。它们可以被一下的例子来创建
ceph osd pool create metrics 8 8
ceph auth get-or-create client.gnocchi mon "allow r" osd "allow rwx pool=metrics"
需要弄清这个命令的含义
Gnocchi收录了python中的一些特性(omap, async,操作上下文),但是需要python-rados >= 10.1.0【rados是用于控制集群的】。为了处理这种情况,Gnocchi使用cradox python库,使其和相同的API工作相同,但是只需要Ceph >=0.80.0
如果Ceph和python-rados 都>=10.1.0,cradox python库会编程可选的,但仍然推荐这样做。
需要一个已经创建的Ceph 用户和一个pool。它们可以被一下的例子来创建
ceph osd pool create metrics 8 8
ceph auth get-or-create client.gnocchi mon "allow r" osd "allow rwx pool=metrics"
需要弄清这个命令的含义
Gnocchi收录了python中的一些特性(omap, async,操作上下文),但是需要python-rados >= 10.1.0【rados是用于控制集群的】。为了处理这种情况,Gnocchi使用cradox python库,使其和相同的API工作相同,但是只需要Ceph >=0.80.0
如果Ceph和python-rados 都>=10.1.0,cradox python库会编程可选的,但仍然推荐这样做。
默认地,gnocchi在以下地方按照顺序寻找它的配置:
~/.gnocchi/gnocchi.conf
~/gnocchi.conf
/etc/gnocchi/gnocchi.conf
/etc/gnocchi.conf
~/gnocchi/gnocchi.conf.d
~/gnocchi.conf.d
/etc/gnocchi/gnocchi.conf.d
/etc/gnocchi.conf.d
如果源码中没有提供配置文件,它将在安装过程中创建。假如安装中没有配置文件,可以运行下面的命令来创建。
gnocchi-config-generator > /path/to/gnocchi.conf
可以通过编辑正确的文件来配置Gnocchi。配置文件是明确的,但是一些基本的选项你需要去改变和配置
选项名称
帮助
storage.driver
用于监控项的存储驱动storagedriver
indexer.url
你的indexer的url
storage.file_*
如果你使用了文件存储驱动,用于存储文件的配置选项
storage.swift_*
如果使用了swift的storagedriver.需要配置访问Swift
storage.ceph_*
如果你使用ceph的storagedriver.,需要配置访问ceph
storage.s3_*
如果你使用S3的storagedriver,需要配置访问S3
storage.redis_*
如果你使用redis作为storagedriver,你需要配置访问redis
gnocchi在以下地方按照顺序寻找它的配置:
~/.gnocchi/gnocchi.conf
~/gnocchi.conf
/etc/gnocchi/gnocchi.conf
/etc/gnocchi.conf
~/gnocchi/gnocchi.conf.d
~/gnocchi.conf.d
/etc/gnocchi/gnocchi.conf.d
/etc/gnocchi.conf.d
如果源码中没有提供配置文件,它将在安装过程中创建。假如安装中没有配置文件,可以运行下面的命令来创建。
gnocchi-config-generator > /path/to/gnocchi.conf
可以通过编辑正确的文件来配置Gnocchi。配置文件是明确的,但是一些基本的选项你需要去改变和配置
选项名称
帮助
storage.driver
用于监控项的存储驱动storagedriver
indexer.url
你的indexer的url
storage.file_*
如果你使用了文件存储驱动,用于存储文件的配置选项
storage.swift_*
如果使用了swift的storagedriver.需要配置访问Swift
storage.ceph_*
如果你使用ceph的storagedriver.,需要配置访问ceph
storage.s3_*
如果你使用S3的storagedriver,需要配置访问S3
storage.redis_*
如果你使用redis作为storagedriver,你需要配置访问redis
API server支持不同的验证方法:basic(默认)会使用标准的HTTP验证头部或者keystone来使用OpenStack Keystone。如果你通过pip成功安装了keystone ,你可以设置api.auth_mode到keystone来开启Keystone 验证。
支持不同的验证方法:basic(默认)会使用标准的HTTP验证头部或者keystone来使用OpenStack Keystone。如果你通过pip成功安装了keystone ,你可以设置api.auth_mode到keystone来开启Keystone 验证。
一旦配置Gnocchi,你需要初始化indexe和storage:
gnocchi-upgrade
Gnocchi,你需要初始化indexe和storage:
gnocchi-upgrade
为了从之前版本的Gnocchi升级,你需要确保你的indexer和storage是需要正确升级。按照以下步骤来:
1)停止老版本的Gnocchi API server和gnocchi-statsd daemon
2)停止老版本的Gnocchi-metricd daemon
3)安装新版本的Gnocchi
4)运行
gnocchi-upgrade
这会根据你的index和storage大小花费数小时的时间
5)运行新的Gnocchi API server,gnocchi-metricd和gnocchi-statsd daemon。
Gnocchi升级,你需要确保你的indexer和storage是需要正确升级。按照以下步骤来:
1)停止老版本的Gnocchi API server和gnocchi-statsd daemon
2)停止老版本的Gnocchi-metricd daemon
3)安装新版本的Gnocchi
4)运行
gnocchi-upgrade
这会根据你的index和storage大小花费数小时的时间
5)运行新的Gnocchi API server,gnocchi-metricd和gnocchi-statsd daemon。
为了使得Gnocchi在devstack中,添加下面的语句到local.conf中:
enable_plugin gnocchi https://github.com/openstack/gnocchi master
为了使得Grafana支持devstack,你需要开启 gnocchi-grafana:
enable_service gnocchi-grafana
接下来需要开启devstack
./stack.sh
Gnocchi在devstack中,添加下面的语句到local.conf中:
enable_plugin gnocchi https://github.com/openstack/gnocchi master
为了使得Grafana支持devstack,你需要开启 gnocchi-grafana:
enable_service gnocchi-grafana
接下来需要开启devstack
./stack.sh
简单运行HTTP server和metric daemon:
gnocchi-api
gnocchi-metricd
HTTP server和metric daemon:
gnocchi-api
gnocchi-metricd
Gnocchi API层 使用WSGI运行。这意味着它必须使用Apache httpd和mod_wsgi运行,或者其他的HTTP daemon例如uwsgi。你需要根据CPU的数量配置处理的数量和线程,通常是1.5 * CPU数量。如果一个server不够,你可以扩大API server的数量来扩展Gnochi,甚至是在不同的机器上。
下面是uwsgi可以使用的的配置文件
[uwsgi]
http = localhost:8041
# Set the correct path depending on your installation
wsgi-file = /usr/lib/python2.7/dist-packages/gnocchi/rest/app.wsgi
master = true
die-on-term = true
threads = 32
# Adjust based on the number of CPU
processes = 32
enabled-threads = true
thunder-lock = true
plugins = python
buffer-size = 65535
lazy-apps = true
一旦写入到/etc/gnocchi/uwsgi.ini,它可以用下面的方式发布
uwsgi /etc/gnocchi/uwsgi.ini
层 使用WSGI运行。这意味着它必须使用Apache httpd和mod_wsgi运行,或者其他的HTTP daemon例如uwsgi。你需要根据CPU的数量配置处理的数量和线程,通常是1.5 * CPU数量。如果一个server不够,你可以扩大API server的数量来扩展Gnochi,甚至是在不同的机器上。
下面是uwsgi可以使用的的配置文件
[uwsgi]
http = localhost:8041
# Set the correct path depending on your installation
wsgi-file = /usr/lib/python2.7/dist-packages/gnocchi/rest/app.wsgi
master = true
die-on-term = true
threads = 32
# Adjust based on the number of CPU
processes = 32
enabled-threads = true
thunder-lock = true
plugins = python
buffer-size = 65535
lazy-apps = true
一旦写入到/etc/gnocchi/uwsgi.ini,它可以用下面的方式发布
uwsgi /etc/gnocchi/uwsgi.ini
在Gnocchi中,归档策略定义是被表示为点的数量。如果你的归档策略定义了一个10各点的策略,粒度是1秒,时间序列归档将会维持10秒(有时会多一点),每一种表示是对超过1秒的聚集。这意味着时间序列将会最大保留最新到最老10秒的数据。但这并不意味着这是连续的10秒:可能数据中存在不规则的部分。
因此,归档策略和粒度完全依赖于你的使用情况。你可以定义其中归档策略。一个典型的低度使用的方式
3600 点,粒度1s ,等于1小时
1440点,1分钟,24小时
720点,一小时,30天
365点,一天,一年
这将表示每个聚集方法将花费6125个点 * 9 = 54 KB空间。如果你使用
8个标准的聚集方法,你的监控项占据的总空间为8 * 54KB = 432KB
小心定义你的归档策略,它将花费更多的CPU。因此,创建一个归档策略包含两个定义(
每天1秒的粒度粒度和针对每个月1分钟的粒度)将会花费两被的CPU比一个定义(例如:每天1秒的粒度)
Gnocchi中,归档策略定义是被表示为点的数量。如果你的归档策略定义了一个10各点的策略,粒度是1秒,时间序列归档将会维持10秒(有时会多一点),每一种表示是对超过1秒的聚集。这意味着时间序列将会最大保留最新到最老10秒的数据。但这并不意味着这是连续的10秒:可能数据中存在不规则的部分。
因此,归档策略和粒度完全依赖于你的使用情况。你可以定义其中归档策略。一个典型的低度使用的方式
3600 点,粒度1s ,等于1小时
1440点,1分钟,24小时
720点,一小时,30天
365点,一天,一年
这将表示每个聚集方法将花费6125个点 * 9 = 54 KB空间。如果你使用
8个标准的聚集方法,你的监控项占据的总空间为8 * 54KB = 432KB
小心定义你的归档策略,它将花费更多的CPU。因此,创建一个归档策略包含两个定义(
每天1秒的粒度粒度和针对每个月1分钟的粒度)将会花费两被的CPU比一个定义(例如:每天1秒的粒度)
默认3个归档策略会在调用 gnocchi-upgrade 的时候被创建:
low , medium , high
米ingzi描述了存储空间和CPU使用的需求。它们使用
default_arrgegation_methods
这是默认被设置为 mean , min, max , sum , std, count
一个fourth archive policy叫做bool的也默认被提供了。这仅仅用于存储boolean 值(例如,0和1).它仅仅为每一秒存储1个data point(使用 最后的聚集方法),是一年的保留时间。
最好的存储大小是被如下假设:除了0和1作为测量值measures被发送。如果其他的值被发送,最坏情况下的最大存储大小会被考虑在内。
Low:
超过30天的5分钟的粒度
使用的聚集函数:默认聚集函数
每个监控项metric最大空间大小:406KB
Medium:
超过7天的一分钟的粒度
超过365天的1小时粒度
使用的聚集函数:默认聚集函数
每个监控项metric最大空间大小为:887KB
high:
超过1小时的1秒粒度
超过1星期的一分钟粒度
超过1年的1小时粒度
使用聚集方法:默认聚集方法
每个监控项metric最大空间大小为:1057KB
超过1年的bool* 1秒的粒度,使用: las* 最好情况小大小为:
1539 KB * 每个监控项最坏情况下大小: 277 172KB
约277MB
3个归档策略会在调用 gnocchi-upgrade 的时候被创建:
low , medium , high
米ingzi描述了存储空间和CPU使用的需求。它们使用
default_arrgegation_methods
这是默认被设置为 mean , min, max , sum , std, count
一个fourth archive policy叫做bool的也默认被提供了。这仅仅用于存储boolean 值(例如,0和1).它仅仅为每一秒存储1个data point(使用 最后的聚集方法),是一年的保留时间。
最好的存储大小是被如下假设:除了0和1作为测量值measures被发送。如果其他的值被发送,最坏情况下的最大存储大小会被考虑在内。
Low:
超过30天的5分钟的粒度
使用的聚集函数:默认聚集函数
每个监控项metric最大空间大小:406KB
Medium:
超过7天的一分钟的粒度
超过365天的1小时粒度
使用的聚集函数:默认聚集函数
每个监控项metric最大空间大小为:887KB
high:
超过1小时的1秒粒度
超过1星期的一分钟粒度
超过1年的1小时粒度
使用聚集方法:默认聚集方法
每个监控项metric最大空间大小为:1057KB
超过1年的bool* 1秒的粒度,使用: las* 最好情况小大小为:
1539 KB * 每个监控项最坏情况下大小: 277 172KB
约277MB
默认地,gnocchi-metricd daemon会测量所有你的CPU功效来最大化CPU使用,当计算metric聚集。你可以使用gnocchi status命令查询HTTP API 获取监控项处理的聚集状态,它将会显示多少个监控项metric正在处理,正如处理存储的gnocchi-metricd。只要积压未办的时请不是持续增长,这意味着gnocchi-metricd能够处理正在被发送的个数的监控项。假如正在处理的measure的数量持续上升,你需要增加gnocchi-metricd daemons。你可以在任意数量的服务器上运行任意数量的metricd-daemon。
gnocchi-metricd daemon会测量所有你的CPU功效来最大化CPU使用,当计算metric聚集。你可以使用gnocchi status命令查询HTTP API 获取监控项处理的聚集状态,它将会显示多少个监控项metric正在处理,正如处理存储的gnocchi-metricd。只要积压未办的时请不是持续增长,这意味着gnocchi-metricd能够处理正在被发送的个数的监控项。假如正在处理的measure的数量持续上升,你需要增加gnocchi-metricd daemons。你可以在任意数量的服务器上运行任意数量的metricd-daemon。
HTTP API中/V1/status endpoint返回各种信息,例如待处理的measures数量(measures backlog最大连接数量),你可以轻松监视(参见:我们需要运行多少metricd workers)。确保HTTP server和gnocchi-metricd daemon是运行的并且没有在日志中写入任何报警的时请,着就标志着对于整个系统是处于一种良好的状态。
所有measures的backlog状态可能不呢个正确反映除待处理的点的个数,当measures正在被批处理batch提交的时候。
中/V1/status endpoint返回各种信息,例如待处理的measures数量(measures backlog最大连接数量),你可以轻松监视(参见:我们需要运行多少metricd workers)。确保HTTP server和gnocchi-metricd daemon是运行的并且没有在日志中写入任何报警的时请,着就标志着对于整个系统是处于一种良好的状态。
所有measures的backlog状态可能不呢个正确反映除待处理的点的个数,当measures正在被批处理batch提交的时候。
为了能够从不幸的事件中恢复,你需要备份索引index和存储storage。着意味着创建一个数据库转储database dump(PostgreSQL or MySQL) 并且所奎找snapshots或者拷贝你的数据存储(Ceph .S3 , Swift,或者你的文件系统)。恢复的过程不会比初始部署的过程复杂:
恢复你的索引index和存储备份storage backups,如果需要就重新安装Gnocchi,并重启它。
index和存储storage。着意味着创建一个数据库转储database dump(PostgreSQL or MySQL) 并且所奎找snapshots或者拷贝你的数据存储(Ceph .S3 , Swift,或者你的文件系统)。恢复的过程不会比初始部署的过程复杂:
恢复你的索引index和存储备份storage backups,如果需要就重新安装Gnocchi,并重启它。
Gnocchi仅仅提供了一个Python的客户端和SDK,可以被pip安装
pip install gnocchiclient
包中提供了gnocchi的命令行工具,可以被用于发送请求到Gnocchi,你可以阅读完整的在线文档:
http://gnocchi.xyz/gnocchiclient/
仅仅提供了一个Python的客户端和SDK,可以被pip安装
pip install gnocchiclient
包中提供了gnocchi的命令行工具,可以被用于发送请求到Gnocchi,你可以阅读完整的在线文档:
http://gnocchi.xyz/gnocchiclient/
默认地。验证被配置为”basic”模式。你需要在你的HTTP请求携带一个有效的username中提供一个`Authorization’ header。”admin”密码被授予所有权限,而其他的用户名被识别为拥有标准权限。
你可以通过指定一个不同的pollcy_file而不是默认的来定制化你的权限。
如果你设置api.auth_mode到keystone中,OpenStack Keystone中间件将能够支持验证。需要验证每一个发送到Gnocchi的API请求的Keystone并提供一个X-Auth-Token有效头部。
basic”模式。你需要在你的HTTP请求携带一个有效的username中提供一个`Authorization’ header。”admin”密码被授予所有权限,而其他的用户名被识别为拥有标准权限。
你可以通过指定一个不同的pollcy_file而不是默认的来定制化你的权限。
如果你设置api.auth_mode到keystone中,OpenStack Keystone中间件将能够支持验证。需要验证每一个发送到Gnocchi的API请求的Keystone并提供一个X-Auth-Token有效头部。
Gnocchi提供了一种对象类型,叫做metric。一个metric可以标明任何可以被测量的事物:一个服务器的CPU使用率,房间的温度或者发送个网络接口的字节数。
一个metric仅仅有很少的属性:一个UUID来标识它,一个name,归档策略archive policy将会被用于存储和聚集测量项measures。
提供了一种对象类型,叫做metric。一个metric可以标明任何可以被测量的事物:一个服务器的CPU使用率,房间的温度或者发送个网络接口的字节数。
一个metric仅仅有很少的属性:一个UUID来标识它,一个name,归档策略archive policy将会被用于存储和聚集测量项measures。
1)为了创建一个metric,下面的API需要被使用:
输入:
POST /v1/metric HTTP/1.1
Content-Type: application/json
Content-Length: 35
{
"archive_policy_name": "high"
}
POST /v1/metric HTTP/1.1
Content-Type: application/json
Content-Length: 35
{
"archive_policy_name": "high"
}
2)一旦创建了,你可以检索metric的信息
输入:
GET /v1/metric/c79894ef-aa69-4a60-a9b9-efd8c98a5628 HTTP/1.1
Content-Length: 0
GET /v1/metric/c79894ef-aa69-4a60-a9b9-efd8c98a5628 HTTP/1.1
Content-Length: 0
3)为了检索所有创建的metrics列表,使用下面的请求
输入:
GET /v1/metric HTTP/1.1
Content-Length: 0
注意:考虑到Gnocchi中会存储大量的metrics,查询结果会被设置在配置文件中的max_limit值所限制。
返回的结果会按照metrics的id值排序。为了检索下一页的内容,metric的id需要给出来作为下一页结果的标记marker。
GET /v1/metric HTTP/1.1
Content-Length: 0
注意:考虑到Gnocchi中会存储大量的metrics,查询结果会被设置在配置文件中的max_limit值所限制。
返回的结果会按照metrics的id值排序。为了检索下一页的内容,metric的id需要给出来作为下一页结果的标记marker。
4)默认顺序和limits,起始页面可以被查询中的参数修改
输入命令:
GET /v1/metric?limit=100&sort=name:asc HTTP/1.1
Content-Length: 0
GET /v1/metric?limit=100&sort=name:asc HTTP/1.1
Content-Length: 0
5)也可以发送measures到metric:
POST /v1/metric/c79894ef-aa69-4a60-a9b9-efd8c98a5628/measures HTTP/1.1
Content-Type: application/json
Content-Length: 198
[
{
"timestamp": "2014-10-06T14:33:57",
"value": 43.1
},
{
"timestamp": "2014-10-06T14:34:12",
"value": 12
},
{
"timestamp": "2014-10-06T14:34:20",
"value": 2
}
]
如果没有错误,Gnocchi将不会返回响应体,仅仅返回状态码。可以提供任意数量的measures。
重要:可以发送任意数量的(timestamp,value),它需要通过归档测ve中的metric来限制,例如最大时间跨度timespan。
Content-Type: application/json
Content-Length: 198
[
{
"timestamp": "2014-10-06T14:33:57",
"value": 43.1
},
{
"timestamp": "2014-10-06T14:34:12",
"value": 12
},
{
"timestamp": "2014-10-06T14:34:20",
"value": 2
}
]
如果没有错误,Gnocchi将不会返回响应体,仅仅返回状态码。可以提供任意数量的measures。
重要:可以发送任意数量的(timestamp,value),它需要通过归档测ve中的metric来限制,例如最大时间跨度timespan。
6)一旦measures测量值内发送,可以在端点endpoint中使用GET来检索它们。
输入:
GET /v1/metric/c79894ef-aa69-4a60-a9b9-efd8c98a5628/measures HTTP/1.1
Content-Length: 0
根据driver,在提交POST测量值之后,被处理和可查询之前,可能存在一些延迟。为了确保你查询返回了
:
GET /v1/metric/c79894ef-aa69-4a60-a9b9-efd8c98a5628/measures HTTP/1.1
Content-Length: 0
根据driver,在提交POST测量值之后,被处理和可查询之前,可能存在一些延迟。为了确保你查询返回了
7)所有被提提交的measures,你需要强加上一些未被处理的方法来处理。
输入:
GET /v1/metric/c79894ef-aa69-4a60-a9b9-efd8c98a5628/measures?refresh=true HTTP/1.1
Content-Length: 0
注意:根据未被处理的数据量多少,refresh可能需要添加一些东西在你的查询中。
返回的点的列表会以(timestamp,granularity,value)的形式压缩为元组,并根据时间戳排序。
粒度 granularity是timespan,用于被进行聚集。
可以通过指定start and/or stop参数到带有timestamp的查询中,来过滤一段时间的measures。
GET /v1/metric/c79894ef-aa69-4a60-a9b9-efd8c98a5628/measures?refresh=true HTTP/1.1
Content-Length: 0
注意:根据未被处理的数据量多少,refresh可能需要添加一些东西在你的查询中。
返回的点的列表会以(timestamp,granularity,value)的形式压缩为元组,并根据时间戳排序。
粒度 granularity是timespan,用于被进行聚集。
可以通过指定start and/or stop参数到带有timestamp的查询中,来过滤一段时间的measures。
8)时间戳格式可以用浮点数(UNIXepoch)或者一个ISO8601格式的时间戳。
输入:
GET /v1/metric/c79894ef-aa69-4a60-a9b9-efd8c98a5628/measures?start=2014-10-06T14:34 HTTP/1.1
Content-Length: 0
默认地,聚集的值将会以平均值聚集函数计算后返回,
:
GET /v1/metric/c79894ef-aa69-4a60-a9b9-efd8c98a5628/measures?start=2014-10-06T14:34 HTTP/1.1
Content-Length: 0
默认地,聚集的值将会以平均值聚集函数计算后返回,
9)可以请求任意其他方法来通过指定聚集查询参数
输入:
GET /v1/metric/c79894ef-aa69-4a60-a9b9-efd8c98a5628/measures?aggregation=max HTTP/1.1
Content-Length: 0
聚集列表方法包括:mean,sum,last,max,min,std,median,first,count和Npct(with 0 < N 100)。
:
GET /v1/metric/c79894ef-aa69-4a60-a9b9-efd8c98a5628/measures?aggregation=max HTTP/1.1
Content-Length: 0
聚集列表方法包括:mean,sum,last,max,min,std,median,first,count和Npct(with 0 < N 100)。
10)可以提供granularity粒度参数来指定granularity来检索,而不是所有可能的granularity。
输入:
GET /v1/metric/c79894ef-aa69-4a60-a9b9-efd8c98a5628/measures?granularity=1 HTTP/1.1
Content-Length: 0
另外,对于归档策略中的粒度granularities,
:
GET /v1/metric/c79894ef-aa69-4a60-a9b9-efd8c98a5628/measures?granularity=1 HTTP/1.1
Content-Length: 0
另外,对于归档策略中的粒度granularities,
11)measures可以被新的granularities进行重新采样。
输入:
GET /v1/metric/c79894ef-aa69-4a60-a9b9-efd8c98a5628/measures?resample=5&granularity=1 HTTP/1.1
Content-Length: 0
注意:根据聚集方法和measures的频率,重新采样的数据可能缺少了准确性,并且它和之前工作的聚集数据不同。
:
GET /v1/metric/c79894ef-aa69-4a60-a9b9-efd8c98a5628/measures?resample=5&granularity=1 HTTP/1.1
Content-Length: 0
注意:根据聚集方法和measures的频率,重新采样的数据可能缺少了准确性,并且它和之前工作的聚集数据不同。
可以对发送的measures批量处理,
measures批量处理,
1)在一个简单的调用中发送不同metrics的几个measures
输入:
POST /v1/batch/metrics/measures HTTP/1.1
Content-Type: application/json
Content-Length: 391
{
"c79894ef-aa69-4a60-a9b9-efd8c98a5628": [
{
"timestamp": "2014-10-06T14:34:12",
"value": 12
},
{
"timestamp": "2014-10-06T14:34:20",
"value": 2
}
],
"f2c44e50-0822-423e-bd0b-ffc88cfe3725": [
{
"timestamp": "2014-10-06T16:12:12",
"value": 3
},
{
"timestamp": "2014-10-06T18:14:52",
"value": 4
}
]
}
:
POST /v1/batch/metrics/measures HTTP/1.1
Content-Type: application/json
Content-Length: 391
{
"c79894ef-aa69-4a60-a9b9-efd8c98a5628": [
{
"timestamp": "2014-10-06T14:34:12",
"value": 12
},
{
"timestamp": "2014-10-06T14:34:20",
"value": 2
}
],
"f2c44e50-0822-423e-bd0b-ffc88cfe3725": [
{
"timestamp": "2014-10-06T16:12:12",
"value": 3
},
{
"timestamp": "2014-10-06T18:14:52",
"value": 4
}
]
}
2)或者使用资源的metrics
输入
POST /v1/batch/resources/metrics/measures HTTP/1.1
Content-Type: application/json
Content-Length: 585
{
"15e9c872-7ca9-11e4-a2da-2fb4032dfc09": {
"cpu.util": [
{
"timestamp": "2014-10-06T14:34:12",
"value": 12
},
{
"timestamp": "2014-10-06T14:34:20",
"value": 2
}
]
},
"6f24edd9-5a2f-4592-b708-ffbed821c5d2": {
"cpu.util": [
{
"timestamp": "2014-10-06T14:34:12",
"value": 6
},
{
"timestamp": "2014-10-06T14:34:20",
"value": 25
}
]
},
"ab68da77-fa82-4e67-aba9-270c5a98cbcb": {
"temperature": [
{
"timestamp": "2014-10-06T14:34:12",
"value": 17
},
{
"timestamp": "2014-10-06T14:34:20",
"value": 18
}
]
}
}
null
如果一些在批处理中指定的metrics的名称不存在,Gnocchi会尝试创建它们并作为一种归档策略做匹配。
POST /v1/batch/resources/metrics/measures HTTP/1.1
Content-Type: application/json
Content-Length: 585
{
"15e9c872-7ca9-11e4-a2da-2fb4032dfc09": {
"cpu.util": [
{
"timestamp": "2014-10-06T14:34:12",
"value": 12
},
{
"timestamp": "2014-10-06T14:34:20",
"value": 2
}
]
},
"6f24edd9-5a2f-4592-b708-ffbed821c5d2": {
"cpu.util": [
{
"timestamp": "2014-10-06T14:34:12",
"value": 6
},
{
"timestamp": "2014-10-06T14:34:20",
"value": 25
}
]
},
"ab68da77-fa82-4e67-aba9-270c5a98cbcb": {
"temperature": [
{
"timestamp": "2014-10-06T14:34:12",
"value": 17
},
{
"timestamp": "2014-10-06T14:34:20",
"value": 18
}
]
}
}
null
如果一些在批处理中指定的metrics的名称不存在,Gnocchi会尝试创建它们并作为一种归档策略做匹配。
当发送metric的measures到Gnocchi,这些值会被动态聚集。着意味着Gnocchi并不存储所有发送的measures,而是在一个时间段聚集它们。
Gnocchi提供了几种不同的内置聚集函数。
一个归档策略被指定的field中调集集合所定义。每一个条目组成了时间跨度并且京都层次需要被提供,决定了至少使用:2个points,granularity和timespan字段。例如,一个条目会被定义为超过1小时的12个点(每个点5分钟),或者针对天的每小时一个点(24个点)。
默认地,新的带有measures的timestamps的可以在聚集的时间段中被处理。上一次聚集时间段的大小是根据归档策略中最大的granularity。为了允许处理比该时间段更旧的measures,back_window 参数可以被用于设置保存粗略的时间段。
back_window:2表示可以收集两个小时之前的数据
具体参见:https://docs.openstack.org/developer/gnocchi/rest.html
改变聚集方法通过指定聚集参方法列表,在aggregation_methods中修改
删除加上前缀 -max,添加用+, *表示所有
一旦归档策略被创建,会返回所有属性,归档策略的URL
GET /v1/archive_policy/short HTTP/1.1
Content-Length: 0
已经存在的归档策略可以被修改用来保留更多或者更少的数据。归档策略覆盖可以扩展,
metric的measures到Gnocchi,这些值会被动态聚集。着意味着Gnocchi并不存储所有发送的measures,而是在一个时间段聚集它们。
Gnocchi提供了几种不同的内置聚集函数。
一个归档策略被指定的field中调集集合所定义。每一个条目组成了时间跨度并且京都层次需要被提供,决定了至少使用:2个points,granularity和timespan字段。例如,一个条目会被定义为超过1小时的12个点(每个点5分钟),或者针对天的每小时一个点(24个点)。
默认地,新的带有measures的timestamps的可以在聚集的时间段中被处理。上一次聚集时间段的大小是根据归档策略中最大的granularity。为了允许处理比该时间段更旧的measures,back_window 参数可以被用于设置保存粗略的时间段。
back_window:2表示可以收集两个小时之前的数据
具体参见:https://docs.openstack.org/developer/gnocchi/rest.html
改变聚集方法通过指定聚集参方法列表,在aggregation_methods中修改
删除加上前缀 -max,添加用+, *表示所有
一旦归档策略被创建,会返回所有属性,归档策略的URL
GET /v1/archive_policy/short HTTP/1.1
Content-Length: 0
已经存在的归档策略可以被修改用来保留更多或者更少的数据。归档策略覆盖可以扩展,
1)measures不可以回溯到已经计算的作为回填来容纳新的时间跨度。
输入:
PATCH /v1/archive_policy/short HTTP/1.1
Content-Type: application/json
Content-Length: 150
{
"definition": [
{
"granularity": "1s",
"timespan": "1 hour"
},
{
"points": 48,
"timespan": "1 day"
}
]
}
注意:Granularities 粒度不可以被修改,删除或者添加。
如果归档策略不被任何metric所使用,可以删除【慎重】
DELETE /v1/archive_policy/some-archive-policy HTTP/1.1
Content-Length: 0
:
PATCH /v1/archive_policy/short HTTP/1.1
Content-Type: application/json
Content-Length: 150
{
"definition": [
{
"granularity": "1s",
"timespan": "1 hour"
},
{
"points": 48,
"timespan": "1 day"
}
]
}
注意:Granularities 粒度不可以被修改,删除或者添加。
如果归档策略不被任何metric所使用,可以删除【慎重】
DELETE /v1/archive_policy/some-archive-policy HTTP/1.1
Content-Length: 0
Gnocchi提供了一种能力被叫做archive_policy_rule。
一个归档策略规则,可以给与用户来定义规则。
归档策略规则包含几个属性:一个名字。
归档策略规则可以作为默认中度归档策略来映射到任意volume metric使用通配符
volume.*。当一个sample metric被以volume.size条件,将会匹配到该模式和规则来应用和时值归档策略为中度的。
提供了一种能力被叫做archive_policy_rule。
一个归档策略规则,可以给与用户来定义规则。
归档策略规则包含几个属性:一个名字。
归档策略规则可以作为默认中度归档策略来映射到任意volume metric使用通配符
volume.*。当一个sample metric被以volume.size条件,将会匹配到该模式和规则来应用和时值归档策略为中度的。
1)如果多个规则匹配,使用最长匹配的。
输入:
POST /v1/archive_policy_rule HTTP/1.1
Content-Type: application/json
Content-Length: 90
{
"archive_policy_name": "low",
"metric_pattern": "disk.io.*",
"name": "test_rule"
}
:
POST /v1/archive_policy_rule HTTP/1.1
Content-Type: application/json
Content-Length: 90
{
"archive_policy_name": "low",
"metric_pattern": "disk.io.*",
"name": "test_rule"
}
2)查询规则
GET /v1/archive_policy_rule/test_rule HTTP/1.1
Content-Length: 0
Content-Length: 0
3)列出归档策略规则,按照字母表顺序逆序返回
GET /v1/archive_policy_rule HTTP/1.1
Content-Length: 0
Content-Length: 0
4)删除归档规则;
DELETE /v1/archive_policy_rule/test_rule_delete HTTP/1.1
Content-Length: 0
Content-Length: 0
Gnocchi提供了能力来store和index资源,每个资源有一个类型。
资源的基本类型是generic,但是更多特别的自类型也存在来描述OpenStack资源。
提供了能力来store和index资源,每个资源有一个类型。
资源的基本类型是generic,但是更多特别的自类型也存在来描述OpenStack资源。
1)创建一个一般资源
POST /v1/resource/generic HTTP/1.1
Content-Type: application/json
Content-Length: 159
{
"id": "75C44741-CC60-4033-804E-2D3098C7D2E9",
"project_id": "BD3A1E52-1C62-44CB-BF04-660BD88CD74D",
"user_id": "BD3A1E52-1C62-44CB-BF04-660BD88CD74D"
}
id,user_id,project_id属性必须是UUID。时间戳描述了资源的生命周期是可选的。
stared_at默认被设置为当前时间戳。
可以通过Location header的URL来检索资源。
Content-Type: application/json
Content-Length: 159
{
"id": "75C44741-CC60-4033-804E-2D3098C7D2E9",
"project_id": "BD3A1E52-1C62-44CB-BF04-660BD88CD74D",
"user_id": "BD3A1E52-1C62-44CB-BF04-660BD88CD74D"
}
id,user_id,project_id属性必须是UUID。时间戳描述了资源的生命周期是可选的。
stared_at默认被设置为当前时间戳。
可以通过Location header的URL来检索资源。
2)创建指定的资源
POST /v1/resource/instance HTTP/1.1
Content-Type: application/json
Content-Length: 351
{
"display_name": "myvm",
"ended_at": "2014-01-04 10:00:12",
"flavor_id": "2",
"host": "compute1",
"id": "6868DA77-FA82-4E67-ABA9-270C5AE8CBCA",
"image_ref": "http://image",
"metrics": {},
"project_id": "BD3A1E52-1C62-44CB-BF04-660BD88CD74D",
"started_at": "2014-01-02 23:23:34",
"user_id": "BD3A1E52-1C62-44CB-BF04-660BD88CD74D"
}
所有指定的类型有它们自己的可选的和强制的属性,但是它们包含了所有来自generic类型的属性。
Content-Type: application/json
Content-Length: 351
{
"display_name": "myvm",
"ended_at": "2014-01-04 10:00:12",
"flavor_id": "2",
"host": "compute1",
"id": "6868DA77-FA82-4E67-ABA9-270C5AE8CBCA",
"image_ref": "http://image",
"metrics": {},
"project_id": "BD3A1E52-1C62-44CB-BF04-660BD88CD74D",
"started_at": "2014-01-02 23:23:34",
"user_id": "BD3A1E52-1C62-44CB-BF04-660BD88CD74D"
}
所有指定的类型有它们自己的可选的和强制的属性,但是它们包含了所有来自generic类型的属性。
3)可以创建监控项的通知创建资源
POST /v1/resource/generic HTTP/1.1
Content-Type: application/json
Content-Length: 221
{
"id": "AB68DA77-FA82-4E67-ABA9-270C5A98CBCB",
"metrics": {
"temperature": {
"archive_policy_name": "low"
}
},
"project_id": "BD3A1E52-1C62-44CB-BF04-660BD88CD74D",
"user_id": "BD3A1E52-1C62-44CB-BF04-660BD88CD74D"
}
Content-Type: application/json
Content-Length: 221
{
"id": "AB68DA77-FA82-4E67-ABA9-270C5A98CBCB",
"metrics": {
"temperature": {
"archive_policy_name": "low"
}
},
"project_id": "BD3A1E52-1C62-44CB-BF04-660BD88CD74D",
"user_id": "BD3A1E52-1C62-44CB-BF04-660BD88CD74D"
}
4)可以通过在创建时间的Locationheader中URL来检索资源
GET /v1/resource/generic/75c44741-cc60-4033-804e-2d3098c7d2e9 HTTP/1.1
Content-Length: 0
Content-Length: 0
5)可以通过再次上传资源的部分修改属性来修改资源
PATCH /v1/resource/instance/6868da77-fa82-4e67-aba9-270c5ae8cbca HTTP/1.1
Content-Type: application/json
Content-Length: 20
{
"host": "compute2"
}
Content-Type: application/json
Content-Length: 20
{
"host": "compute2"
}
6)查询资源修改历史
GET /v1/resource/instance/6868da77-fa82-4e67-aba9-270c5ae8cbca/history HTTP/1.1
Content-Length: 0
Content-Length: 0
7)删除资源
DELETE /v1/resource/generic/75c44741-cc60-4033-804e-2d3098c7d2e9 HTTP/1.1
Content-Length: 0
Content-Length: 0
8)可以基于属性值来删除一批资源,并返回删除资源数量
DELETE /v1/resource/generic HTTP/1.1
Content-Type: application/json
Content-Length: 172
{
"in": {
"id": [
"3cbcca4f-af46-5285-b7f7-951affcb4772",
"8a1bfad0-8a51-52ce-938b-c82cd028e91e",
"4f46cf43-784d-5e77-9d66-acb2c23ac5b4"
]
}
}
Content-Type: application/json
Content-Length: 172
{
"in": {
"id": [
"3cbcca4f-af46-5285-b7f7-951affcb4772",
"8a1bfad0-8a51-52ce-938b-c82cd028e91e",
"4f46cf43-784d-5e77-9d66-acb2c23ac5b4"
]
}
}
9)基于时间删除资源
DELETE /v1/resource/generic HTTP/1.1
Content-Type: application/json
Content-Length: 62
{
">=": {
"started_at": "2017-03-20T14:07:12.008654+00:00"
}
}
重要:当一个资源被删除了,所有相关的监控项都回同时被删除。当一批资源被删除,会要求一个属性器来避免删除整个数据库。
Content-Type: application/json
Content-Length: 62
{
">=": {
"started_at": "2017-03-20T14:07:12.008654+00:00"
}
}
重要:当一个资源被删除了,所有相关的监控项都回同时被删除。当一批资源被删除,会要求一个属性器来避免删除整个数据库。
11)可以通过generictype或者过滤除资源类型来列出所有资源
输入:
GET /v1/resource/generic HTTP/1.1
Content-Length: 0
当使用generic endpoint,没有属性指定资源类型。
:
GET /v1/resource/generic HTTP/1.1
Content-Length: 0
当使用generic endpoint,没有属性指定资源类型。
12)为了检索到细节,使用指定资源类型的endpoint。
GET /v1/resource/instance HTTP/1.1
Content-Length: 0
Content-Length: 0
13)或使用details= true在查询参数中
输入:
GET /v1/resource/generic?details=true HTTP/1.1
Content-Length: 0
GET /v1/resource/generic?details=true HTTP/1.1
Content-Length: 0
14)可以设定查询返回的数量
GET /v1/resource/generic?limit=2&sort=id:asc HTTP/1.1
Content-Length: 0
每个资源可以与任意数量的metrics关联,metrics属性是key/value键值对,
Content-Length: 0
每个资源可以与任意数量的metrics关联,metrics属性是key/value键值对,
15)key是关系的名字,value是监控项
例如:
POST /v1/resource/instance HTTP/1.1
Content-Type: application/json
Content-Length: 368
{
"display_name": "myvm2",
"flavor_id": "2",
…
}
:
POST /v1/resource/instance HTTP/1.1
Content-Type: application/json
Content-Length: 368
{
"display_name": "myvm2",
"flavor_id": "2",
…
}
16)可以在创建资源的同时创建监控项metrics
POST /v1/resource/instance HTTP/1.1
Content-Type: application/json
Content-Length: 362
{
"display_name": "myvm3",
"flavor_id": "2",
"host": "compute2",
"id": "15e9c872-7ca9-11e4-a2da-2fb4032dfc09",
"image_ref": "http://image",
"metrics": {
"cpu.util": {
"archive_policy_name": "short"
}
},
"project_id": "BD3A1E52-1C62-44CB-BF04-660BD88CD74D",
"server_group": "my_autoscaling_group",
"user_id": "BD3A1E52-1C62-44CB-BF04-660BD88CD74D"
}
Content-Type: application/json
Content-Length: 362
{
"display_name": "myvm3",
"flavor_id": "2",
"host": "compute2",
"id": "15e9c872-7ca9-11e4-a2da-2fb4032dfc09",
"image_ref": "http://image",
"metrics": {
"cpu.util": {
"archive_policy_name": "short"
}
},
"project_id": "BD3A1E52-1C62-44CB-BF04-660BD88CD74D",
"server_group": "my_autoscaling_group",
"user_id": "BD3A1E52-1C62-44CB-BF04-660BD88CD74D"
}
17)metric相关的资源可以通过/ve/metricendpoint或者使用 资源关系名称
GET /v1/resource/generic/6f24edd9-5a2f-4592-b708-ffbed821c5d2/metric/cpu.util/measures?start=2014-10-06T14:34 HTTP/1.1
Content-Length: 0
Content-Length: 0
18)对于同一个endpoint,可追加监控项到一个资源
POST /v1/resource/generic/6f24edd9-5a2f-4592-b708-ffbed821c5d2/metric HTTP/1.1
Content-Type: application/json
Content-Length: 42
{
"memory": {
"archive_policy_name": "low"
}
}
Content-Type: application/json
Content-Length: 42
{
"memory": {
"archive_policy_name": "low"
}
}
1)Gnocchi可以通过自定化属性来管理资源类型
POST /v1/resource_type HTTP/1.1
Content-Type: application/json
Content-Length: 360
{
"attributes": {
"display_name": {
"required": true,
"type": "string"
},
"enabled": {
"required": false,
"type": "bool"
},
"myid": {
"type": "uuid"
},
"prefix": {
"max_length": 8,
"min_length": 3,
"required": false,
"type": "string"
},
"size": {
"max": 32.8,
"min": 5,
"type": "number"
}
},
"name": "my_custom_type"
}
Content-Type: application/json
Content-Length: 360
{
"attributes": {
"display_name": {
"required": true,
"type": "string"
},
"enabled": {
"required": false,
"type": "bool"
},
"myid": {
"type": "uuid"
},
"prefix": {
"max_length": 8,
"min_length": 3,
"required": false,
"type": "string"
},
"size": {
"max": 32.8,
"min": 5,
"type": "number"
}
},
"name": "my_custom_type"
}
2)查看定义的资源类型
GET /v1/resource_type/my_custom_type HTTP/1.1
Content-Length: 0
Content-Length: 0
3)列出所有资源类型
GET /v1/resource_type HTTP/1.1
Content-Length: 0
Content-Length: 0
4)如果没有资源与资源类型所关联,可以删除
DELETE /v1/resource_type/my_custom_type HTTP/1.1
Content-Length: 0
Content-Length: 0
4)属性可以被添加或删除
PATCH /v1/resource_type/my_custom_type HTTP/1.1
Content-Type: application/json-patch+json
Content-Length: 372
[
{
"op": "add",
"path": "/attributes/awesome-stuff",
"value": {"type": "bool", "required": false}
},
{
"op": "add",
"path": "/attributes/required-stuff",
"value": {"type": "bool", "required": true, "options": {"fill": true}}
},
{
"op": "remove",
"path": "/attributes/prefix"
}
]
创建资源类型意味着在indexer backend中创建新的标。这是一个繁琐的操作将会锁住一些表。
Content-Type: application/json-patch+json
Content-Length: 372
[
{
"op": "add",
"path": "/attributes/awesome-stuff",
"value": {"type": "bool", "required": false}
},
{
"op": "add",
"path": "/attributes/required-stuff",
"value": {"type": "bool", "required": true, "options": {"fill": true}}
},
{
"op": "remove",
"path": "/attributes/prefix"
}
]
创建资源类型意味着在indexer backend中创建新的标。这是一个繁琐的操作将会锁住一些表。
1)可以通过query机制,使用POST方法和上传JSON格式的查询来搜索资源
POST /v1/search/resource/instance HTTP/1.1
Content-Type: application/json
Content-Length: 58
{
"=": {
"user_id": "BD3A1E52-1C62-44CB-BF04-660BD88CD74D"
}
}
或者
POST /v1/search/resource/instance HTTP/1.1
Content-Type: application/json
Content-Length: 30
{
"like": {
"host": "compute%"
}
}
Content-Type: application/json
Content-Length: 58
{
"=": {
"user_id": "BD3A1E52-1C62-44CB-BF04-660BD88CD74D"
}
}
或者
POST /v1/search/resource/instance HTTP/1.1
Content-Type: application/json
Content-Length: 30
{
"like": {
"host": "compute%"
}
}
2)复杂操作符例如and,or也支持
POST /v1/search/resource/instance HTTP/1.1
Content-Type: application/json
Content-Length: 113
{
"and": [
{
"=": {
"user_id": "BD3A1E52-1C62-44CB-BF04-660BD88CD74D"
}
},
{
">=": {
"started_at": "2010-01-01"
}
}
]
}
Content-Type: application/json
Content-Length: 113
{
"and": [
{
"=": {
"user_id": "BD3A1E52-1C62-44CB-BF04-660BD88CD74D"
}
},
{
">=": {
"started_at": "2010-01-01"
}
}
]
}
3)可以在检索的同时查看资源详细信息
POST /v1/search/resource/generic?details=true HTTP/1.1
Content-Type: application/json
Content-Length: 58
{
"=": {
"user_id": "BD3A1E52-1C62-44CB-BF04-660BD88CD74D"
}
}
Content-Type: application/json
Content-Length: 58
{
"=": {
"user_id": "BD3A1E52-1C62-44CB-BF04-660BD88CD74D"
}
}
4)搜索资源修改历史
POST /v1/search/resource/instance?history=true HTTP/1.1
Content-Type: application/json
Content-Length: 53
{
"=": {
"id": "6868da77-fa82-4e67-aba9-270c5ae8cbca"
}
}
Content-Type: application/json
Content-Length: 53
{
"=": {
"id": "6868da77-fa82-4e67-aba9-270c5ae8cbca"
}
}
5)发送history参数在Accept头部
POST /v1/search/resource/instance HTTP/1.1
Content-Type: application/json
Content-Length: 53
Accept: application/json; history=true
{
"=": {
"id": "6868da77-fa82-4e67-aba9-270c5ae8cbca"
}
}
Content-Type: application/json
Content-Length: 53
Accept: application/json; history=true
{
"=": {
"id": "6868da77-fa82-4e67-aba9-270c5ae8cbca"
}
}
6)历史时间范围可以被设置
POST /v1/search/resource/instance HTTP/1.1
Content-Type: application/json
Content-Length: 227
Accept: application/json; history=true
{
"and": [
{
"=": {
"host": "compute1"
}
},
{
">=": {
"revision_start": "2017-03-20T14:07:10.770198+00:00"
}
},
{
"or": [
{
"<=": {
"revision_end": "2017-03-20T14:07:11.081500+00:00"
}
},
{
"=": {
"revision_end": null
}
}
]
}
]
}
支持的操作符: =, == , < , > , <= , >= ,!= , like, v , ^ ,not
Content-Type: application/json
Content-Length: 227
Accept: application/json; history=true
{
"and": [
{
"=": {
"host": "compute1"
}
},
{
">=": {
"revision_start": "2017-03-20T14:07:10.770198+00:00"
}
},
{
"or": [
{
"<=": {
"revision_end": "2017-03-20T14:07:11.081500+00:00"
}
},
{
"=": {
"revision_end": null
}
}
]
}
]
}
支持的操作符: =, == , < , > , <= , >= ,!= , like, v , ^ ,not
POST /v1/search/metric?metric_id=c79894ef-aa69-4a60-a9b9-efd8c98a5628 HTTP/1.1
Content-Type: application/json
Content-Length: 46
{
"and": [
{
">=": [
{
"+": 23
},
50
]
},
{
"!=": 55
}
]
}
Content-Type: application/json
Content-Length: 46
{
"and": [
{
">=": [
{
"+": 23
},
50
]
},
{
"!=": 55
}
]
}
2)可以在查询中指定粒度
POST /v1/search/metric?metric_id=82a71169-1c7a-4996-a7b4-ea35b8e239c2&granularity=1second&granularity=1800s HTTP/1.1
Content-Type: application/json
Content-Length: 9
{
"=": 12
}
Content-Type: application/json
Content-Length: 9
{
"=": 12
}
3)Gnocchi允许对已经聚集的数据聚集
GET /v1/aggregation/metric?metric=c79894ef-aa69-4a60-a9b9-efd8c98a5628&metric=1b9f81ea-2240-44b3-a92e-773ad6799dcd&start=2014-10-06T14:34&aggregation=mean HTTP/1.1
Content-Length: 0
Content-Length: 0
4)可以对已经聚集的结果再次聚集,通过指定reaggregation参数
GET /v1/aggregation/metric?metric=c79894ef-aa69-4a60-a9b9-efd8c98a5628&metric=1b9f81ea-2240-44b3-a92e-773ad6799dcd&aggregation=mean&reaggregation=min HTTP/1.1
Content-Length: 0
Content-Length: 0
5)可以对资源搜索结果按照属性分组
POST /v1/aggregation/resource/instance/metric/cpu.util?groupby=host&groupby=flavor_id HTTP/1.1
Content-Type: application/json
Content-Length: 47
{
"=": {
"server_group": "my_autoscaling_group"
}
}
Content-Type: application/json
Content-Length: 47
{
"=": {
"server_group": "my_autoscaling_group"
}
}
6)获取支持的聚集方法
GET /v1/capabilities HTTP/1.1
Content-Length: 0
Content-Length: 0
7)获取Gnocchi安装状态
GET /v1/status HTTP/1.1
Content-Length: 0
Statsd Daemon Usage使用:
https://docs.openstack.org/developer/gnocchi/statsd.html
补充:
StatsD 是一个简单的网络守护进程,基于 Node.js 平台,通过 UDP 或者 TCP 方式侦听各种统计信息,包括计数器和定时器,并发送聚合信息到后端服务。
参见:https://docs.openstack.org/developer/gnocchi/statsd.html
Content-Length: 0
Statsd Daemon Usage使用:
https://docs.openstack.org/developer/gnocchi/statsd.html
补充:
StatsD 是一个简单的网络守护进程,基于 Node.js 平台,通过 UDP 或者 TCP 方式侦听各种统计信息,包括计数器和定时器,并发送聚合信息到后端服务。
参见:https://docs.openstack.org/developer/gnocchi/statsd.html