mirror of
https://github.com/prometheus/prometheus
synced 2024-12-26 08:33:06 +00:00
568ecce421
Move tables into the content area so that graphs and very long/wide tables are readable. The issue is present on the node-overview and node-disk pages when the tables are very long and wide. E.g., the host has lots of NICs, disks and filesystems and the filesystem names are very long. We have very long lists of long Docker filesystem names in our Kubernetes clusters. I know people don't really care about the console templates anymore but they are still useful in some cases and the queries are a nice reference for beginners.
123 lines
5.5 KiB
HTML
123 lines
5.5 KiB
HTML
{{ template "head" . }}
|
|
|
|
{{ template "prom_content_head" . }}
|
|
<h1>Node Overview - {{ reReplaceAll "(.*?://)([^:/]+?)(:\\d+)?/.*" "$2" .Params.instance }}</h1>
|
|
|
|
<h3>CPU Usage</h3>
|
|
<div id="cpuGraph"></div>
|
|
<script>
|
|
new PromConsole.Graph({
|
|
node: document.querySelector("#cpuGraph"),
|
|
expr: "sum by (mode)(irate(node_cpu{job='node',instance='{{ .Params.instance }}',mode!='idle'}[5m]))",
|
|
renderer: 'area',
|
|
max: {{ with printf "count(count by (cpu)(node_cpu{job='node',instance='%s'}))" .Params.instance | query }}{{ . | first | value }}{{ else}}undefined{{end}},
|
|
yAxisFormatter: PromConsole.NumberFormatter.humanizeNoSmallPrefix,
|
|
yHoverFormatter: PromConsole.NumberFormatter.humanizeNoSmallPrefix,
|
|
yTitle: 'Cores'
|
|
})
|
|
</script>
|
|
|
|
<h3>Disk I/O Utilization</h3>
|
|
<div id="diskioGraph"></div>
|
|
<script>
|
|
new PromConsole.Graph({
|
|
node: document.querySelector("#diskioGraph"),
|
|
expr: [
|
|
"irate(node_disk_io_time_ms{job='node',instance='{{ .Params.instance }}',device!~'^(md\\\\d+$|dm-)'}[5m]) / 1000 * 100",
|
|
],
|
|
min: 0,
|
|
name: '[[ device ]]',
|
|
yAxisFormatter: PromConsole.NumberFormatter.humanizeNoSmallPrefix,
|
|
yHoverFormatter: PromConsole.NumberFormatter.humanizeNoSmallPrefix,
|
|
yUnits: "%",
|
|
yTitle: 'Disk I/O Utilization'
|
|
})
|
|
</script>
|
|
|
|
<h3>Memory</h3>
|
|
<div id="memoryGraph"></div>
|
|
<script>
|
|
new PromConsole.Graph({
|
|
node: document.querySelector("#memoryGraph"),
|
|
renderer: 'area',
|
|
expr: [
|
|
"node_memory_Cached{job='node',instance='{{ .Params.instance }}'}",
|
|
"node_memory_Buffers{job='node',instance='{{ .Params.instance }}'}",
|
|
"node_memory_MemTotal{job='node',instance='{{ .Params.instance }}'} - node_memory_MemFree{job='node',instance='{{.Params.instance}}'} - node_memory_Buffers{job='node',instance='{{.Params.instance}}'} - node_memory_Cached{job='node',instance='{{.Params.instance}}'}",
|
|
"node_memory_MemFree{job='node',instance='{{ .Params.instance }}'}",
|
|
],
|
|
name: ["Cached", "Buffers", "Used", "Free"],
|
|
min: 0,
|
|
yUnits: "B",
|
|
yAxisFormatter: PromConsole.NumberFormatter.humanize1024,
|
|
yHoverFormatter: PromConsole.NumberFormatter.humanize1024,
|
|
yTitle: 'Memory'
|
|
})
|
|
</script>
|
|
|
|
{{ template "prom_right_table_head" }}
|
|
<tr><th colspan="2">Overview</th></tr>
|
|
<tr>
|
|
<td>User CPU</td>
|
|
<td>{{ template "prom_query_drilldown" (args (printf "sum(irate(node_cpu{job='node',instance='%s',mode='user'}[5m])) * 100 / count(count by (cpu)(node_cpu{job='node',instance='%s'}))" .Params.instance .Params.instance) "%" "printf.1f") }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>System CPU</td>
|
|
<td>{{ template "prom_query_drilldown" (args (printf "sum(irate(node_cpu{job='node',instance='%s',mode='system'}[5m])) * 100 / count(count by (cpu)(node_cpu{job='node',instance='%s'}))" .Params.instance .Params.instance) "%" "printf.1f") }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Memory Total</td>
|
|
<td>{{ template "prom_query_drilldown" (args (printf "node_memory_MemTotal{job='node',instance='%s'}" .Params.instance) "B" "humanize1024") }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Memory Free</td>
|
|
<td>{{ template "prom_query_drilldown" (args (printf "node_memory_MemFree{job='node',instance='%s'}" .Params.instance) "B" "humanize1024") }}</td>
|
|
</tr>
|
|
<tr>
|
|
<th colspan="2">Network</th>
|
|
</tr>
|
|
{{ range printf "node_network_receive_bytes{job='node',instance='%s',device!='lo'}" .Params.instance | query | sortByLabel "device" }}
|
|
<tr>
|
|
<td>{{ .Labels.device }} Received</td>
|
|
<td>{{ template "prom_query_drilldown" (args (printf "irate(node_network_receive_bytes{job='node',instance='%s',device='%s'}[5m])" .Labels.instance .Labels.device) "B/s" "humanize") }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>{{ .Labels.device }} Transmitted</td>
|
|
<td>{{ template "prom_query_drilldown" (args (printf "irate(node_network_transmit_bytes{job='node',instance='%s',device='%s'}[5m])" .Labels.instance .Labels.device) "B/s" "humanize") }}</td>
|
|
</tr>
|
|
{{ end }}
|
|
</tr>
|
|
<tr>
|
|
<th colspan="2">Disks</th>
|
|
</tr>
|
|
{{ range printf "node_disk_io_time_ms{job='node',instance='%s',device!~'^(md\\\\d+$|dm-)'}" .Params.instance | query | sortByLabel "device" }}
|
|
<tr>
|
|
<td>{{ .Labels.device }} Utilization</td>
|
|
<td>{{ template "prom_query_drilldown" (args (printf "irate(node_disk_io_time_ms{job='node',instance='%s',device='%s'}[5m]) / 1000 * 100" .Labels.instance .Labels.device) "%" "printf.1f") }}</td>
|
|
</tr>
|
|
{{ end }}
|
|
{{ range printf "node_disk_io_time_ms{job='node',instance='%s'}" .Params.instance | query | sortByLabel "device" }}
|
|
<tr>
|
|
<td>{{ .Labels.device }} Throughput</td>
|
|
<td>{{ template "prom_query_drilldown" (args (printf "irate(node_disk_sectors_read{job='node',instance='%s',device='%s'}[5m]) * 512 + irate(node_disk_sectors_written{job='node',instance='%s',device='%s'}[5m]) * 512" .Labels.instance .Labels.device .Labels.instance .Labels.device) "B/s" "humanize") }}</td>
|
|
</tr>
|
|
{{ end }}
|
|
<tr>
|
|
<th colspan="2">Filesystem Fullness</th>
|
|
</tr>
|
|
{{ define "roughlyNearZero" }}
|
|
{{ if gt .1 . }}~0{{ else }}{{ printf "%.1f" . }}{{ end }}
|
|
{{ end }}
|
|
{{ range printf "node_filesystem_size{job='node',instance='%s'}" .Params.instance | query | sortByLabel "mountpoint" }}
|
|
<tr>
|
|
<td>{{ .Labels.mountpoint }}</td>
|
|
<td>{{ template "prom_query_drilldown" (args (printf "100 - node_filesystem_free{job='node',instance='%s',mountpoint='%s'} / node_filesystem_size{job='node'} * 100" .Labels.instance .Labels.mountpoint) "%" "roughlyNearZero") }}</td>
|
|
</tr>
|
|
{{ end }}
|
|
</tr>
|
|
{{ template "prom_right_table_tail" }}
|
|
|
|
{{ template "prom_content_tail" . }}
|
|
|
|
{{ template "tail" }}
|