簡體   English   中英

如何通過python獲取ceph的磁盤使用情況

[英]how to get disk-usage of ceph by python

我想獲取ceph上的卷的磁盤使用情況。

rbd -p volumes list
volume-3968ca3d-d55f-47ac-9174-ff2614b0bde1
volume-493eee5c-3cdb-4c1c-b8d0-a24efba0c884

現在我可以通過其ID獲取使用情況

rbd disk-usage volumes/volume-3968ca3d-d55f-47ac-9174-ff2614b0bde1
NAME                                               PROVISIONED USED
volume-3968ca3d-d55f-47ac-9174-ff2614b0bde1@yasin1       1024M 532M

一切正常。 我想通過API執行此命令。 我閱讀了https://docs.ceph.com/docs/mimic/rados/api/python/數百次,找不到任何解決方案來獲取python的用法。

我該怎么做才能通過pyhton使用?

一切都在RadosRBD文檔中。

您的代碼將類似於以下代碼片段。 它將連接到群集。 它將獲得其IO上下文,創建一個RBD實例,該實例又可以檢索image_names,並且image_name用於訪問最終具有size()方法的圖像實例。 這將為我們提供圖像的最大尺寸。 要計算磁盤使用率,可以使用diff_iterate方法掃描整個映像以查找映像的現有/不存在的對象。 對於每個對象,都會調用計數器實例的cb_offset方法。 如果對象存在,則計數增加對象的長度。 對於沒有快速差異貼圖的圖像,這需要一段時間。 使用相同的技術來比較快照。 在這種情況下, diff_iterate的第三個參數指向快照。 在我們的例子中,我們希望與時間的開始(空圖像)進行比較,因此它為None。

import rados
import rbd

class DiffCounter:
    def __init__(self):
        self.count = 0
    def cb_offset(self, offset, length, exists):
        if exists:
            self.count+=length

def disk_usage():
    cluster = rados.Rados(conffile='/etc/ceph/ceph.conf')
    cluster.connect()
    try:
        ioctx = cluster.open_ioctx('rbd')
        try:
            rbd_inst = rbd.RBD()
            try:
                for image_name in rbd_inst.list(ioctx):
                    image = rbd.Image(ioctx, image_name)
                    max_size = image.size()
                    counter = DiffCounter()
                    image.diff_iterate(0,max_size,None,counter.cb_offset)
                    current_size = counter.count
                    print(image_name,max_size,current_size)
            finally:
                image.close()
        finally:
            ioctx.close()
    finally:
        cluster.shutdown()

if __name__ == '__main__':
    disk_usage()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM