暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Curve 监控体系详解

OpenCurve 2022-09-07
300


Curve 是云原生计算基金会 (CNCF) Sandbox 项目,是网易主导自研和开源的高性能、易运维、云原生的分布式存储系统,由块存储 CurveBS 和文件系统 CurveFS 两部分组成。

概述

监控系统是一个产品不可或缺的组成部分,在事前预警,问题定位和追踪分析中扮演着重要的角色,即使在产品初期也能助力其进行问题快速定位和性能优化等。Curve 作为一个分布式存储系统,监控能直观的展示系统的各项指标,包括集群容量、集群负载、IO时延等。Curve 监控体系主要包括三个方面:指标暴露、指标收集与存储、指标展示

  • 指标暴露依赖 brpc[1] 内置的计数器类库 bvar[2];

  • 标收集与存储使用 Prometheus[3];

  • 指标展示使用 Grafana[4]。


监控架构


Prometheus: 负责指标数据的采集和存储。采集的目标依赖 Promethethus 基于文件的服务发现能力,从 target.json 中获取,target.json 文件通过后台定时任务利用 curve tool (curve_ops_tool/curvefs_tool)获取系统待采集对象进行更新,同样也可以手动设置该文件内容;在获取到采集对象后 Prometheus 会从 Curve 各服务中 BRPC Server 暴露的 metric 接口进行信息采集和存储。
Grafana: 负责指标数据的展示。Grafana 以 Prometheus 作为数据源,Curve 已根据 metric 类别提供了丰富的 dashboard 模板,便于快速清晰的查看系统的各项指标。

Daily Report: 为了更加便捷的获取系统关键指标,Curve 支持从 Grafana 导出关键 dashbord 通过邮件每天定时发送到订阅者,这样不需要用户每天登录监控系统就可以持续的了解系统状态。


监控部署

Curve 的监控目录结构如下,监控以容器化方式部署:
  • 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 系统后(部署步骤[6])Metric 信息就已经产生了,此时的指标可以理解为 Raw Metric,可通过 Curve 服务暴露的 HTTP Metric 接口获取各服务的指标信息,但此时都是瞬时值,形态见如下 Raw Metric。此时的指标不利用观察:
    • 纯文本的形态阅读困难。

    • 瞬时值不利用趋势的观察。

    此时需要部署 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;

    设置数据源为 Prometheus,在数据源 Save & test 通过后,导入 Curve 提供的 dashboard 模板 json 文件,即可通过面板观测系统状态,当然你也可以根据自己的需求修改现有模板或添加新的 dashboard。

    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 Contributor>


    ------ END. ------


    Curve Testing Camp Time 火爆进行中 
    扫描上方二维码备注参赛方向,即可报名参加~
    详情请见

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



    关于 Curve 

    Curve 是一款高性能、易运维、云原生的开源分布式存储系统。可应用于主流的云原生基础设施平台:对接 OpenStack 平台为云主机提供高性能块存储服务;对接 Kubernetes 为其提供 RWO、RWX 等类型的持久化存储卷;对接 PolarFS 作为云原生数据库的高性能存储底座,完美支持云原生数据库的存算分离架构。

    Curve 亦可作为云存储中间件使用 S3 兼容的对象存储作为数据存储引擎,为公有云用户提供高性价比的共享文件存储。

    • GitHub:https://github.com/opencurve/curve
    • 官网https://opencurve.io/
    • 用户论坛:https://ask.opencurve.io/
    • 微信群:搜索群助手微信号 OpenCurve_bot

    文章转载自OpenCurve,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论