简介
Gnocchi是一个能够高效存储海量监控指标(metric)测量值的系统,其设计目标是能够在云环境中提供时序数据库服务(TDBaaS,Time-series Database as a Service),通过对外暴露HTTPREST API来创建和操作各种监控资源的属性和各项监控指标的测量数据,最终实现了监控指标测量值的查询与存储的数据规模无关。Gnocchi最初由Julien Danjou于2014年发起,旨在为Ceilometer项目解决其最初利用传统关系型数据库作为监控数据存储后端时,遇到的扩展性问题,提供存储海量监控数据的服务。
架构
Gnocchi的架构实际上并不复杂,主要由三个服务组成:一个HTTP REST API服务(gnocchi-api),一个异步处理监控数据的守护程序(gnocchi-metricd)和一个可选的statsd兼容的守护程序(gnocchi-statsd)负责监听通过TCP或者UDP发送的计量数据。监控数据由HTTP REST API服务和statsd守护程序负责获取,而metricd守护程序则在后台负责对获取的数据进行各种操作,包括测量值的计算和聚合,过期监控指标的清除等。其中,API服务和metricd守护程序都是无状态的,可以轻松的根据负载情况进行扩展。
数据存储
Gnocchi中的一个核心问题是解决各种监控数据的存储,上述的API和metricd服务都需要与Gnocchi的后端存储打交道。根据存储内容的不同,Gnocchi的存储后端可以大致分为三个部分:原始事件测量值存储(Measure Storage),聚合数据存储(Aggregate Storage)和索引数据存储(Index)。
原始测量值存储用来存储API服务和statsd守护程序收到的各项监控指标的原始的时间序列的测量值。
聚合数据存储负责存储由metricd守护程序根据收到的测量值及时间戳,依据资源设定的聚合策略聚合过后的数据。
通常这两种存储后端会配置成同样的驱动,常见的驱动包括:文件(默认)、Ceph(推荐)、Swift、S3和Redis。由于上述的存储驱动原生并不支持存储时间序列,为此Gnocchi开发了一个名为Carbonara中间库的来处理时序数据,从而驱动上述存储引擎。
索引数据存储用来保存各种资源、监控指标和归档策略的元数据,目前Gnocchi提供了PostgreSQL和MySQL的存储驱动。上述每个具体测量值对应的资源(Resource)和监控指标(Metric)都是存储在索引存储里面的。
Gnocchi与Ceilometer的集成
要让Ceilometer的计量(meter)后端接入Gnocchi,首先需要确保Gnocchi安装完毕,具体安装步骤可以参考其官方文档。之后在ceilometer.conf中修改相关配置即可。
[DEFAULT]
meter_dispatchers = gnocchi
[dispatcher_gnocchi]
filter_service_activity = False
url = http://{{CONTROLLER_IP}}:8041