Zabbix:Template Feiertage und Wochenenden
Aus znilwiki
Bei einem Kunden sollten bei den Triggern Feiertage und Wochenenden mit Berücksichtigt werden.
Mithilfe des nachfolgenden Templates kann man seine Trigger verfeinern so das zum Beispiel
- Alarme unterdrückt werden wenn z.B. kein Sicherungsband eingelegt ist
- Anderes Abweichungen in der Systemlast in Bezug auf den Wochentag oder Feiertag berücksichtigt werden.
- ...
Das sind auch "Feiertage" dabei wie Silvester ... nun in den meisten Firmen wird an diesen Tagen nicht gearbeitet, deshalb habe ich diese drin.
Wenn Ihr das Skript betrachtet sind andere Feiertage aber schnell ergänzt. Vergesst in diesem Fall nicht das Value-Mapping anzupassen
Screenshot Latest Data
Value Mapping
Ich nutze das folgenden Value-Mapping - wenn Ihr das Template in Zabbix 3.0.x importiert wird es automatisch mit eingerichtet. Bei Zabbix 2.4.x oder niedriger müsst Ihr dieses von Hand anlegen:
znil.1Ja0Nein 0 ⇒ Nein 1 ⇒ Ja
znil.Feiertage 0 ⇒ Kein Feiertag 1 ⇒ Neujahr 2 ⇒ Sylvester 3 ⇒ Maifeiertag 4 ⇒ Tag der Deutschen Einheit 5 ⇒ Reformationstag 6 ⇒ Allerheiligen 7 ⇒ Heiligabend 8 ⇒ 1. Weihnachtsfeiertag 9 ⇒ 2. Weihnachtsfeiertag 10 ⇒ Rosenmontag 11 ⇒ Karfreitag 12 ⇒ Ostersonntag 13 ⇒ Ostermontag 14 ⇒ Christi Himmelfahrt 15 ⇒ Pfingstsonntag 16 ⇒ Pfingstmontag 17 ⇒ Fronleichnam
znil.Wochentage 1 ⇒ Montag 2 ⇒ Dienstag 3 ⇒ Mittwoch 4 ⇒ Donnerstag 5 ⇒ Freitag 6 ⇒ Samstag 7 ⇒ Sonntag
Das Skript
Download: Znil-WuF.zip
Kopiert das Skript znil-WuF.sh in das ExternalScripts Verzeichnis eures Zabbix-Servers,
den genauen Ort findet Ihr in eurer zabbix_server.conf im folgenden Abschnitt:
### Option: ExternalScripts # Full path to location of external scripts. # Default depends on compilation options. # # Mandatory: no # Default: # ExternalScripts=${datadir}/zabbix/externalscripts ExternalScripts=/usr/local/share/zabbix/externalscripts
Wer nach meiner Anleitung seinen Server installiert hat also nach
/usr/local/share/zabbix/externalscripts
Achtet darauf das es Ausführbar ist!
chmod +x /usr/local/share/zabbix/externalscripts/znil-WuF.sh
Hier der Quellcode:
#!/bin/bash
#
# Wochenenden und Feiertage
#
# 2016 Bernhard Linz
# http://znil.net
#
# Ostermontagsformel hier gefunden: http://debianforum.de/forum/viewtopic.php?f=34&t=144038
#
# Aufruf:
#
# znil-WuF.sh [Parameter]
#
# Parameter sind:
#
# Weekend gibt 1 zurück wenn es Samstag oder Sonntag ist, sonst 0
# Weekday gibt den Wochentag als Zahl zurück, 1=Montag bis 7=Sonntag
# Saturday gibt 1 zurück wenn es Samstag ist, sonst 0
# Sunday gibt 1 zurück wenn es Sonntag ist, sonst 0
# PublicHoliday gibt folgendes zurück:
# 0 ⇒ Kein Feiertag
# 1 ⇒ Neujahr
# 2 ⇒ Sylvester
# 3 ⇒ Maifeiertag
# 4 ⇒ Tag der Deutschen Einheit
# 5 ⇒ Reformationstag
# 6 ⇒ Allerheiligen
# 7 ⇒ Heiligabend
# 8 ⇒ 1. Weihnachtsfeiertag
# 9 ⇒ 2. Weihnachtsfeiertag
# 10 ⇒ Rosenmontag
# 11 ⇒ Karfreitag
# 12 ⇒ Ostersonntag
# 13 ⇒ Ostermontag
# 14 ⇒ Christi Himmelfahrt
# 15 ⇒ Pfingstsonntag
# 16 ⇒ Pfingstmontag
# 17 ⇒ Fronleichnam
#
#
# $1 = [Paramter]
#
# Test ob wir gerade Wochenende haben (Samstag und Sonntag)
if [ "$1" = "Weekend" ]; then
iDayofWeek=$(date +%u)
case $iDayofWeek in
[1-5]*)
echo "0"
;;
[6-7]*)
echo "1"
;;
esac
fi
# Rückgabe des Wochentags als Zahl
if [ "$1" = "Weekday" ]; then
iDayofWeek=$(date +%u)
echo $iDayofWeek
fi
# Test ob gerade Samstag ist
if [ "$1" = "Saturday" ]; then
iDayofWeek=$(date +%u)
if [ "$iDayofWeek" = "6" ]; then
echo "1"
else
echo "0"
fi
fi
# Test ob gerade Sonntag ist
if [ "$1" = "Sunday" ]; then
iDayofWeek=$(date +%u)
if [ "$iDayofWeek" = "7" ]; then
echo "1"
else
echo "0"
fi
fi
# Test ob ein gesetzlicher Feiertag ist (+Heiligabend und Sylvester)
if [ "$1" = "PublicHoliday" ]; then
iDayofWeek=$(date +%u)
iDay=$(date +%d)
iMonth=$(date +%m)
iYearLong=$(date +%Y)
iYearShort=$(date +%y)
sDayMonth="$iDay-$iMonth"
# Prüfung der festehenden Tage
# TEST
#if [ "$iDay" = "01" ] && [ "$iMonth" = "07" ]; then
# echo "1"
# exit 0
#fi
# Neujahr
if [ "$iDay" = "01" ] && [ "$iMonth" = "01" ]; then
echo "1"
exit 0
fi
# Sylvester
if [ "$iDay" = "31" ] && [ "$iMonth" = "12" ]; then
echo "2"
exit 0
fi
# 1. Mai
if [ "$iDay" = "01" ] && [ "$iMonth" = "05" ]; then
echo "3"
exit 0
fi
# Tag der Deutschen Einheit
if [ "$iDay" = "03" ] && [ "$iMonth" = "10" ]; then
echo "4"
exit 0
fi
# Reformationstag
if [ "$iDay" = "31" ] && [ "$iMonth" = "10" ]; then
echo "5"
exit 0
fi
# Allerheiligen
if [ "$iDay" = "01" ] && [ "$iMonth" = "11" ]; then
echo "6"
exit 0
fi
# Heiligabend
if [ "$iDay" = "24" ] && [ "$iMonth" = "12" ]; then
echo "7"
exit 0
fi
# 1. Weihnachtsfeiertag
if [ "$iDay" = "25" ] && [ "$iMonth" = "12" ]; then
echo "8"
exit 0
fi
# 2. Weihnachtsfeiertag
if [ "$iDay" = "26" ] && [ "$iMonth" = "12" ]; then
echo "9"
exit 0
fi
# Ok, müssen wir doch noch auf die Osterformel zurück greifen...
iYearLong=$(date +%Y); [ "$1" ] && [ "$1" = "${1//[^0-9]}" ] && [ $1 -ge 1902 -a $1 -le 8202 ] && iYearLong=$1
#echo "${J}:"
a=$(( $iYearLong % 19 ))
b=$(( $iYearLong % 4 ))
c=$(( $iYearLong % 7 ))
m=$((( (8 * ($iYearLong / 100) + 13) / 25) - 2 ))
s=$(( ($iYearLong / 100) - ($iYearLong / 400) - 2 ))
M=$(( (15 + $s - $m) % 30 ))
N=$(( (6 + $s) % 7 ))
d=$(( ($M + 19 * $a) % 30 ))
if [ $d = 29 ]; then
D=28
elif [ $d = 28 -a $a -ge 11 ]; then
D=27
else
D=$d
fi
e=$(( (2 * $b + 4 * $c + 6 * $D + $N) % 7 ))
Ostern=$( date -d ${iYearLong}-03-21+$(($D + $e + 1))days +%Y-%m-%d )
#for t in "-48 Rosenmontag" "-2 Karfreitag" "+0 Ostersonntag" "+1 Ostermontag" "+39 Christi Himmelfahrt" "+49 Pfingstsonntag" "+50 Pfingstmontag" "+60 Fronleichnam"; do
# echo "$( date -d ${o}${t%% *}days "+%d.%m." ) ${t#* }"
#done
#echo $sDayMonth
Rosenmontag=$( date -d ${Ostern}-48days "+%d-%m" )
Karfreitag=$( date -d ${Ostern}-2days "+%d-%m" )
Ostersonntag=$( date -d ${Ostern}+0days "+%d-%m" )
Ostermontag=$( date -d ${Ostern}+1days "+%d-%m" )
ChristiHimmelfahrt=$( date -d ${Ostern}+39days "+%d-%m" )
Pfingstsonntag=$( date -d ${Ostern}+49days "+%d-%m" )
Pfingstmontag=$( date -d ${Ostern}+50days "+%d-%m" )
Fronleichnam=$( date -d ${Ostern}+60days "+%d-%m" )
#echo "Ostern: $Ostern"
#echo "Rosenmontag: $Rosenmontag"
#echo "Karfreitag: $Karfreitag"
#echo "Ostersonntag: $Ostersonntag"
#echo "Ostermontag: $Ostermontag"
#echo "ChristiHimmelfahrt: $ChristiHimmelfahrt"
#echo "Pfingstsonntag: $Pfingstsonntag"
#echo "Pfingstmontag: $Pfingstmontag"
#echo "Fronleichnam: $Fronleichnam"
if [ "sDayMonth" = "$Rosenmontag" ]; then
echo "10"
exit 0
fi
if [ "sDayMonth" = "$Karfreitag" ]; then
echo "11"
exit 0
fi
if [ "sDayMonth" = "$Ostersonntag" ]; then
echo "12"
exit 0
fi
if [ "sDayMonth" = "$Ostermontag" ]; then
echo "13"
exit 0
fi
if [ "sDayMonth" = "$ChristiHimmelfahrt" ]; then
echo "14"
exit 0
fi
if [ "sDayMonth" = "$Pfingstsonntag" ]; then
echo "15"
exit 0
fi
if [ "sDayMonth" = "$Pfingstmontag" ]; then
echo "16"
exit 0
fi
if [ "sDayMonth" = "$Fronleichnam" ]; then
echo "17"
exit 0
fi
echo "0"
fi
exit 0
Die Items
Wer Zabbix 3.0.x im Einsatz hat kann einfach das Template importieren:
Download: Znil_Template_Feiertage_und_Wochenenden.zip
Die Items werden 2 mal am Tag per Zabbix Scheduling aktualisiert, um
00:01 Uhr 11:45 Uhr
Wer noch 2.4.x oder älter nutzt muss sich die Items nachbauen: