优化硬盘识别
This commit is contained in:
@@ -198,10 +198,10 @@ async function getOverviewMetrics(url, sourceName) {
|
||||
query(url, 'node_memory_MemTotal_bytes').catch(() => []),
|
||||
// Memory available per instance
|
||||
query(url, 'node_memory_MemAvailable_bytes').catch(() => []),
|
||||
// Disk total per instance (root filesystem + /data)
|
||||
query(url, 'sum by (instance, job) (node_filesystem_size_bytes{mountpoint=~"/|/data",fstype!="tmpfs"})').catch(() => []),
|
||||
// Disk free per instance (root filesystem + /data)
|
||||
query(url, 'sum by (instance, job) (node_filesystem_free_bytes{mountpoint=~"/|/data",fstype!="tmpfs"})').catch(() => []),
|
||||
// Disk total per instance (excluding virtual fs and restricted paths)
|
||||
query(url, 'sum by (instance, job) (node_filesystem_size_bytes{fstype!~"tmpfs|overlay|autofs|binfmt_misc|configfs|debugfs|fusectl|hugetlbfs|mqueue|proc|pstore|securityfs|sysfs|devpts|devtmpfs|nsfs|rpc_pipefs|selinuxfs|squashfs|tracefs", mountpoint!~"/tmp.*|/var/lib/docker/.*|/run/.*|/sys/.*|/dev/.*"})').catch(() => []),
|
||||
// Disk free per instance
|
||||
query(url, 'sum by (instance, job) (node_filesystem_free_bytes{fstype!~"tmpfs|overlay|autofs|binfmt_misc|configfs|debugfs|fusectl|hugetlbfs|mqueue|proc|pstore|securityfs|sysfs|devpts|devtmpfs|nsfs|rpc_pipefs|selinuxfs|squashfs|tracefs", mountpoint!~"/tmp.*|/var/lib/docker/.*|/run/.*|/sys/.*|/dev/.*"})').catch(() => []),
|
||||
// Network receive rate (bytes/sec)
|
||||
query(url, 'sum by (instance, job) (rate(node_network_receive_bytes_total{device!~"lo|veth.*|docker.*|br-.*"}[1m]))').catch(() => []),
|
||||
// Network transmit rate (bytes/sec)
|
||||
@@ -533,28 +533,59 @@ async function getServerDetails(baseUrl, instance, job) {
|
||||
sysLoad: `node_load1{instance="${node}",job="${job}"} * 100 / count(count(node_cpu_seconds_total{instance="${node}",job="${job}"}) by (cpu))`,
|
||||
memUsedPct: `(1 - (node_memory_MemAvailable_bytes{instance="${node}", job="${job}"} / node_memory_MemTotal_bytes{instance="${node}", job="${job}"})) * 100`,
|
||||
swapUsedPct: `((node_memory_SwapTotal_bytes{instance="${node}",job="${job}"} - node_memory_SwapFree_bytes{instance="${node}",job="${job}"}) / (node_memory_SwapTotal_bytes{instance="${node}",job="${job}"})) * 100`,
|
||||
rootFsUsedPct: `100 - ((node_filesystem_avail_bytes{instance="${node}",job="${job}",mountpoint="/",fstype!="rootfs"} * 100) / node_filesystem_size_bytes{instance="${node}",job="${job}",mountpoint="/",fstype!="rootfs"})`,
|
||||
rootFsUsedPct: `100 - ((node_filesystem_avail_bytes{instance="${node}",job="${job}",mountpoint="/",fstype!~"rootfs|tmpfs"} * 100) / node_filesystem_size_bytes{instance="${node}",job="${job}",mountpoint="/",fstype!~"rootfs|tmpfs"})`,
|
||||
cpuCores: `count(count(node_cpu_seconds_total{instance="${node}",job="${job}"}) by (cpu))`,
|
||||
memTotal: `node_memory_MemTotal_bytes{instance="${node}",job="${job}"}`,
|
||||
uptime: `node_time_seconds{instance="${node}",job="${job}"} - node_boot_time_seconds{instance="${node}",job="${job}"}`,
|
||||
netRx: `sum(rate(node_network_receive_bytes_total{instance="${node}",job="${job}",device!~'tap.*|veth.*|br.*|docker.*|virbr*|podman.*|lo.*|vmbr.*|fwbr.|ip.*|gre.*|virbr.*|vnet.*'}[1m]))`,
|
||||
netTx: `sum(rate(node_network_transmit_bytes_total{instance="${node}",job="${job}",device!~'tap.*|veth.*|br.*|docker.*|virbr*|podman.*|lo.*|vmbr.*|fwbr.|ip.*|gre.*|virbr.*|vnet.*'}[1m]))`,
|
||||
sockstatTcp: `node_sockstat_TCP_inuse{instance="${node}",job="${job}"}`,
|
||||
sockstatTcpMem: `node_sockstat_TCP_mem{instance="${node}",job="${job}"} * 4096` // Converting pages to bytes (assuming 4KB pages)
|
||||
sockstatTcpMem: `node_sockstat_TCP_mem{instance="${node}",job="${job}"} * 4096`,
|
||||
// Get individual partitions
|
||||
partitions_size: `node_filesystem_size_bytes{instance="${node}", job="${job}", fstype!~"tmpfs|overlay|autofs|binfmt_misc|configfs|debugfs|fusectl|hugetlbfs|mqueue|proc|pstore|securityfs|sysfs|devpts|devtmpfs|nsfs|rpc_pipefs|selinuxfs|squashfs|tracefs", mountpoint!~"/tmp.*|/var/lib/docker/.*|/run/.*|/sys/.*|/dev/.*"}`,
|
||||
partitions_free: `node_filesystem_free_bytes{instance="${node}", job="${job}", fstype!~"tmpfs|overlay|autofs|binfmt_misc|configfs|debugfs|fusectl|hugetlbfs|mqueue|proc|pstore|securityfs|sysfs|devpts|devtmpfs|nsfs|rpc_pipefs|selinuxfs|squashfs|tracefs", mountpoint!~"/tmp.*|/var/lib/docker/.*|/run/.*|/sys/.*|/dev/.*"}`
|
||||
};
|
||||
|
||||
const results = {};
|
||||
const queryPromises = Object.entries(queries).map(async ([key, expr]) => {
|
||||
try {
|
||||
const res = await query(url, expr);
|
||||
results[key] = res.length > 0 ? parseFloat(res[0].value[1]) : 0;
|
||||
if (key.startsWith('partitions_')) {
|
||||
results[key] = res.map(r => ({
|
||||
mountpoint: r.metric.mountpoint,
|
||||
value: parseFloat(r.value[1]) || 0
|
||||
}));
|
||||
} else {
|
||||
results[key] = res.length > 0 ? parseFloat(res[0].value[1]) : 0;
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(`[Prometheus] Error querying ${key} for ${node}:`, e.message);
|
||||
results[key] = 0;
|
||||
results[key] = key.startsWith('partitions_') ? [] : 0;
|
||||
}
|
||||
});
|
||||
|
||||
await Promise.all(queryPromises);
|
||||
|
||||
// Group partitions
|
||||
const partitionsMap = {};
|
||||
(results.partitions_size || []).forEach(p => {
|
||||
partitionsMap[p.mountpoint] = { mountpoint: p.mountpoint, size: p.value, free: 0 };
|
||||
});
|
||||
(results.partitions_free || []).forEach(p => {
|
||||
if (partitionsMap[p.mountpoint]) {
|
||||
partitionsMap[p.mountpoint].free = p.value;
|
||||
}
|
||||
});
|
||||
|
||||
results.partitions = Object.values(partitionsMap).map(p => ({
|
||||
...p,
|
||||
used: p.size - p.free,
|
||||
percent: p.size > 0 ? ((p.size - p.free) / p.size * 100) : 0
|
||||
})).sort((a, b) => a.mountpoint.localeCompare(b.mountpoint));
|
||||
|
||||
delete results.partitions_size;
|
||||
delete results.partitions_free;
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user