From 76af47e69955bb6cbfcb6c1717ad97855f934b7b Mon Sep 17 00:00:00 2001 From: Jack-Benny Persson Date: Sat, 16 Aug 2014 13:27:41 +0200 Subject: [PATCH] Added README and a flowchart --- README.md | 40 ++++++++++++++++++++++++++++++++++++++++ failover.php | 2 +- nagios-failover.png | Bin 0 -> 31648 bytes 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 README.md create mode 100644 nagios-failover.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..3d23595 --- /dev/null +++ b/README.md @@ -0,0 +1,40 @@ +# Nagios Failover # +PHP script to help setting up Nagios with failover hosts. The whole idea of this +script is to run in a cronjob on the failover host. When the remote, default, +Nagios host goes down, the script will stop touching a "check file" to update +it's timestamp. If the remote Nagios is down for more than the predefined number +of seconds, the script activates the local Nagios notification. See the flow +chart in this directory for more information on how the scripts works. + +## Usage ## +Change the variables at the top of the script to suit your environment. Then +place the script in a crontab (root for example, or someone with Nagios +permissions) and let it run for example every fourth minute. If the $maxAge in +the script is 1200 seconds (20 minutes) and the script is being run every fourth +minute, then the check can fail 5 times (5x4=20) before activating the local +Nagios notifications. + +## Misc thoughts ## +Nowadays I only disable notifications on the failover hosts. I used to disable +both host checks, service checks and notifications. Over the years this has +turned out to generate a lot of false alarms. The false alarms are generate when +the failover host for example disables it's checks after being active when a +hosts being monitored where experiencing problems. The checks might than have +stopped in a soft state with lets say 3/4. When the failover host is then once +again activating it's checks, it's starts from this state (3/4) and if something +then, for example, a flaky internet connection makes it fail one more time it +has reached a hard state and an alarm is being sent. +Another problem might be if a host or service was flapping the last time the +failover Nagios was active and then had it's host and service checks disabled. +The next time the failover Nagios is activated, the host/service which was +flapping, is now still considered being in a flapping state, even tough this +might have been two years ago, and thus preventing any alarms until the flapping +state goes away. +For these reasons I now let the failover host run both host and service checks +even when no failover is necessary. +When the main Nagios then goes down, the failover Nagios has an up-to-date +accurate state of all the hosts and services being monitored. + +## Copyright ## +This was script was written by Jack-Benny Persson and is released under GNU GPL +version 2. diff --git a/failover.php b/failover.php index 15d979c..8b6a93c 100755 --- a/failover.php +++ b/failover.php @@ -22,7 +22,7 @@ Simple script to turn on/off Nagios notification/checks etc for use with Nagios failover hosts. Default is to turn on/off notifications. - Version 0.2 + Version 0.3 */ // Variables to set for your environment diff --git a/nagios-failover.png b/nagios-failover.png new file mode 100644 index 0000000000000000000000000000000000000000..14bdb419d15705e59aff8a37a45d982c810c067c GIT binary patch literal 31648 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