If we see that the migration to the new pve-{type}-9.0 rrd format has been done or is ongoing (new dir exists), we collect and send out the new format with additional columns for nodes and VMs (guests).
Those are: Nodes: * memfree * arcsize * pressures: * cpu some * io some * io full * mem some * mem full VMs: * memhost (memory consumption of all processes in the guests cgroup -> host view) * pressures: * cpu some * cpu full * io some * io full * mem some * mem full Signed-off-by: Aaron Lauterer <a.laute...@proxmox.com> --- Notes: changes since: RFC: * switch from pve9- to pve-{type}-9.0 schema PVE/Service/pvestatd.pm | 342 +++++++++++++++++++++++++++++----------- 1 file changed, 250 insertions(+), 92 deletions(-) diff --git a/PVE/Service/pvestatd.pm b/PVE/Service/pvestatd.pm index e3ea06bb..a22ae7bb 100755 --- a/PVE/Service/pvestatd.pm +++ b/PVE/Service/pvestatd.pm @@ -82,6 +82,16 @@ my $cached_kvm_version = ''; my $next_flag_update_time; my $failed_flag_update_delay_sec = 120; +# Checks if RRD files exist in the specified location. +my $rrd_dir_exists = sub { + my ($location) = @_; + if (-d "/var/lib/rrdcached/db/${location}") { + return 1; + } else { + return 0; + } +}; + sub update_supported_cpuflags { my $kvm_version = PVE::QemuServer::kvm_user_version(); @@ -180,32 +190,66 @@ sub update_node_status { my $meminfo = PVE::ProcFSTools::read_meminfo(); + my $pressures = PVE::ProcFSTools::read_pressure(); + my $dinfo = df('/', 1); # output is bytes # everything not free is considered to be used my $dused = $dinfo->{blocks} - $dinfo->{bfree}; my $ctime = time(); - my $data = $generate_rrd_string->( - [ - $uptime, - $sublevel, - $ctime, - $avg1, - $maxcpu, - $stat->{cpu}, - $stat->{wait}, - $meminfo->{memtotal}, - $meminfo->{memused}, - $meminfo->{swaptotal}, - $meminfo->{swapused}, - $dinfo->{blocks}, - $dused, - $netin, - $netout, - ], - ); - PVE::Cluster::broadcast_rrd("pve2-node/$nodename", $data); + my $data; + # TODO: drop old pve2- schema with PVE 10 + if ($rrd_dir_exists->("pve-node-9.0")) { + $data = $generate_rrd_string->( + [ + $uptime, + $sublevel, + $ctime, + $avg1, + $maxcpu, + $stat->{cpu}, + $stat->{wait}, + $meminfo->{memtotal}, + $meminfo->{memused}, + $meminfo->{swaptotal}, + $meminfo->{swapused}, + $dinfo->{blocks}, + $dused, + $netin, + $netout, + $meminfo->{memavailable}, + $meminfo->{arcsize}, + $pressures->{cpu}->{some}->{avg10}, + $pressures->{io}->{some}->{avg10}, + $pressures->{io}->{full}->{avg10}, + $pressures->{memory}->{some}->{avg10}, + $pressures->{memory}->{full}->{avg10}, + ], + ); + PVE::Cluster::broadcast_rrd("pve-node-9.0/$nodename", $data); + } else { + $data = $generate_rrd_string->( + [ + $uptime, + $sublevel, + $ctime, + $avg1, + $maxcpu, + $stat->{cpu}, + $stat->{wait}, + $meminfo->{memtotal}, + $meminfo->{memused}, + $meminfo->{swaptotal}, + $meminfo->{swapused}, + $dinfo->{blocks}, + $dused, + $netin, + $netout, + ], + ); + PVE::Cluster::broadcast_rrd("pve2-node/$nodename", $data); + } my $node_metric = { uptime => $uptime, @@ -273,44 +317,101 @@ sub update_qemu_status { my $data; my $status = $d->{qmpstatus} || $d->{status} || 'stopped'; my $template = $d->{template} ? $d->{template} : "0"; - if ($d->{pid}) { # running - $data = $generate_rrd_string->([ - $d->{uptime}, - $d->{name}, - $status, - $template, - $ctime, - $d->{cpus}, - $d->{cpu}, - $d->{maxmem}, - $d->{mem}, - $d->{maxdisk}, - $d->{disk}, - $d->{netin}, - $d->{netout}, - $d->{diskread}, - $d->{diskwrite}, - ]); + + # TODO: drop old pve2.3- schema with PVE 10 + if ($rrd_dir_exists->("pve-vm-9.0")) { + if ($d->{pid}) { # running + $data = $generate_rrd_string->([ + $d->{uptime}, + $d->{name}, + $status, + $template, + $ctime, + $d->{cpus}, + $d->{cpu}, + $d->{maxmem}, + $d->{mem}, + $d->{maxdisk}, + $d->{disk}, + $d->{netin}, + $d->{netout}, + $d->{diskread}, + $d->{diskwrite}, + $d->{memhost}, + $d->{pressurecpusome}, + $d->{pressurecpufull}, + $d->{pressureiosome}, + $d->{pressureiofull}, + $d->{pressurememorysome}, + $d->{pressurememoryfull}, + ]); + } else { + $data = $generate_rrd_string->([ + 0, + $d->{name}, + $status, + $template, + $ctime, + $d->{cpus}, + undef, + $d->{maxmem}, + undef, + $d->{maxdisk}, + $d->{disk}, + undef, + undef, + undef, + undef, + undef, + undef, + undef, + undef, + undef, + undef, + undef, + ]); + } + PVE::Cluster::broadcast_rrd("pve-vm-9.0/$vmid", $data); } else { - $data = $generate_rrd_string->([ - 0, - $d->{name}, - $status, - $template, - $ctime, - $d->{cpus}, - undef, - $d->{maxmem}, - undef, - $d->{maxdisk}, - $d->{disk}, - undef, - undef, - undef, - undef, - ]); + if ($d->{pid}) { # running + $data = $generate_rrd_string->([ + $d->{uptime}, + $d->{name}, + $status, + $template, + $ctime, + $d->{cpus}, + $d->{cpu}, + $d->{maxmem}, + $d->{mem}, + $d->{maxdisk}, + $d->{disk}, + $d->{netin}, + $d->{netout}, + $d->{diskread}, + $d->{diskwrite}, + ]); + } else { + $data = $generate_rrd_string->([ + 0, + $d->{name}, + $status, + $template, + $ctime, + $d->{cpus}, + undef, + $d->{maxmem}, + undef, + $d->{maxdisk}, + $d->{disk}, + undef, + undef, + undef, + undef, + ]); + } + PVE::Cluster::broadcast_rrd("pve2.3-vm/$vmid", $data); } - PVE::Cluster::broadcast_rrd("pve2.3-vm/$vmid", $data); PVE::ExtMetric::update_all($transactions, 'qemu', $vmid, $d, $ctime, $nodename); } @@ -506,44 +607,100 @@ sub update_lxc_status { my $d = $vmstatus->{$vmid}; my $template = $d->{template} ? $d->{template} : "0"; my $data; - if ($d->{status} eq 'running') { # running - $data = $generate_rrd_string->([ - $d->{uptime}, - $d->{name}, - $d->{status}, - $template, - $ctime, - $d->{cpus}, - $d->{cpu}, - $d->{maxmem}, - $d->{mem}, - $d->{maxdisk}, - $d->{disk}, - $d->{netin}, - $d->{netout}, - $d->{diskread}, - $d->{diskwrite}, - ]); + # TODO: drop old pve2.3-vm schema with PVE 10 + if ($rrd_dir_exists->("pve-vm-9.0")) { + if ($d->{pid}) { # running + $data = $generate_rrd_string->([ + $d->{uptime}, + $d->{name}, + $d->{status}, + $template, + $ctime, + $d->{cpus}, + $d->{cpu}, + $d->{maxmem}, + $d->{mem}, + $d->{maxdisk}, + $d->{disk}, + $d->{netin}, + $d->{netout}, + $d->{diskread}, + $d->{diskwrite}, + undef, + $d->{pressurecpusome}, + $d->{pressurecpufull}, + $d->{pressureiosome}, + $d->{pressureiofull}, + $d->{pressurememorysome}, + $d->{pressurememoryfull}, + ]); + } else { + $data = $generate_rrd_string->([ + 0, + $d->{name}, + $d->{status}, + $template, + $ctime, + $d->{cpus}, + undef, + $d->{maxmem}, + undef, + $d->{maxdisk}, + $d->{disk}, + undef, + undef, + undef, + undef, + undef, + undef, + undef, + undef, + undef, + undef, + undef, + ]); + } + PVE::Cluster::broadcast_rrd("pve-vm-9.0/$vmid", $data); } else { - $data = $generate_rrd_string->([ - 0, - $d->{name}, - $d->{status}, - $template, - $ctime, - $d->{cpus}, - undef, - $d->{maxmem}, - undef, - $d->{maxdisk}, - $d->{disk}, - undef, - undef, - undef, - undef, - ]); + if ($d->{status} eq 'running') { # running + $data = $generate_rrd_string->([ + $d->{uptime}, + $d->{name}, + $d->{status}, + $template, + $ctime, + $d->{cpus}, + $d->{cpu}, + $d->{maxmem}, + $d->{mem}, + $d->{maxdisk}, + $d->{disk}, + $d->{netin}, + $d->{netout}, + $d->{diskread}, + $d->{diskwrite}, + ]); + } else { + $data = $generate_rrd_string->([ + 0, + $d->{name}, + $d->{status}, + $template, + $ctime, + $d->{cpus}, + undef, + $d->{maxmem}, + undef, + $d->{maxdisk}, + $d->{disk}, + undef, + undef, + undef, + undef, + ]); + } + PVE::Cluster::broadcast_rrd("pve2.3-vm/$vmid", $data); } - PVE::Cluster::broadcast_rrd("pve2.3-vm/$vmid", $data); PVE::ExtMetric::update_all($transactions, 'lxc', $vmid, $d, $ctime, $nodename); } @@ -568,6 +725,7 @@ sub update_storage_status { my $data = $generate_rrd_string->([$ctime, $d->{total}, $d->{used}]); my $key = "pve2-storage/${nodename}/$storeid"; + $key = "pve-storage-9.0/${nodename}/$storeid" if $rrd_dir_exists->("pve-storage-9.0"); PVE::Cluster::broadcast_rrd($key, $data); PVE::ExtMetric::update_all($transactions, 'storage', $nodename, $storeid, $d, $ctime); -- 2.39.5 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel