Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Ceph RGW】radosgw_usage_exporter监控用户使用量

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

原创
作者头像
runzhliu
修改于 2020-07-20 14:16:15
修改于 2020-07-20 14:16:15
2.3K20
代码可运行
举报
文章被收录于专栏:容器计算容器计算
运行总次数:0
代码可运行

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 输出哪些指标呢,我们可以看看源码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 就够了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 来管理进程。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

启动和验证就很简单了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 删除。

评论
登录后参与评论
2 条评论
热度
最新
radosgw_usage_exporter 的安装时怎么安装的, 我在安装的时候 执行 pip install requirements.txt 报错找哦不到匹配版本ERROR: Could not find a version that satisfies the requirement requirements.txt (from versions: none)ERROR: No matching distribution found for requirements.txt
radosgw_usage_exporter 的安装时怎么安装的, 我在安装的时候 执行 pip install requirements.txt 报错找哦不到匹配版本ERROR: Could not find a version that satisfies the requirement requirements.txt (from versions: none)ERROR: No matching distribution found for requirements.txt
11点赞举报
pip -v install 看一下debug信息,看起来是pip源没有requirement需要的pip包
pip -v install 看一下debug信息,看起来是pip源没有requirement需要的pip包
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
如何创建自定义数据pool的RGW实例
本文适用于jewel以上版本(含) 本文用到的软件版本如下 ceph:version 10.2.7 OS: Linux 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1+deb8u6 (2015-11-09) x86_64 GNU/Linux 1新建pool 创建数据pool,注意每个pool的pg配置规划,可以参考http://ceph.com/pgcalc/进行设计 ceph osd pool create .rgw.root 16 16 ceph osd pool
用户1260683
2018/01/31
3K0
Ceph Dashboard Promethus+Grafana监控
Ceph 的监控可视化界面方案很多----grafana、Kraken。但是从Luminous开始,Ceph 提供了原生的Dashboard功能,通过Dashboard可以获取Ceph集群的各种基本状态信息。 mimic版 (nautilus版) dashboard 安装。如果是 (nautilus版) 需要安装 ceph-mgr-dashboard
yuezhimi
2020/09/30
1.9K0
RGW Bucket Shard设计与优化-中
如何缓解 index shard 过大造成的影响 下面这些都是属于应急操作,属于快速止血止痛,部分操作属高危,一定要谨慎使用。 1 调整OSD的几个op超时参数 下面的几个参数只是用例,具体根据各位线上情况进行调整,但是不宜过大。 osd_op_thread_timeout = 90 #default is 15 osd_op_thread_suicide_timeout = 300 #default is 150 filestore_op_thread_timeout = 180 #d
用户1260683
2018/01/31
4.3K1
在 Kubernetes 中部署高可用 Harbor 镜像仓库
Harbor 是一个开放源代码容器镜像注册表,可通过基于角色权限的访问控制来管理镜像,还能扫描镜像中的漏洞并将映像签名为受信任。Harbor 是 CNCF 孵化项目,可提供合规性,性能和互操作性,以帮助跨 Kubernetes 和 Docker 等云原生计算平台持续,安全地管理镜像。
米开朗基杨
2021/01/12
2.3K1
使用cephadm安装ceph octopus
Cephadm使用容器和systemd安装和管理Ceph集群,并与CLI和仪表板GUI紧密集成。
没有故事的陈师傅
2020/12/16
4.4K8
使用cephadm安装ceph octopus
使用 Prometheus 监控 Ceph
本文是在 Ubuntu 16.04 最新版基础上安装 Prometheus 监控系统,Ceph 版本为 Luminous 12.2.8。
用户2443625
2018/10/08
2.9K0
使用 Prometheus 监控 Ceph
RGW Bucket Shard优化
bucket index是整个RGW里面一个非常关键的数据结构,用于存储bucket的索引数据,默认情况下单个bucket的index全部存储在一个shard文件(shard数量为0,主要以OMAP-keys方式存储在leveldb中),随着单个bucket内的Object数量增加,整个shard文件的体积也在不断增长,当shard文件体积过大就会引发各种问题。
Lucien168
2020/07/20
3.3K0
RGW Bucket Shard优化
Prometheus监控学习笔记之Prometheus普罗米修斯监控入门
视频讲解通过链接网易云课堂·IT技术快速入门学院进入,更多关于Prometheus的文章。
Jetpropelledsnake21
2018/12/25
9.8K0
ceph分布式存储-对象存储(RGW)搭建
PG数量的预估 集群中单个池的PG数计算公式如下:PG 总数 = (OSD 数 * 100) / 最大副本数 / 池数 (结果必须舍入到最接近2的N次幂的值)
Lucien168
2020/07/20
5K1
ceph-对象存储
作为文件系统的磁盘,操作系统不能直接访问对象存储。相反,它只能通过应用程序级别的API访问。ceph是一种分布式对象存储系统,通过ceph对象网关提供对象存储接口,也称为RADOS网关(RGW)接口,它构建在ceph RADOS层之上。RGW使用librgw(RADOS Gateway library)和librados,允许应用程序与ceph对象存储建立连接。RGW为应用程序提供了一个RESTful S3/swift兼容的接口,用于在ceph集群中以对象的形式存储数据。ceph还支持多租户对象存储,可以通过RESTful API访问。此外,RGW还支持ceph管理API,可以使用本机API调用来管理ceph存储集群。
yuezhimi
2020/09/30
4K0
Rocky8.5 部署 Ceph
陳斯托洛夫斯記
2024/08/07
4080
Ceph 监控中应用 Prometheus relabel 功能
工作环境中有三个独立的 Ceph 集群,分别负责对象存储、块存储和文件存储。搭建这几个 Ceph 集群时,我对 Ceph 重命名 Cluster name 的难度没有足够的了解,所以使用的都是默认的 cluster name:ceph,不巧的是 Prometheus 的 ceph_exporter 就是用 cluster name 来区分不同集群,结果是 Grafana 中各个集群的数据无法区分,所有的集群数据都绘制在了一个图标中,非常乱不说,而且部分数据还无法正常显示。
用户2443625
2018/10/25
1.4K0
RGW Bucket Shard设计与优化-上
1 bucket index背景简介 bucket index是整个RGW里面一个非常关键的数据结构,用于存储bucket的索引数据,默认情况下单个bucket的index全部存储在一个shard文件(shard数量为0,主要以OMAP-keys方式存储在leveldb中),随着单个bucket内的Object数量增加,整个shard文件的体积也在不断增长,当shard文件体积过大就会引发各种问题,常见的问题有: 对index pool进行scrub或deep-scrub的时候,如果shard对应的Obj
用户1260683
2018/01/31
5.3K0
2.Prometheus监控入门之监控配置说明
描述: 如果我们采用prometheus提供的二进制可执行文件进行搭建prometheus服务器,可以按照以下流程进行操作运行,二进制Release下载地址: https://github.com/prometheus/prometheus/releases
全栈工程师修炼指南
2022/09/29
5.8K0
2.Prometheus监控入门之监控配置说明
【问题修复】osd自杀问题跟踪
RGW的index数据以omap形式存储在OSD所在节点的leveldb中,当单个bucket存储的Object数量高达百万数量级的时候,deep-scrub和bucket list一类的操作将极大的消耗磁盘资源,导致对应OSD出现异常,如果不对bucket的index进行shard切片操作(shard切片实现了将单个bucket index的LevelDB实例水平切分到多个OSD上),数据量大了以后很容易出事。
Lucien168
2020/07/20
2K0
【问题修复】osd自杀问题跟踪
index pool的 large omap 处理
向单个bucket压测2000W个object,默认设置shard数为16,压测到1800W出现large omap,介绍一下错误定位和如何处理。
用户1260683
2019/03/08
4.6K0
从hammer到jewel的RGW升级实战-by秦牧羊
本篇来自秦牧羊的一篇分享,讲述的是从hammer升级到jewel的过程,以及其中的一些故障的处理,是一篇非常详细的实战分享
用户2772802
2018/08/06
6450
compression功能测试
compression功能测试 1.启动compression 功能描述: 1.目前从k版本开始支持compression,目前支持zlib、snappy、zstd,注意从ceph version 12.0.0开始才加入了zstd插件。 2.注意配置的时候如果设置的插件不存在或者名称错误,则不启用压缩特性。 3.目前压缩特性只对data_pool这个pool的数据有效。 4. 可以实时变更插件类型而不影响之前写入的数据访问。(写入object的时候每个object都有一个内置变量标记当前object使用的压
用户1260683
2018/01/31
1.5K0
初试 Ceph 存储之块设备、文件系统、对象存储
哎_小羊
2018/01/02
6.7K0
初试 Ceph 存储之块设备、文件系统、对象存储
Ceph理解
- 图虽然很复杂,但如果理解了几个基本操作的含义就很好读下来了,这里是三个操作的伪代码,take和emit很好理解,select主要是遍历当前bucket,如果出现重复、失败或者超载就跳过,其中稍微复杂的“first n”部分是一旦遇到失败,第一种情况是直接使用多备份,第二种情况是使用erasing code基本可以忽略。看着下面的图就更好理解具体的算法了
ZHaos
2019/02/27
2.4K0
推荐阅读
相关推荐
如何创建自定义数据pool的RGW实例
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验