| #!/bin/sh |
| # |
| # Display most relevant iostat bandwidth/latency numbers. The output is |
| # dependent on the name of the script/symlink used to call it. |
| # |
| |
| helpstr=" |
| iostat: Show iostat values since boot (summary page). |
| iostat-1s: Do a single 1-second iostat sample and show values. |
| iostat-10s: Do a single 10-second iostat sample and show values." |
| |
| script=$(basename "$0") |
| if [ "$1" = "-h" ] ; then |
| echo "$helpstr" | grep "$script:" | tr -s '\t' | cut -f 2- |
| exit |
| fi |
| |
| if [ "$script" = "iostat-1s" ] ; then |
| # Do a single one-second sample |
| extra="1 1" |
| # Don't show summary stats |
| y="-y" |
| elif [ "$script" = "iostat-10s" ] ; then |
| # Do a single ten-second sample |
| extra="10 1" |
| # Don't show summary stats |
| y="-y" |
| fi |
| |
| if [ -f "$VDEV_UPATH" ] ; then |
| # We're a file-based vdev, iostat doesn't work on us. Do nothing. |
| exit |
| fi |
| |
| out=$(eval "iostat $y -k -x $VDEV_UPATH $extra") |
| |
| # Sample output (we want the last two lines): |
| # |
| # Linux 2.6.32-642.13.1.el6.x86_64 (centos68) 03/09/2017 _x86_64_ (6 CPU) |
| # |
| # avg-cpu: %user %nice %system %iowait %steal %idle |
| # 0.00 0.00 0.00 0.00 0.00 100.00 |
| # |
| # Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util |
| # sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 |
| # |
| |
| # Get the column names |
| cols=$(echo "$out" | grep Device) |
| |
| # Get the values and tab separate them to make them cut-able. |
| vals="$(echo "$out" | grep -A1 Device | tail -n 1 | sed -r 's/[[:blank:]]+/\t/g')" |
| |
| i=0 |
| for col in $cols ; do |
| i=$((i+1)) |
| # Skip the first column since it's just the device name |
| if [ "$col" = "Device:" ] ; then |
| continue |
| fi |
| |
| # Get i'th value |
| val=$(echo "$vals" | cut -f "$i") |
| echo "$col=$val" |
| done |