声明:以下内容是对Gnocchi官网:https://docs.openstack.org/developer/gnocchi/architecture.html 内容的大致翻译,肯定有理解不到位的地方,还请多多包涵。
Gnocchi
1系统架构
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可以根据负载情况被添加。
2 Back-ends后端
Gnocchi使用三种不同的后端存储数据:一个用于存储新的即将到来的测量值(incoming driver),一个用于存储时间序列(storage driver),还有一个是用于检索数据(index driver)。 Incoming driver负责存储发送到监控项的新的measures。它默认是和storage driver是同一个driver。 Storage driver负责存储创建的监控项的measures。它接收时间戳timestamp和值,并且根据定义的归档策略来预先计算聚合值。 Indexer driver负责存储所有资源的索引,归档策略和监控项,以及它们的定义,类型和属性。Indexer driver也负连接资源和监控项。
2.1可用的存储后端
Gnocchi目前支持不同的存储后端: File(默认),Ceph(首选),OpenStack Swift,S3, Redis 这些后端是基于名叫Carbonara的中间件,该中间件是用来处理时间序列的操作,因为上述存储技术无法处理时间序列。 Carbonara对于后面上述的支持是比较好的,并且是易于扩展的。Ceph和Sift原本就是比文件driver更具有扩展性的。 根据你系统的大小,使用file driver并且存储你在磁盘上的数据一般各哦吟咏了。如果你需要扩展为数台服务器,你可以通过NFS来贡献数据。S3,Ceph和Swift drivers更容易扩展。Ceph提供了更好的一致性,因此推荐用Ceph。
2.2可用的index后端
gnocchi目前支持4种drivers。 PostgreSQL(首选) MySQL(至少版本是5.6.4) 这些drivers提供了大多数相同的性能和特性,PostgreSQL具有更高的性能并且有一些额外的特性(例如 资源持续时长计算)。
3如何设计Gnocchi的存储
Gnocchi使用一个基于Carnonara的定制化文件格式。在Gnocchi中,一个时间序列是点的集合,在时间序列中的每一个点都有measure或者采样值sample。存储格式会被各种技术压缩,因此计算时间序列的大小在最坏情况下被下面的公式计算: 点的个数 * 8byte = 时间序列大小 点的各数可以被下面的公式确定 点的个数 = 持续时间 / 粒度
3.1安装
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]
3.2Ceph要求
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库会编程可选的,但仍然推荐这样做。
4配置
4.1配置文件
默认地,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
4.2配置验证
API server支持不同的验证方法:basic(默认)会使用标准的HTTP验证头部或者keystone来使用OpenStack Keystone。如果你通过pip成功安装了keystone ,你可以设置api.auth_mode到keystone来开启Keystone 验证。
4.3初始化
一旦配置Gnocchi,你需要初始化indexe和storage: gnocchi-upgrade
4.4升级
为了从之前版本的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。
5
安装使用Devsatck
为了使得Gnocchi在devstack中,添加下面的语句到local.conf中: enable_plugin gnocchi https://github.com/openstack/gnocchi master 为了使得Grafana支持devstack,你需要开启 gnocchi-grafana: enable_service gnocchi-grafana 接下来需要开启devstack ./stack.sh
6运行Gnocchi
简单运行HTTP server和metric daemon: gnocchi-api gnocchi-metricd
6.1运行api作为wsgiapplication
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
7如何定义归档策略
在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秒的粒度)
8默认归档策略
默认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
9我们需要运行多少metricdworkers
默认地,gnocchi-metricd daemon会测量所有你的CPU功效来最大化CPU使用,当计算metric聚集。你可以使用gnocchi status命令查询HTTP API 获取监控项处理的聚集状态,它将会显示多少个监控项metric正在处理,正如处理存储的gnocchi-metricd。只要积压未办的时请不是持续增长,这意味着gnocchi-metricd能够处理正在被发送的个数的监控项。假如正在处理的measure的数量持续上升,你需要增加gnocchi-metricd daemons。你可以在任意数量的服务器上运行任意数量的metricd-daemon。
10如何监视Gnocchi
HTTP API中/V1/status endpoint返回各种信息,例如待处理的measures数量(measures backlog最大连接数量),你可以轻松监视(参见:我们需要运行多少metricd workers)。确保HTTP server和gnocchi-metricd daemon是运行的并且没有在日志中写入任何报警的时请,着就标志着对于整个系统是处于一种良好的状态。 所有measures的backlog状态可能不呢个正确反映除待处理的点的个数,当measures正在被批处理batch提交的时候。
11如何备用和恢复Gnocchi
为了能够从不幸的事件中恢复,你需要备份索引index和存储storage。着意味着创建一个数据库转储database dump(PostgreSQL or MySQL) 并且所奎找snapshots或者拷贝你的数据存储(Ceph .S3 , Swift,或者你的文件系统)。恢复的过程不会比初始部署的过程复杂: 恢复你的索引index和存储备份storage backups,如果需要就重新安装Gnocchi,并重启它。
12客户端
Gnocchi仅仅提供了一个Python的客户端和SDK,可以被pip安装 pip install gnocchiclient 包中提供了gnocchi的命令行工具,可以被用于发送请求到Gnocchi,你可以阅读完整的在线文档: http://gnocchi.xyz/gnocchiclient/
13 RESU API
用法
13.1验证
默认地。验证被配置为”basic”模式。你需要在你的HTTP请求携带一个有效的username中提供一个`Authorization’ header。”admin”密码被授予所有权限,而其他的用户名被识别为拥有标准权限。 你可以通过指定一个不同的pollcy_file而不是默认的来定制化你的权限。 如果你设置api.auth_mode到keystone中,OpenStack Keystone中间件将能够支持验证。需要验证每一个发送到Gnocchi的API请求的Keystone并提供一个X-Auth-Token有效头部。
13.2Metrics
Gnocchi提供了一种对象类型,叫做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" }
2)一旦创建了,你可以检索metric的信息
输入: 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。
4)默认顺序和limits,起始页面可以被查询中的参数修改
输入命令: 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。
6)一旦measures测量值内发送,可以在端点endpoint中使用GET来检索它们。
输入: 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。
8)时间戳格式可以用浮点数(UNIXepoch)或者一个ISO8601格式的时间戳。
输入: 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)。
10)可以提供granularity粒度参数来指定granularity来检索,而不是所有可能的granularity。
输入: 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的频率,重新采样的数据可能缺少了准确性,并且它和之前工作的聚集数据不同。
13.3Measuresbatching采样批量处理
可以对发送的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 } ] }
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会尝试创建它们并作为一种归档策略做匹配。
13.4归档策略
当发送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
13.5归档策略规则
Gnocchi提供了一种能力被叫做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" }
2)查询规则
GET /v1/archive_policy_rule/test_rule HTTP/1.1 Content-Length: 0
3)列出归档策略规则,按照字母表顺序逆序返回
GET /v1/archive_policy_rule HTTP/1.1 Content-Length: 0
4)删除归档规则;
DELETE /v1/archive_policy_rule/test_rule_delete HTTP/1.1 Content-Length: 0
13.6Resources资源
Gnocchi提供了能力来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来检索资源。
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类型的属性。
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" }
4)可以通过在创建时间的Locationheader中URL来检索资源
GET /v1/resource/generic/75c44741-cc60-4033-804e-2d3098c7d2e9 HTTP/1.1 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" }
6)查询资源修改历史
GET /v1/resource/instance/6868da77-fa82-4e67-aba9-270c5ae8cbca/history HTTP/1.1 Content-Length: 0
7)删除资源
DELETE /v1/resource/generic/75c44741-cc60-4033-804e-2d3098c7d2e9 HTTP/1.1 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" ] } }
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" } } 重要:当一个资源被删除了,所有相关的监控项都回同时被删除。当一批资源被删除,会要求一个属性器来避免删除整个数据库。
11)可以通过generictype或者过滤除资源类型来列出所有资源
输入: GET /v1/resource/generic HTTP/1.1 Content-Length: 0 当使用generic endpoint,没有属性指定资源类型。
12)为了检索到细节,使用指定资源类型的endpoint。
GET /v1/resource/instance HTTP/1.1 Content-Length: 0
13)或使用details= true在查询参数中
输入: 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键值对,
15)key是关系的名字,value是监控项
例如: 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" }
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
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" } }
13.7资源类型
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" }
2)查看定义的资源类型
GET /v1/resource_type/my_custom_type HTTP/1.1 Content-Length: 0
3)列出所有资源类型
GET /v1/resource_type HTTP/1.1 Content-Length: 0
4)如果没有资源与资源类型所关联,可以删除
DELETE /v1/resource_type/my_custom_type HTTP/1.1 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中创建新的标。这是一个繁琐的操作将会锁住一些表。
13.7搜索资源
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%" } }
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" } } ] }
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" } }
4)搜索资源修改历史
POST /v1/search/resource/instance?history=true HTTP/1.1 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" } }
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
13.9查询metrics的值
1)
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 } ] }
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 }
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
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
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" } }
6)获取支持的聚集方法
GET /v1/capabilities HTTP/1.1 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
时间: 2024-11-03 22:23:30