需求
在我们的需求中,要统计radosgw中每个用户的使用信息,然后计算用户的花费
包括三部分:
- 存储空间费用
- 流量费用
- 请求费用
存储空间统计:可以通过radosgw-admin命令获取
流量统计/请求次数统计:可以通过radosgw支持usage info的统计和获取,对应的也是radosgw-admin命令
Bucket stats
radosgw-admin bucket stats
1 | 命令:radosgw-admin bucket stats --uid=[userid] |
上面输出信息中,有bucket的objects个数和占用空间。
bucket stats对应的admin ops
1 | GET /{admin}/bucket?format=json HTTP/1.1 |
http://docs.ceph.com/docs/jewel/radosgw/adminops/#get-bucket-info
支持RGW usage
enable rgw usage
默认radosgw的usage是关闭的,需要修改ceph.conf文件打开,配置如下:
1 | [client.rgw.BJ-001-001] |
创建对应pool .usage
创建usage需要的pools
1 | ceph osd pool create .usage 64 ## usage_log_pool |
重启rgw服务
重启radosgw服务:/etc/init.d/radosgw restart
检查rgw的usage配置
1 | $ ceph daemon /var/run/ceph/ceph-client/ceph-client.rgw.BJ-001-001.76550.asok config show | grep usage |
上面的配置信息中有关于usage log更新的配置,所以默认刚开启配置后查看usage信息还是空的,等上一段时间再查看就有输出了。
查看RGW usage信息
命令格式
1 | radosgw-admin -h |
radosgw-admin usage show命令
可以查看指定user在某一时间段的统计信息。
1 | 用法:radosgw-admin usage show [--uid={uid}] [--start-date={date}] [--end-date={date}] [--categories=<list>] [--show-log-entries=<flag>] [--show-log-sum=<flag>] |
线上环境实际输出:
1 | $ radosgw-admin usage show --uid=S3User |
上面输出中,summery里的total信息就足够我们来计费使用了。
usage show对应的admin ops
1 | GET /{admin}/usage?format=json HTTP/1.1 |
http://docs.ceph.com/docs/jewel/radosgw/adminops/#get-usage
radosgw-admin usage trim命令
修剪rgw的usage log,这是因为在长时间使用下,以往的usage log会占用ceph存储空间。在确定不需要的时间段后,通过该命令删除这部分记录。
用法示例:
1 | radosgw-admin usage trim --start-date=2010-01-01 --end-date=2010-12-31 |
usage trim对应的admin ops
1 | DELETE /{admin}/usage?format=json HTTP/1.1 |
http://docs.ceph.com/docs/jewel/radosgw/adminops/#trim-usage
RGW log信息
radosgw log功能可以记录每个ops的操作记录,方面查看历史操作和统计信息,使用方法如下。
enable rgw log
1 | [client.rgw.BJ-001-001] |
或者命令:
1 | ceph daemon /var/run/ceph/ceph-client/ceph-client.rgw.BJ-001-001.7455.asok config set rgw_enable_ops_log true |
rgw log命令
可用通过radosgw-admin log命令操作
1 | $ radosgw-admin log list |
问题
测试发现,无论是部署了几个rgw,因为usage信息是存储在rados系统的.usage pool里的,不区分不同rgw过来的请求,所以通过radosgw-admin usage命令看到的是所有rgw操作的统计信息,这样我们没法区分内网和外网的rgw流量和ops个数。
参考青云,青云支持内网/外网流量和ops统计分开计费。
https://docs.qingcloud.com/guide/qingstor.html#id15
若内网的rgw流量不计费,则可以通过配置rgw的参数实现,可配置的rgw参数为:
1 | rgw_enable_usage_log:true/false ## 是否enable usage统计 |
每个rgw都可以配置独立的上述参数,所以针对内网的rgw,我们可以配置rgw_enable_usage_log = false
,这样通过内网访问的操作都不会记在usage里。
参考资料
http://docs.ceph.com/docs/jewel/man/8/radosgw/#usage-logging
http://docs.ceph.com/docs/jewel/man/8/radosgw-admin/
http://docs.ceph.com/docs/jewel/radosgw/admin/#usage
http://docs.ceph.com/docs/jewel/radosgw/adminops/
http://lyang.top/2016/01/04/Ceph-usage-%E7%9A%84%E6%9F%A5%E8%AF%A2/