56 lines
2.0 KiB
TypeScript
56 lines
2.0 KiB
TypeScript
import axios from 'axios';
|
|
|
|
const PROMETHEUS_URL = process.env.PROMETHEUS_URL || 'http://prometheus-server.monitoring';
|
|
|
|
interface PrometheusRangeResult {
|
|
metric: Record<string, string>;
|
|
values: [number, string][];
|
|
}
|
|
|
|
interface PrometheusResponse {
|
|
status: string;
|
|
data: {
|
|
resultType: string;
|
|
result: PrometheusRangeResult[];
|
|
};
|
|
}
|
|
|
|
export async function queryRange(
|
|
query: string,
|
|
start: Date,
|
|
end: Date,
|
|
step: string = '5m'
|
|
): Promise<PrometheusRangeResult[]> {
|
|
const res = await axios.get<PrometheusResponse>(`${PROMETHEUS_URL}/api/v1/query_range`, {
|
|
params: {
|
|
query,
|
|
start: start.toISOString(),
|
|
end: end.toISOString(),
|
|
step,
|
|
},
|
|
});
|
|
return res.data.data.result;
|
|
}
|
|
|
|
export async function queryInstant(query: string): Promise<PrometheusRangeResult[]> {
|
|
const res = await axios.get<PrometheusResponse>(`${PROMETHEUS_URL}/api/v1/query`, {
|
|
params: { query },
|
|
});
|
|
return res.data.data.result;
|
|
}
|
|
|
|
export const QUERIES = {
|
|
cpuUsage: process.env.QUERY_CPU
|
|
|| '100 - (avg by (instance)(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)',
|
|
memoryUsage: process.env.QUERY_MEMORY
|
|
|| '(1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100',
|
|
diskUsage: process.env.QUERY_DISK
|
|
|| 'sum by (mountpoint,fstype)((1 - node_filesystem_avail_bytes{fstype!~"tmpfs|overlay|nfs",mountpoint!~"/boot.*"} / node_filesystem_size_bytes{fstype!~"tmpfs|overlay|nfs",mountpoint!~"/boot.*"}) * 100)',
|
|
nasUsage: process.env.QUERY_NAS
|
|
|| '((node_filesystem_size_bytes{fstype=~"nfs", node=~".*(bastion).*"} - node_filesystem_free_bytes{fstype=~"nfs", node=~".*(bastion).*"}) / node_filesystem_size_bytes{fstype=~"nfs", node=~".*(bastion).*"}) * 100',
|
|
networkReceive: process.env.QUERY_NET_RX
|
|
|| 'sum(rate(container_network_receive_bytes_total{namespace="ingress-nginx", pod=~"ingress-nginx-controller-.*"}[5m]))',
|
|
networkTransmit: process.env.QUERY_NET_TX
|
|
|| 'sum(rate(container_network_transmit_bytes_total{namespace="ingress-nginx", pod=~"ingress-nginx-controller-.*"}[5m]))',
|
|
};
|