Curve 是云原生计算基金会 (CNCF) Sandbox 项目,是网易主导自研和开源的高性能、易运维、云原生的分布式存储系统,由块存储 CurveBS 和文件系统 CurveFS 两部分组成。
概述
监控系统是一个产品不可或缺的组成部分,在事前预警,问题定位和追踪分析中扮演着重要的角色,即使在产品初期也能助力其进行问题快速定位和性能优化等。Curve 作为一个分布式存储系统,监控能直观的展示系统的各项指标,包括集群容量、集群负载、IO时延等。Curve 监控体系主要包括三个方面:指标暴露、指标收集与存储、指标展示。
指标暴露依赖 brpc[1] 内置的计数器类库 bvar[2];
指标收集与存储使用 Prometheus[3];
指标展示使用 Grafana[4]。
监控架构

Daily Report: 为了更加便捷的获取系统关键指标,Curve 支持从 Grafana 导出关键 dashbord 通过邮件每天定时发送到订阅者,这样不需要用户每天登录监控系统就可以持续的了解系统状态。
监控部署
curve-mornitor.sh 用于启停监控服务;
/mornitor/grafana/dashbaords 下面保存了 Curve 的监控面板模板;
/monitor/peometheus/target.json 保存了 Prometheus 采集数据的对象,
通过 target_json.py 后台定时更新(通过 curve tool 从系统获取),详细的监控部署步骤见 Curve Monitor[5]。
monitor├── curve-monitor.sh # curve集群监控的控制脚本,用于启动、停止、重启监控功能。├── docker-compose.yml # 编排监控系统相关容器的配置文件,包括prometheus容器、grafana容器。├── grafana # grafana相关目录│ ├── dashboards # grafana所有dashboards的json文件存放目录,grafana将从该目录加载文件来创建dashboards。│ │ ├── etcd.json│ │ ├── mds.json│ │ ├── metaserver.json│ │ └── clinet.json│ ├── grafana.ini # grafana的启动配置文件,将映射到容器的 `/etc/grafana/grafana.ini` 上│ ├── provisioning # grafana预配置相关目录,将映射到容器的`/etc/grafana/provisioning`上│ │ ├── dashboards│ │ │ └── all.yml│ │ └── datasources # grafana的datasources的json文件存放目录│ │ └── all.yml│ └── report # grafana日报临时目录,将映射到reporter容器的`/tmp/report`目录上│ └── README├── grafana-report.py├── prometheus # prometheus相关目录│ ├── prometheus.yml # prometheus的配置文件│ └── target.json├── README.md├── target.ini # target_json.py脚本依赖的一些配置├── target_json.py # 用于生成prometheus监控对象的python脚本,每隔一段时间用curve tool拉取监控目标并更新。└── update_dashboard.sh # 从grafana界面配置环境当中拉取最新的dashboard,用于更新该环境上grafana的界面。
监控的使用
纯文本的形态阅读困难。
瞬时值不利用趋势的观察。
此时需要部署 Curve 监控系统,部署完成后 Prometheus 会采集系统 Metric 信息并进保存,采集的对象来自 target.json,采集对象的状态可通过访问 Prometheus 页面查看,形态见 Metrics on Prometheus。指标存储的路径和存储时间等配置在 docker-compose.yml 中(默认保存7天,256GB)。
Prometheus 解决了指标存储的问题,Curve 采用 Grafana 进行指标的展示,在配置了数据源和导入 Curve 提供的 dashboard 模板之后,就可以查看包括 client、etcd、mds等在内的所有模块的运行指标,形态见 Metrics on Grafana。
Raw Metrics
访问服务暴露的 HTTP Metric 接口获取各服务的实时指标信息(http://ip:port/metrics),其中 port 为服务启动的端口(例如:Curve块存储 mds 默认端口6666,Curve 块存储 Chunkserver 默认端口820*):

Metrics on Prometheus
通过访问 http://localhost:9090 来访问 Prometheus; 在 http://localhost:9090/targets 中可以查看监控的目标状态:

Metrics on Grafana
通过访问 http://localhost:3000 来访问 Grafana;
1. Add Data Source
http://localhost:3000/datasources 设置数据源为 Prometheus,默认端口为9090。

2. Import Dashboard
http://localhost:3000/dashboard/import 导入 Curve 提供的 dashborad 模版,目录:
(mornitor/grafana/dashboards)

3. Dashboard Example
下面是 Curve 块存储 mds dashboard 中的部分 panel,展示了服务端的读写负载。

总结
上面介绍了 Curve 监控系统的架构、部署和用法。对于 Curve 的用户,特别是在性能测试和生产场景下,强烈建议部署 Curve 监控系统,便于问题的发现和定位。由于历史原因,目前 Curve 块存储和文件存储的监控是分开的,分别位于 curve/mornitor 和 curve/curvefs/mornitor 下,但架构、部署和使用基本没有区别,后续会考虑合并。
参考[1]:
https://github.com/apache/incubator-brpc
参考[2]:
https://github.com/apache/incubator-brpc/blob/master/docs/cn/bvar.md
参考[3]:
https://prometheus.io/docs/introduction/overview/
参考[4]:
https://github.com/grafana/grafana
参考[5]:
https://github.com/opencurve/curve/tree/master/curvefs/monitor
参考[6]:
https://github.com/opencurve/curveadm/wiki

Curve Testing Camp Time|万元大奖等你来拿!

关于 Curve
Curve 亦可作为云存储中间件使用 S3 兼容的对象存储作为数据存储引擎,为公有云用户提供高性价比的共享文件存储。
GitHub:https://github.com/opencurve/curve 官网:https://opencurve.io/ 用户论坛:https://ask.opencurve.io/ 微信群:搜索群助手微信号 OpenCurve_bot




