no way to compare when less than two revisions
Differences
This shows you the differences between two versions of the page.
| — | monitors:fs-test [2013/02/28 06:16] (current) – created - external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== xymon-fstest ====== | ||
| + | ^ Author | [[ jlaidman+xymon-fstest@rebel-it.com.au | Jeremy Laidman ]] | | ||
| + | ^ Compatibility | Xymon 4.2+ | | ||
| + | ^ Requirements | Bourne or Bash shell (or compatible), | ||
| + | ^ Download | None | | ||
| + | ^ Last Update | 2013-02-28 | | ||
| + | |||
| + | ===== Description ===== | ||
| + | This script checks filesystems and reports them in their own separate | ||
| + | tests ('' | ||
| + | |||
| + | Initially, only disks with non-green status will have the new "'' | ||
| + | Once a page exists, it will be persistent, going green when the " | ||
| + | |||
| + | If the "'' | ||
| + | |||
| + | Filesystem mount points are used in the test name, where possible (eg "''/''" | ||
| + | |||
| + | Screenshot: | ||
| + | {{ : | ||
| + | ===== Installation ===== | ||
| + | === Client side === | ||
| + | Ensure " | ||
| + | |||
| + | === Server side === | ||
| + | Copy to server/ext/ directory, create entry in tasks.cfg or new file in tasks.d/ directory. | ||
| + | |||
| + | For troubleshooting, | ||
| + | ===== Source ===== | ||
| + | ==== fs-test.sh ==== | ||
| + | |||
| + | Copy this to the " | ||
| + | |||
| + | <hidden onHidden=" | ||
| + | < | ||
| + | |||
| + | #!/bin/sh | ||
| + | |||
| + | # Checks filesystems and reports them in their own separate | ||
| + | # tests (fs_1, fs_2, ...) as well as the one combined disk test. | ||
| + | # Todo: | ||
| + | # - allow specifying filesystems to include/ | ||
| + | # - allow specifying per-filesystem thresholds | ||
| + | |||
| + | die() { echo " | ||
| + | |||
| + | [ " | ||
| + | |||
| + | do_usage() { | ||
| + | echo " | ||
| + | echo "-m match : match hostname" | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | } | ||
| + | |||
| + | map_fsname() { | ||
| + | # maps filesystem name to test name | ||
| + | # must try to keep it short (no more than 4 chars) | ||
| + | # TODO: allow mapping in hosts.cfg | ||
| + | NEWNAME="" | ||
| + | case $1 in | ||
| + | /) NEWNAME=" | ||
| + | /?) | ||
| + | /??) NEWNAME=`IFS=/; | ||
| + | /???) | ||
| + | /???? | ||
| + | esac | ||
| + | echo " | ||
| + | [ 0$DEBUG -ge 2 ] && echo " | ||
| + | } | ||
| + | |||
| + | while [ " | ||
| + | case $1 in | ||
| + | -h|--h*) | ||
| + | -d|--debug) | ||
| + | -y|--dryrun) | ||
| + | -m|--match) | ||
| + | --) | ||
| + | -*) die " | ||
| + | *) break; | ||
| + | esac | ||
| + | shift | ||
| + | done | ||
| + | |||
| + | [ 0$DEBUG -gt 0 ] && echo "Debug level: $DEBUG" | ||
| + | |||
| + | HOSTLIST=`$XYMON $XYMSRV " | ||
| + | for HOST in $HOSTLIST; do | ||
| + | if [ " | ||
| + | if [ " | ||
| + | [ 0$DEBUG -gt 1 ] && echo "Host $HOST matched $MATCHHOST" | ||
| + | else | ||
| + | [ 0$DEBUG -gt 3 ] && echo "Host $HOST did not match $MATCHHOST" | ||
| + | continue | ||
| + | fi | ||
| + | fi | ||
| + | # | ||
| + | REPORT=`$XYMON $XYMSRV " | ||
| + | REPORT=`echo " | ||
| + | [ " | ||
| + | COLOR=`$XYMON $XYMSRV " | ||
| + | # | ||
| + | [ 0$DEBUG -gt 0 ] && echo " | ||
| + | [ 0$DEBUG -gt 2 ] && { echo " | ||
| + | REPORT=`echo " | ||
| + | case $COLOR in | ||
| + | purple) | ||
| + | # no recent disk status? don't report our own | ||
| + | ;; | ||
| + | red|yellow|blue) | ||
| + | FSLIST=`echo " | ||
| + | FSLIST=`echo $FSLIST` | ||
| + | POS=0 | ||
| + | REPLIST="" | ||
| + | for FS in $FSLIST; do | ||
| + | POS=`expr $POS + 1` | ||
| + | FSCOL=`echo " | ||
| + | [ " | ||
| + | [ " | ||
| + | |||
| + | FSNAME=`map_fsname $FS` | ||
| + | [ " | ||
| + | # | ||
| + | |||
| + | TESTNAME=" | ||
| + | [ 0$DEBUG -gt 1 ] && echo " | ||
| + | MSG=" | ||
| + | $REPORT" | ||
| + | if [ 0$DRYRUN -gt 0 ]; then | ||
| + | [ 0$DEBUG -ge 1 ] && echo $XYMON $XYMSRV " | ||
| + | else | ||
| + | [ 0$DEBUG -ge 2 ] && echo $XYMON $XYMSRV " | ||
| + | $XYMON $XYMSRV " | ||
| + | fi | ||
| + | REPLIST=" | ||
| + | done | ||
| + | |||
| + | if [ 0$DEBUG -gt 0 ]; then | ||
| + | [ " | ||
| + | fi | ||
| + | |||
| + | # clean up any old fs_* names not in $REPLIST | ||
| + | TESTNAMES=`$XYMON $XYMSRV " | ||
| + | for TESTNAME in $TESTNAMES; do | ||
| + | FOUND="" | ||
| + | for REP in $REPLIST; do | ||
| + | [ " | ||
| + | done | ||
| + | if [ " | ||
| + | [ 0$DEBUG -ge 2 ] && echo " | ||
| + | if [ 0$DRYRUN -gt 0 ]; then | ||
| + | [ 0$DEBUG -ge 1 ] && echo $XYMON $XYMSRV "drop $HOST $TESTNAME" | ||
| + | else | ||
| + | $XYMON $XYMSRV "drop $HOST $TESTNAME" | ||
| + | fi | ||
| + | fi | ||
| + | done | ||
| + | ;; | ||
| + | green) | ||
| + | [ 0$DEBUG -ge 1 ] && echo "All green, nothing to do" | ||
| + | # TODO: remove any entries we have added previously | ||
| + | TESTNAMES=`$XYMON $XYMSRV " | ||
| + | for TESTNAME in $TESTNAMES; do | ||
| + | [ 0$DEBUG -ge 2 ] && echo " | ||
| + | if [ 0$DRYRUN -gt 0 ]; then | ||
| + | [ 0$DEBUG -ge 1 ] && echo $XYMON $XYMSRV "drop $HOST $TESTNAME" | ||
| + | else | ||
| + | $XYMON $XYMSRV "drop $HOST $TESTNAME" | ||
| + | fi | ||
| + | done | ||
| + | ;; | ||
| + | clear) | ||
| + | # we make all of the known filesystems clear | ||
| + | REPORT2=`$XYMON $XYMSRV " | ||
| + | if [ " | ||
| + | REPLIST="" | ||
| + | for REPLINE in $REPORT2; do | ||
| + | TESTNAME=`echo " | ||
| + | FSCOL=`echo " | ||
| + | if [ " | ||
| + | [ 0$DEBUG -gt 0 ] && echo "Not going to clearify $TESTNAME, already clear" | ||
| + | else | ||
| + | [ 0$DEBUG -gt 0 ] && echo " | ||
| + | MSG=" | ||
| + | $REPORT" | ||
| + | if [ 0$DRYRUN -gt 0 ]; then | ||
| + | echo $XYMON $XYMSRV " | ||
| + | else | ||
| + | [ 0$DEBUG -ge 1 ] && $XYMON $XYMSRV " | ||
| + | fi | ||
| + | REPLIST=" | ||
| + | fi | ||
| + | done | ||
| + | if [ 0$DEBUG -gt 0 ]; then | ||
| + | [ " | ||
| + | fi | ||
| + | else | ||
| + | [ 0$DEBUG -gt 0 ] && echo "No fs reports for $HOST" | ||
| + | fi | ||
| + | ;; | ||
| + | esac | ||
| + | [ 0$DEBUG -gt 0 ] && echo | ||
| + | done | ||
| + | |||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ==== tasks.d/ | ||
| + | |||
| + | Copy this to the " | ||
| + | |||
| + | <hidden onHidden=" | ||
| + | < | ||
| + | [fs-test] | ||
| + | ENVFILE $XYMONHOME/ | ||
| + | CMD $XYMONHOME/ | ||
| + | LOGFILE $XYMONSERVERLOGS/ | ||
| + | INTERVAL 5m | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ===== Known Bugs and Issues ===== | ||
| + | |||
| + | ===== To Do ===== | ||
| + | * allow specifying filesystems to include/ | ||
| + | * allow specifying per-filesystem thresholds | ||
| + | |||
| + | ===== Credits ===== | ||
| + | |||
| + | ===== Changelog ===== | ||
| + | |||
| + | * **2013-02-19** | ||
| + | * Initial release | ||
| + | * **2013-02-28** | ||
| + | * auto-cleanup temporary test names | ||