添加连接数指标评估
This commit is contained in:
@@ -211,7 +211,9 @@ async function getOverviewMetrics(url, sourceName) {
|
||||
netTxResult,
|
||||
netRx24hResult,
|
||||
netTx24hResult,
|
||||
targetsResult
|
||||
targetsResult,
|
||||
conntrackEntriesResult,
|
||||
conntrackLimitResult
|
||||
] = await Promise.all([
|
||||
// CPU usage per instance: 1 - avg idle
|
||||
query(url, '100 - (avg by (instance, job) (rate(node_cpu_seconds_total{mode="idle"}[1m])) * 100)').catch(() => []),
|
||||
@@ -234,7 +236,11 @@ async function getOverviewMetrics(url, sourceName) {
|
||||
// 24h Network transmit total (bytes)
|
||||
query(url, 'sum by (instance, job) (increase(node_network_transmit_bytes_total{device!~"lo|veth.*|docker.*|br-.*"}[24h]))').catch(() => []),
|
||||
// Targets status from /api/v1/targets
|
||||
getTargets(url).catch(() => [])
|
||||
getTargets(url).catch(() => []),
|
||||
// Conntrack entries
|
||||
query(url, 'node_nf_conntrack_entries').catch(() => []),
|
||||
// Conntrack limits
|
||||
query(url, 'node_nf_conntrack_entries_limit').catch(() => [])
|
||||
]);
|
||||
|
||||
// Fetch 24h detailed traffic using the A*duration logic
|
||||
@@ -270,9 +276,12 @@ async function getOverviewMetrics(url, sourceName) {
|
||||
netTx: 0,
|
||||
traffic24hRx: 0,
|
||||
traffic24hTx: 0,
|
||||
conntrackEntries: 0,
|
||||
conntrackLimit: 0,
|
||||
up: false,
|
||||
memPercent: 0,
|
||||
diskPercent: 0
|
||||
diskPercent: 0,
|
||||
conntrackPercent: 0
|
||||
});
|
||||
}
|
||||
const inst = instances.get(token);
|
||||
@@ -348,6 +357,16 @@ async function getOverviewMetrics(url, sourceName) {
|
||||
inst.traffic24hTx = parseFloat(r.value[1]) || 0;
|
||||
}
|
||||
|
||||
// Parse conntrack
|
||||
for (const r of conntrackEntriesResult) {
|
||||
const inst = getOrCreate(r.metric);
|
||||
inst.conntrackEntries = parseFloat(r.value[1]) || 0;
|
||||
}
|
||||
for (const r of conntrackLimitResult) {
|
||||
const inst = getOrCreate(r.metric);
|
||||
inst.conntrackLimit = parseFloat(r.value[1]) || 0;
|
||||
}
|
||||
|
||||
for (const inst of instances.values()) {
|
||||
if (!inst.up && (inst.cpuPercent > 0 || inst.memTotal > 0)) {
|
||||
inst.up = true;
|
||||
@@ -355,6 +374,7 @@ async function getOverviewMetrics(url, sourceName) {
|
||||
// Calculate percentages on backend
|
||||
inst.memPercent = inst.memTotal > 0 ? (inst.memUsed / inst.memTotal * 100) : 0;
|
||||
inst.diskPercent = inst.diskTotal > 0 ? (inst.diskUsed / inst.diskTotal * 100) : 0;
|
||||
inst.conntrackPercent = inst.conntrackLimit > 0 ? (inst.conntrackEntries / inst.conntrackLimit * 100) : 0;
|
||||
}
|
||||
|
||||
const allInstancesList = Array.from(instances.values());
|
||||
@@ -602,6 +622,9 @@ async function getServerDetails(baseUrl, instance, job, settings = {}) {
|
||||
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`,
|
||||
conntrackEntries: `node_nf_conntrack_entries{instance="${node}",job="${job}"}`,
|
||||
conntrackLimit: `node_nf_conntrack_entries_limit{instance="${node}",job="${job}"}`,
|
||||
conntrackUsedPct: `(node_nf_conntrack_entries{instance="${node}",job="${job}"} / node_nf_conntrack_entries_limit{instance="${node}",job="${job}"}) * 100`,
|
||||
// Get individual partitions (excluding virtual and FUSE mounts)
|
||||
partitions_size: `node_filesystem_size_bytes{instance="${node}", job="${job}", fstype!~"tmpfs|autofs|proc|sysfs|fuse.*", mountpoint!~"/tmp.*|/var/lib/docker/.*|/run/.*"}`,
|
||||
partitions_free: `node_filesystem_free_bytes{instance="${node}", job="${job}", fstype!~"tmpfs|autofs|proc|sysfs|fuse.*", mountpoint!~"/tmp.*|/var/lib/docker/.*|/run/.*"}`
|
||||
@@ -771,7 +794,8 @@ async function getServerHistory(baseUrl, instance, job, metric, range = '1h', st
|
||||
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`
|
||||
sockstatTcpMem: `node_sockstat_TCP_mem{instance="${node}",job="${job}"} * 4096`,
|
||||
conntrackUsedPct: `(node_nf_conntrack_entries{instance="${node}",job="${job}"} / node_nf_conntrack_entries_limit{instance="${node}",job="${job}"}) * 100`
|
||||
};
|
||||
|
||||
const rangeObj = parseRange(range, start, end);
|
||||
|
||||
Reference in New Issue
Block a user