204 lines
5.7 KiB
Nix
204 lines
5.7 KiB
Nix
{ pkgs, lib }:
|
|
let
|
|
inherit (import ./helpers.nix { inherit pkgs lib; })
|
|
T
|
|
mkRow
|
|
mkStat
|
|
mkTs
|
|
prom
|
|
mkDashboard
|
|
;
|
|
|
|
ctid = "id=~\"/machine.slice/container@.+\\\\.service/payload/.+\"";
|
|
ctsel = "id=~\"/machine.slice/container@$container\\\\.service/payload/.+\"";
|
|
|
|
ctall = "id=~\"/machine.slice/container@.+\\\\.service.*\"";
|
|
ctnet = "id=~\"/machine.slice/container@$container\\\\.service.*\"";
|
|
|
|
labeled =
|
|
m:
|
|
"label_replace(${m}, \"container\", \"$1\", \"id\", \"/machine.slice/container@(.+)\\\\.service/payload.+\")";
|
|
byContainer = m: "sum by (container) (${labeled m})";
|
|
|
|
labeledAll =
|
|
m:
|
|
"label_replace(${m}, \"container\", \"$1\", \"id\", \"/machine.slice/container@(.+)\\\\.service.*\")";
|
|
byContainerAll = m: "sum by (container) (${labeledAll m})";
|
|
|
|
nmSvc = m: "label_replace(${m}, \"container\", \"$1\", \"name\", \"container@(.+)\\\\.service\")";
|
|
|
|
orZero = m: fb: "(${m}) or on(container) (${fb} * 0)";
|
|
|
|
cpuAll =
|
|
rate:
|
|
orZero (byContainer "rate(container_cpu_usage_seconds_total{${ctid}}[${rate}])") "container_limit_cpu_cores";
|
|
memAll = orZero (byContainerAll "container_memory_rss{${ctall}}") "container_limit_memory_bytes";
|
|
taskAll = nmSvc "node_systemd_unit_tasks_current{name=~\"container@.+\"}";
|
|
in
|
|
mkDashboard {
|
|
name = "resources.json";
|
|
title = "Container Resources";
|
|
uid = "container-resources";
|
|
|
|
templating = [
|
|
{
|
|
name = "container";
|
|
type = "query";
|
|
datasource = prom;
|
|
query = "label_values(container_limit_cpu_cores, container)";
|
|
refresh = 2;
|
|
sort = 1;
|
|
includeAll = true;
|
|
multi = true;
|
|
current = {
|
|
selected = true;
|
|
text = [ "All" ];
|
|
value = [ "$__all" ];
|
|
};
|
|
}
|
|
];
|
|
|
|
panels = [
|
|
(mkRow "Overview")
|
|
(mkStat {
|
|
title = "Running";
|
|
decimals = 0;
|
|
expr = "count(node_systemd_unit_state{name=~\"container@.*\",state=\"active\"} == 1) or vector(0)";
|
|
})
|
|
(mkStat {
|
|
title = "CPU used";
|
|
decimals = 2;
|
|
expr = "sum(${cpuAll "5m"}) or vector(0)";
|
|
})
|
|
(mkStat {
|
|
title = "CPU limit";
|
|
decimals = 2;
|
|
expr = "sum(container_limit_cpu_cores) or vector(0)";
|
|
})
|
|
(mkStat {
|
|
title = "Mem RSS";
|
|
decimals = 1;
|
|
unit = "bytes";
|
|
expr = "sum(${memAll}) or vector(0)";
|
|
})
|
|
(mkStat {
|
|
title = "Mem limit";
|
|
decimals = 1;
|
|
unit = "bytes";
|
|
expr = "sum(container_limit_memory_bytes) or vector(0)";
|
|
})
|
|
(mkStat {
|
|
title = "Tasks";
|
|
decimals = 0;
|
|
expr = "sum(${taskAll}) or vector(0)";
|
|
})
|
|
|
|
(mkRow "All Containers")
|
|
(mkTs {
|
|
title = "CPU (cores)";
|
|
h = 24;
|
|
targets = [ (T (cpuAll "5m") "{{container}}") ];
|
|
})
|
|
(mkTs {
|
|
title = "Memory RSS";
|
|
unit = "bytes";
|
|
h = 24;
|
|
targets = [ (T memAll "{{container}}") ];
|
|
})
|
|
(mkTs {
|
|
title = "Tasks";
|
|
h = 24;
|
|
targets = [ (T taskAll "{{container}}") ];
|
|
})
|
|
(mkTs {
|
|
title = "CPU throttled %";
|
|
unit = "percent";
|
|
h = 12;
|
|
targets = [
|
|
(T "(${byContainer "rate(container_cpu_cfs_throttled_periods_total{${ctid}}[5m])"} / ${byContainer "rate(container_cpu_cfs_periods_total{${ctid}}[5m])"}) * 100 or on(container) (container_limit_cpu_cores * 0)" "{{container}}")
|
|
];
|
|
})
|
|
(mkTs {
|
|
title = "Network egress (bytes/s)";
|
|
unit = "Bps";
|
|
h = 24;
|
|
targets = [ (T "sum by (container) (container_network_receive_rate)" "{{container}}") ];
|
|
})
|
|
(mkTs {
|
|
title = "Network ingress (bytes/s)";
|
|
unit = "Bps";
|
|
h = 24;
|
|
targets = [ (T "sum by (container) (container_network_transmit_rate)" "{{container}}") ];
|
|
})
|
|
(mkTs {
|
|
title = "Disk read (bytes/s)";
|
|
unit = "Bps";
|
|
h = 24;
|
|
targets = [ (T (byContainer "rate(container_fs_reads_bytes_total{${ctid}}[5m])") "{{container}}") ];
|
|
})
|
|
(mkTs {
|
|
title = "Disk write (bytes/s)";
|
|
unit = "Bps";
|
|
h = 24;
|
|
targets = [
|
|
(T (byContainer "rate(container_fs_writes_bytes_total{${ctid}}[5m])") "{{container}}")
|
|
];
|
|
})
|
|
|
|
{
|
|
type = "row";
|
|
title = "$container";
|
|
repeat = "container";
|
|
collapsed = true;
|
|
panels = [ ];
|
|
gridPos = {
|
|
w = 24;
|
|
h = 1;
|
|
};
|
|
}
|
|
(mkTs {
|
|
title = "CPU (cores)";
|
|
targets = [
|
|
(T "sum(rate(container_cpu_usage_seconds_total{${ctsel}}[5m]))" "used")
|
|
(T "container_limit_cpu_cores{container=\"$container\"}" "limit")
|
|
];
|
|
})
|
|
(mkTs {
|
|
title = "CPU throttled %";
|
|
unit = "percent";
|
|
targets = [
|
|
(T "(sum(rate(container_cpu_cfs_throttled_periods_total{${ctsel}}[5m])) / sum(rate(container_cpu_cfs_periods_total{${ctsel}}[5m]))) * 100 or vector(0)" "throttled %")
|
|
];
|
|
})
|
|
(mkTs {
|
|
title = "Memory";
|
|
unit = "bytes";
|
|
targets = [
|
|
(T "sum(container_memory_rss{${ctnet}})" "RSS")
|
|
(T "sum(container_memory_working_set_bytes{${ctnet}})" "working set")
|
|
(T "container_limit_memory_bytes{container=\"$container\"}" "limit")
|
|
];
|
|
})
|
|
(mkTs {
|
|
title = "Network (bytes/s)";
|
|
unit = "Bps";
|
|
targets = [
|
|
(T "container_network_receive_rate{container=\"$container\"}" "{{device}} ↑")
|
|
(T "container_network_transmit_rate{container=\"$container\"}" "{{device}} ↓")
|
|
];
|
|
})
|
|
(mkTs {
|
|
title = "Disk IO (bytes/s)";
|
|
unit = "Bps";
|
|
targets = [
|
|
(T "sum(rate(container_fs_reads_bytes_total{${ctsel}}[5m]))" "read")
|
|
(T "sum(rate(container_fs_writes_bytes_total{${ctsel}}[5m]))" "write")
|
|
];
|
|
})
|
|
(mkTs {
|
|
title = "Tasks";
|
|
targets = [ (T "node_systemd_unit_tasks_current{name=\"container@$container.service\"}" "tasks") ];
|
|
})
|
|
];
|
|
}
|