首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Ceph RGW】radosgw_usage_exporter监控用户使用量

【Ceph RGW】radosgw_usage_exporter监控用户使用量

原创
作者头像
runzhliu
修改2020-07-20 22:16:15
1.9K2
修改2020-07-20 22:16:15
举报
文章被收录于专栏:容器计算容器计算容器计算

1 Overview

Ceph Mgr Prometheus 的模块没有提供用户数据使用量的指标,而在 Ceph 日常运维中,我们希望知道哪个用户用了多少存储容量,或者距离 Quota 还有多少,方便自动化扩容等等,所以推荐一个开源的 prometheus exeporter 来通过 radosgw 来输出用户在 Ceph 集群使用的量。 再次明确一下,这个 usage 的监控,主要需要两方面的指标。

  1. usage: 就是用户不同 bucket 的使用量
  2. bucket: 桶的情况,比如说读写操作的次数,成功率,大小等等

2 radosgw_usage_exporter

https://github.com/blemmenes/radosgw_usage_exporter

因为这个 exporter 其实是很简单的,可以查看一下 radosgw_usage_exporter.py 源码,分析一下 exporter 的实现。

核心的两个方法 _get_usage()_get_bucket_usage(),实际上这两个方法是通过 Ceph RGW 的 API 来封装的。

关于 radosgw_usage_exporter 输出哪些指标呢,我们可以看看源码。

def _setup_empty_prometheus_metrics(self):
        """
        The metrics we want to export.
        """

        self._prometheus_metrics = {
            'ops':
                CounterMetricFamily('radosgw_usage_ops_total',
                                    'Number of operations',
                                    labels=["bucket", "owner", "category", "cluster"]),
            'successful_ops':
                CounterMetricFamily('radosgw_usage_successful_ops_total',
                                    'Number of successful operations',
                                    labels=["bucket", "owner", "category", "cluster"]),
            'bytes_sent':
                CounterMetricFamily('radosgw_usage_sent_bytes_total',
                                    'Bytes sent by the RADOSGW',
                                    labels=["bucket", "owner", "category", "cluster"]),
            'bytes_received':
                CounterMetricFamily('radosgw_usage_received_bytes_total',
                                    'Bytes received by the RADOSGW',
                                    labels=["bucket", "owner", "category", "cluster"]),
            'bucket_usage_bytes':
                GaugeMetricFamily('radosgw_usage_bucket_bytes',
                                  'Bucket used bytes',
                                  labels=["bucket", "owner", "zonegroup", "cluster"]),
            'bucket_utilized_bytes':
                GaugeMetricFamily('radosgw_usage_bucket_utilized_bytes',
                                  'Bucket utilized bytes',
                                  labels=["bucket", "owner", "zonegroup", "cluster"]),
            'bucket_usage_objects':
                GaugeMetricFamily('radosgw_usage_bucket_objects',
                                  'Number of objects in bucket',
                                  labels=["bucket", "owner", "zonegroup", "cluster"]),
            'scrape_duration_seconds':
                GaugeMetricFamily('radosgw_usage_scrape_duration_seconds',
                                  'Ammount of time each scrape takes',
                                  labels=[])
        }

一共有8个指标,分别是:

  1. radosgw_usage_ops_total 是指 rgw 的操作次数。
  2. radosgw_usage_successful_ops_total 是指成功的操作次数。
  3. radosgw_usage_sent_bytes_total 是指发送的字节数。
  4. radosgw_usage_received_bytes_total 是指接收的字节数。
  5. radosgw_usage_bucket_bytes 是指对象的原始字节数。
  6. radosgw_usage_bucket_utilized_bytes 是指对象的实际字节数(因为会有压缩等操作)。
  7. radosgw_usage_bucket_objects 是指对象数量。
  8. radosgw_usage_scrape_duration_seconds 是指获取指标的时间秒数。

其实这些数据,Ceph RGW 都有提供接口通过 http 的方式获取的,然后通过 python 发送请求,得到 response 之后,根据返回结果的 JSON 重新选择如 size_utilized, owner 这些参数,构建指标的 Value 和 Label。

2.1 usage

先看一下 usage 方面,可以先参考 Ceph 的官方文档 get-usage。文档里有该 RESTful API 的详细请求和返回参数。 如果熟悉 Ceph RGW 的读者,应该是知道 adosgw-admin bucket stats 这个命令也是可以得到这些返回的结果的。

2.2 bucket

然后看 bucket 方面,同样是参考 Ceph 的官方文档 get-bucket-info。 如果熟悉 Ceph RGW 的读者,应该是知道 adosgw-admin bucket stats 这个命令也是可以得到这些返回的结果的。

3 关于权限

需要读取到 bucket 和 usage 的用户,并且对 bucket 和 usage 是至少有 read 权限的。可以通过下面命令创建一个 admin 账号来专门获取这些指标。这里要注意的是,权限不要放得太大了,完全 read 就够了。

radosgw-admin user create --uid=admin --display-name="admin"
radosgw-admin key create --uid=admin --key-type=s3 --access-key admin --secret-key admin
radosgw-admin caps add --uid=admin --caps="users=read;buckets=read;usage=read;metadata=read;zone=read"

4 metrics

我写了一个 service unit 来通过 systemctl 来管理进程。

cat >/lib/systemd/system/radosgw_usage_exporter.service <<EOF
[Unit]
Description=radosgw_usage_exporter

[Service]
Type=simple
ExecStart=/usr/bin/python /data/ceph/bucket-metrics/radosgw_usage_exporter.py -H localhost:7480 -a admin -s admin

[Install]
WantedBy=radosgw_usage_exporter.target
EOF

启动和验证就很简单了。

systemctl daemon-reload
systemctl stop radosgw_usage_exporter.service
systemctl start radosgw_usage_exporter.service
systemctl status radosgw_usage_exporter.service
# 最后 curl 一下默认端口的指标看看指标的 Value 和 Label 是否设置正确了
curl localhost:9242/metrics

然后针对 metrics 来构建一个 grafana 的图。

在这里插入图片描述
在这里插入图片描述

Done! 现在我们就可以很方便地看到 Ceph RGW 中,不同用户的使用量了!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 Overview
  • 2 radosgw_usage_exporter
    • 2.1 usage
      • 2.2 bucket
      • 3 关于权限
      • 4 metrics
      相关产品与服务
      Serverless HTTP 服务
      Serverless HTTP 服务基于腾讯云 API 网关 和 Web Cloud Function(以下简称“Web Function”)建站云函数(云函数的一种类型)的产品能力,可以支持各种类型的 HTTP 服务开发,实现了 Serverless 与 Web 服务最优雅的结合。用户可以快速构建 Web 原生框架,把本地的 Express、Koa、Nextjs、Nuxtjs 等框架项目快速迁移到云端,同时也支持 Wordpress、Discuz Q 等现有应用模版一键快速创建。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档