From ee96db07d570fb8820cd7ac7dd654f680b1332a2 Mon Sep 17 00:00:00 2001 From: Ronnie Sahlberg Date: Thu, 11 Aug 2011 10:00:53 +1000 Subject: [PATCH] Add new eventscript 40.fs_use that can be used to monitor file system use and flag a node unhealthy when they become full (This used to be ctdb commit 2fd1babf8135ad5d53f3b25ba823d840ebc66460) --- ctdb/Makefile.in | 1 + ctdb/config/events.d/40.fs_use | 53 +++++++++++++++++++++++++++++++++ ctdb/packaging/RPM/ctdb.spec.in | 1 + 3 files changed, 55 insertions(+) create mode 100644 ctdb/config/events.d/40.fs_use diff --git a/ctdb/Makefile.in b/ctdb/Makefile.in index d53d3db5e0d..0cce22e0d7a 100755 --- a/ctdb/Makefile.in +++ b/ctdb/Makefile.in @@ -258,6 +258,7 @@ install: all ${INSTALLCMD} -m 644 config/events.d/20.multipathd $(DESTDIR)$(etcdir)/ctdb/events.d ${INSTALLCMD} -m 644 config/events.d/31.clamd $(DESTDIR)$(etcdir)/ctdb/events.d ${INSTALLCMD} -m 755 config/events.d/40.vsftpd $(DESTDIR)$(etcdir)/ctdb/events.d + ${INSTALLCMD} -m 644 config/events.d/40.fs_use $(DESTDIR)$(etcdir)/ctdb/events.d ${INSTALLCMD} -m 755 config/events.d/41.httpd $(DESTDIR)$(etcdir)/ctdb/events.d ${INSTALLCMD} -m 755 config/events.d/50.samba $(DESTDIR)$(etcdir)/ctdb/events.d ${INSTALLCMD} -m 755 config/events.d/60.nfs $(DESTDIR)$(etcdir)/ctdb/events.d diff --git a/ctdb/config/events.d/40.fs_use b/ctdb/config/events.d/40.fs_use new file mode 100644 index 00000000000..14d33fae745 --- /dev/null +++ b/ctdb/config/events.d/40.fs_use @@ -0,0 +1,53 @@ +#!/bin/sh +# ctdb event script for checking local file system utilization + +. $CTDB_BASE/functions +loadconfig + +case "$1" in + monitor) + # check each specified fs to be checked + # config format is : + for fs in $CTDB_CHECK_FS_USE + do + # parse fs_mount and fs_threshold + fs_config=(`echo $fs | tr ':' '\n'`) + fs_mount=${fs_config[0])} + fs_threshold=${fs_config[1])} + + # check if given fs_mount is existing directory + if [ ! -d "$fs_mount" ]; then + echo "$0: Directory $fs_mount does not exist" + exit 1 + fi + + # check if given fs_threshold is number + if ! [[ "$fs_threshold" =~ ^[0-9]+$ ]] ; then + echo "$0: Threshold $fs_threshold is invalid number" + exit 1 + fi + + # get utilization of given fs from df + fs_usage=`df -k $fs_mount | grep % | awk {'print $5'} | sed 's/%//g' | tail -n 1` + + # check if fs_usage is number + if ! [[ "$fs_usage" =~ ^[0-9]+$ ]] ; then + echo "$0: FS utilization $fs_usage is invalid number" + exit 1 + fi + + # check if fs_usage is higher than or equal to fs_threshold + if [[ "$fs_usage" -ge "$fs_threshold" ]] ; then + echo "ERROR: Utilization of $fs_mount ($fs_usage%) is higher than threshold ($fs_threshold%)" + exit 1 + fi + done + + ;; + + *) + ctdb_standard_event_handler "$@" + ;; +esac + +exit 0 diff --git a/ctdb/packaging/RPM/ctdb.spec.in b/ctdb/packaging/RPM/ctdb.spec.in index c006b51836a..f618e76013f 100644 --- a/ctdb/packaging/RPM/ctdb.spec.in +++ b/ctdb/packaging/RPM/ctdb.spec.in @@ -102,6 +102,7 @@ rm -rf $RPM_BUILD_ROOT %{_sysconfdir}/ctdb/events.d/11.routing %{_sysconfdir}/ctdb/events.d/20.multipathd %{_sysconfdir}/ctdb/events.d/31.clamd +%{_sysconfdir}/ctdb/events.d/40.fs_use %{_sysconfdir}/ctdb/events.d/40.vsftpd %{_sysconfdir}/ctdb/events.d/41.httpd %{_sysconfdir}/ctdb/events.d/50.samba