#!/bin/bash
#< Nagios plugin - check time deviation between two F5 BIG-IP LTM nodes
ECHO="/bin/echo"
SSH="/usr/bin/ssh"
R_DATE="/bin/date"
BIGIP_1="192.168.x.x"
BIGIP_2="192.168.x.x"
BIGIP_USER="root"
# permitted time deviation between nodes
WARN="5"
CRIT="10"
VERBOSE=0
E_SUCCESS=0
E_WARNING=1
E_CRITICAL=2
E_UNKNOWN=3
function print_error {
${ECHO} "Error: $@" >&2
}
function check_ssh {
for BIGIP in ${BIGIP_1} ${BIGIP_2}; do
(( VERBOSE )) && { ${ECHO} "--> Testing SSH ${BIGIP_USER}@${BIGIP}"; }
${SSH} -q -o ConnectTimeout=2 -o BatchMode=yes ${BIGIP_USER}@${BIGIP} 'exit'
if [ "$?" -ne "0" ]; then
${ECHO} "CRITICAL: Could not SSH to ${BIGIP}"
exit ${E_CRITICAL}
fi
(( VERBOSE )) && { ${ECHO} "<-- SSH Test Successful"; }
done
}
if [ "$1" = '-v' ]; then
VERBOSE=1
fi
function check_epoch {
BIGIP_NODE_1_EPOCH=$( ${SSH} -o ConnectTimeout=2 -o BatchMode=yes ${BIGIP_USER}@${BIGIP_1} "${R_DATE} +%s" )
if [ "$?" -ne "0" ]; then
${ECHO} "CRITICAL: Could not get time from ${BIGIP}"
exit ${E_CRITICAL}
fi
BIGIP_NODE_2_EPOCH=$( ${SSH} -o ConnectTimeout=2 -o BatchMode=yes ${BIGIP_USER}@${BIGIP_2} "${R_DATE} +%s" )
if [ "$?" -ne "0" ]; then
${ECHO} "CRITICAL: Could not get time from ${BIGIP}"
exit ${E_CRITICAL}
fi
(( VERBOSE )) && {
${ECHO} "--> NODE 1 [${BIGIP_1}] - ${BIGIP_NODE_1_EPOCH}"
${ECHO} "--> NODE 2 [${BIGIP_2}] - ${BIGIP_NODE_2_EPOCH}"
}
if [ "${BIGIP_NODE_1_EPOCH}" -eq "${BIGIP_NODE_2_EPOCH}" ]; then
${ECHO} "OK: No time difference"
exit ${E_SUCCESS}
fi
if [ "${BIGIP_NODE_1_EPOCH}" -gt "${BIGIP_NODE_2_EPOCH}" ]; then
DIFFERENCE=$(( BIGIP_NODE_1_EPOCH - BIGIP_NODE_2_EPOCH ))
if [ "${DIFFERENCE}" -ge "${CRIT}" ]; then
${ECHO} "CRITICAL: ${DIFFERENCE}s time difference"
exit ${E_CRITICAL}
elif [ "${DIFFERENCE}" -ge "${WARN}" ]; then
${ECHO} "WARNING: ${DIFFERENCE}s time difference"
exit ${E_WARNING}
else
${ECHO} "OK: ${DIFFERENCE}s time difference"
exit ${E_SUCCESS}
fi
fi
if [ "${BIGIP_NODE_2_EPOCH}" -gt "${BIGIP_NODE_1_EPOCH}" ]; then
DIFFERENCE=$(( BIGIP_NODE_2_EPOCH - BIGIP_NODE_1_EPOCH ))
if [ "${DIFFERENCE}" -ge "${CRIT}" ]; then
${ECHO} "CRITICAL: ${DIFFERENCE}s time difference"
exit ${E_CRITICAL}
elif [ "${DIFFERENCE}" -ge "${WARN}" ]; then
${ECHO} "WARNING: ${DIFFERENCE}s time difference"
exit ${E_WARNING}
else
${ECHO} "OK: ${DIFFERENCE}s time difference"
exit ${E_SUCCESS}
fi
fi
}
check_ssh
check_epoch
${ECHO} "UNKNOWN: Should never be reached"
exit ${E_UNKNOWN}