78 lines
3.4 KiB
HTML
78 lines
3.4 KiB
HTML
|
{{ template "head" . }}
|
||
|
|
||
|
{{ template "prom_content_head" . }}
|
||
|
<h1>Node Disk - {{ reReplaceAll "(.*?://)([^:/]+?)(:\\d+)?/.*" "$2" .Params.instance }}</h1>
|
||
|
|
||
|
<h3>Disk I/O Utilization</h3>
|
||
|
<div id="diskioGraph"></div>
|
||
|
<script>
|
||
|
new PromConsole.Graph({
|
||
|
node: document.querySelector("#diskioGraph"),
|
||
|
expr: [
|
||
|
"irate(node_disk_io_time_seconds_total{job='node',instance='{{ .Params.instance }}',device!~'^(md\\\\d+$|dm-)'}[5m]) * 100",
|
||
|
],
|
||
|
min: 0,
|
||
|
name: '[[ device ]]',
|
||
|
yUnits: "%",
|
||
|
yAxisFormatter: PromConsole.NumberFormatter.humanizeNoSmallPrefix,
|
||
|
yHoverFormatter: PromConsole.NumberFormatter.humanizeNoSmallPrefix,
|
||
|
yTitle: 'Disk I/O Utilization'
|
||
|
})
|
||
|
</script>
|
||
|
<h3>Filesystem Usage</h3>
|
||
|
<div id="fsGraph"></div>
|
||
|
<script>
|
||
|
new PromConsole.Graph({
|
||
|
node: document.querySelector("#fsGraph"),
|
||
|
expr: "100 - node_filesystem_avail_bytes{job='node',instance='{{ .Params.instance }}'} / node_filesystem_size_bytes{job='node'} * 100",
|
||
|
min: 0,
|
||
|
max: 100,
|
||
|
name: '[[ mountpoint ]]',
|
||
|
yUnits: "%",
|
||
|
yAxisFormatter: PromConsole.NumberFormatter.humanizeNoSmallPrefix,
|
||
|
yHoverFormatter: PromConsole.NumberFormatter.humanizeNoSmallPrefix,
|
||
|
yTitle: 'Filesystem Fullness'
|
||
|
})
|
||
|
</script>
|
||
|
|
||
|
{{ template "prom_right_table_head" }}
|
||
|
<th colspan="2">Disks</th>
|
||
|
</tr>
|
||
|
{{ range printf "node_disk_io_time_seconds_total{job='node',instance='%s'}" .Params.instance | query | sortByLabel "device" }}
|
||
|
<th colspan="2">{{ .Labels.device }}</th>
|
||
|
<tr>
|
||
|
<td>Utilization</td>
|
||
|
<td>{{ template "prom_query_drilldown" (args (printf "irate(node_disk_io_time_seconds_total{job='node',instance='%s',device='%s'}[5m]) * 100" .Labels.instance .Labels.device) "%" "printf.1f") }}</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td>Throughput</td>
|
||
|
<td>{{ template "prom_query_drilldown" (args (printf "irate(node_disk_read_bytes_total{job='node',instance='%s',device='%s'}[5m]) + irate(node_disk_written_bytes_total{job='node',instance='%s',device='%s'}[5m])" .Labels.instance .Labels.device .Labels.instance .Labels.device) "B/s" "humanize") }}</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td>Avg Read Time</td>
|
||
|
<td>{{ template "prom_query_drilldown" (args (printf "irate(node_disk_read_time_seconds_total{job='node',instance='%s',device='%s'}[5m]) / irate(node_disk_reads_completed_total{job='node',instance='%s',device='%s'}[5m])" .Labels.instance .Labels.device .Labels.instance .Labels.device) "s" "humanize") }}</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td>Avg Write Time</td>
|
||
|
<td>{{ template "prom_query_drilldown" (args (printf "irate(node_disk_write_time_seconds_total{job='node',instance='%s',device='%s'}[5m]) / irate(node_disk_writes_completed_total{job='node',instance='%s',device='%s'}[5m])" .Labels.instance .Labels.device .Labels.instance .Labels.device) "s" "humanize") }}</td>
|
||
|
</tr>
|
||
|
{{ end }}
|
||
|
<th colspan="2">Filesystem Fullness</th>
|
||
|
</tr>
|
||
|
{{ define "roughlyNearZero" }}
|
||
|
{{ if gt .1 . }}~0{{ else }}{{ printf "%.1f" . }}{{ end }}
|
||
|
{{ end }}
|
||
|
{{ range printf "node_filesystem_size_bytes{job='node',instance='%s'}" .Params.instance | query | sortByLabel "mountpoint" }}
|
||
|
<tr>
|
||
|
<td>{{ .Labels.mountpoint }}</td>
|
||
|
<td>{{ template "prom_query_drilldown" (args (printf "100 - node_filesystem_avail_bytes{job='node',instance='%s',mountpoint='%s'} / node_filesystem_size_bytes{job='node'} * 100" .Labels.instance .Labels.mountpoint) "%" "roughlyNearZero") }}</td>
|
||
|
</tr>
|
||
|
{{ end }}
|
||
|
<tr>
|
||
|
</tr>
|
||
|
{{ template "prom_right_table_tail" }}
|
||
|
|
||
|
{{ template "prom_content_tail" . }}
|
||
|
|
||
|
{{ template "tail" }}
|