collect disk size
This commit is contained in:
parent
07c07a6b7d
commit
2eb85eed75
@ -41,6 +41,8 @@ gauge_settings = [
|
|||||||
('kvm_io_write_chars', 'Number of bytes written including buffers', ['id']),
|
('kvm_io_write_chars', 'Number of bytes written including buffers', ['id']),
|
||||||
|
|
||||||
('kvm_nic_queues', 'Number of queues in multiqueue config', ['id', 'ifname']),
|
('kvm_nic_queues', 'Number of queues in multiqueue config', ['id', 'ifname']),
|
||||||
|
|
||||||
|
('kvm_disk_size', 'Size of virtual disk', ['id', 'disk_name']),
|
||||||
]
|
]
|
||||||
|
|
||||||
label_flags = [ "-id", "-name", "-cpu" ]
|
label_flags = [ "-id", "-name", "-cpu" ]
|
||||||
@ -163,6 +165,8 @@ def collect_kvm_metrics():
|
|||||||
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
|
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
# Try to find ID to pool mapping here
|
||||||
|
|
||||||
for proc, cmdline, id in procs:
|
for proc, cmdline, id in procs:
|
||||||
# Extract vm labels from cmdline
|
# Extract vm labels from cmdline
|
||||||
info_label_dict = {get_label_name(l): flag_to_label_value(cmdline,l) for l in label_flags}
|
info_label_dict = {get_label_name(l): flag_to_label_value(cmdline,l) for l in label_flags}
|
||||||
@ -221,6 +225,12 @@ def collect_kvm_metrics():
|
|||||||
disk_labels = {"id": id, "disk_name": disk_name}
|
disk_labels = {"id": id, "disk_name": disk_name}
|
||||||
prom_disk_info = create_or_get_info("kvm_disk", disk_labels.keys(), dynamic_infos, info_lock)
|
prom_disk_info = create_or_get_info("kvm_disk", disk_labels.keys(), dynamic_infos, info_lock)
|
||||||
prom_disk_info.add_metric(disk_labels.values(), disk_info)
|
prom_disk_info.add_metric(disk_labels.values(), disk_info)
|
||||||
|
disk_size = qmblock.get_disk_size(disk_info["disk_path"], disk_info["disk_type"])
|
||||||
|
if disk_size == None and disk_info["disk_type"] != "qcow2":
|
||||||
|
logging.debug(f"collect_kvm_metrics: failed to get disk size for {disk_info=}")
|
||||||
|
else:
|
||||||
|
gauge_dict["kvm_disk_size"].add_metric([id, disk_name], qmblock.get_disk_size(disk_info["disk_path"], disk_info["disk_type"]))
|
||||||
|
|
||||||
|
|
||||||
list(executor.map(map_netstat_proc, [ proc[2] for proc in procs ]))
|
list(executor.map(map_netstat_proc, [ proc[2] for proc in procs ]))
|
||||||
list(executor.map(map_disk_proc, [ proc[2] for proc in procs ]))
|
list(executor.map(map_disk_proc, [ proc[2] for proc in procs ]))
|
||||||
|
|||||||
@ -2,6 +2,7 @@ import pexpect
|
|||||||
import re
|
import re
|
||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
|
import stat
|
||||||
|
|
||||||
import pvecommon
|
import pvecommon
|
||||||
|
|
||||||
@ -94,6 +95,24 @@ def extract_disk_info_from_monitor(vm_id, retries = 0):
|
|||||||
disks_map[disk_name]["detect_zeroes"] = "on"
|
disks_map[disk_name]["detect_zeroes"] = "on"
|
||||||
return disks_map
|
return disks_map
|
||||||
|
|
||||||
|
def get_disk_size(disk_path, disk_type):
|
||||||
|
if stat.S_ISBLK(os.stat(disk_path).st_mode):
|
||||||
|
disk_name = os.path.basename(os.path.realpath(disk_path))
|
||||||
|
size_file_path = f"/sys/block/{disk_name}/size"
|
||||||
|
sector_size_file_path = f"/sys/block/{disk_name}/queue/hw_sector_size"
|
||||||
|
|
||||||
|
with open(size_file_path, 'r') as f:
|
||||||
|
sectors = int(f.read().strip())
|
||||||
|
|
||||||
|
with open(sector_size_file_path, 'r') as sector_size_file:
|
||||||
|
sector_size = int(sector_size_file.read().strip())
|
||||||
|
|
||||||
|
size_in_bytes = sectors * sector_size
|
||||||
|
else:
|
||||||
|
size_in_bytes = os.path.getsize(disk_path)
|
||||||
|
|
||||||
|
return size_in_bytes
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
import json
|
import json
|
||||||
import sys
|
import sys
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user