Icinga2 - Check erstellen: Unterschied zwischen den Versionen
Aus QBWiki
Zur Navigation springenZur Suche springen
Pascal (Diskussion | Beiträge) |
Pascal (Diskussion | Beiträge) |
||
| (4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 7: | Zeile 7: | ||
border-left: 1px dotted #999; | border-left: 1px dotted #999; | ||
border-top: none; | border-top: none; | ||
| − | line-height: 1. | + | line-height: 1.32em; |
| + | font-size: 97.5%; | ||
} | } | ||
| Zeile 17: | Zeile 18: | ||
| − | ==== Beispiel: Tage seit dem letzten Update mit Paketmanager YUM ==== | + | ====Beispiel: Anzahl der verfügbaren Pakete zur Aktualisierung==== |
| + | <syntaxhighlight lang="bash" line="1"> | ||
| + | #!/bin/sh | ||
| + | |||
| + | set -o nounset | ||
| + | set -o errexit | ||
| + | |||
| + | while getopts ":c:w:" opt; do | ||
| + | case $opt in | ||
| + | c) | ||
| + | crit_val="$OPTARG" ;; | ||
| + | w) | ||
| + | warn_val="$OPTARG" ;; | ||
| + | \?) | ||
| + | echo "Invalid Option -$OPTARG" >&2 | ||
| + | esac | ||
| + | done | ||
| + | |||
| + | update_count="$(yum check-update|wc -l)" | ||
| + | |||
| + | if [[ "${warn_val:-}" -ge "${crit_val:-}" ]]; then | ||
| + | echo "UNKNOWN: Warning threshold can't be bigger than the Critical threshold" | ||
| + | exit 3 | ||
| + | fi | ||
| + | |||
| + | if [[ "${update_count:-ERROR}" -ge "${crit_val}" ]]; then | ||
| + | echo "CRITICAL: ${update_count}" | ||
| + | exit 2 | ||
| + | |||
| + | elif [[ "${update_count}" -ge "${warn_val}" ]]; then | ||
| + | echo "WARNING: ${update_count}" | ||
| + | exit 1 | ||
| + | |||
| + | elif [[ "${update_count}" -lt "${warn_val}" ]]; then | ||
| + | echo "OK: ${update_count}" | ||
| + | exit 0 | ||
| + | else | ||
| + | echo "UNKNOWN: ${update_count}" | ||
| + | exit 3 | ||
| + | fi | ||
| + | |||
| + | </syntaxhighlight> | ||
| + | |||
| + | |||
| + | |||
| + | ====Beispiel: Tage seit dem letzten Update mit Paketmanager YUM==== | ||
Um z.B. zu überprüfen, wann auf einem Server mit Yum als Paketmanager das letzte mal geupdatet wurde, | Um z.B. zu überprüfen, wann auf einem Server mit Yum als Paketmanager das letzte mal geupdatet wurde, | ||
haben wir zwei Möglichkeiten: | haben wir zwei Möglichkeiten: | ||
| − | ; Als root-user direkt über einen Befehl | + | |
| − | : Nachteil: Authentifizierung als Root Benutzer | + | ;Als root-user direkt über einen Befehl |
| − | : Vorteil: Kein Skript auf dem Zielrechner notwendig | + | :Nachteil: Authentifizierung als Root Benutzer |
| + | :Vorteil: Kein Skript auf dem Zielrechner notwendig | ||
;Als icinga-user über ein selbstgeschriebenes Plugin | ;Als icinga-user über ein selbstgeschriebenes Plugin | ||
| − | : Vorteil: kein Zugriff über den Root account notwendig | + | :Vorteil: kein Zugriff über den Root account notwendig |
| − | : Nachteil: allerdings einen Eintrag in der sudoers Datei | + | :Nachteil: allerdings einen Eintrag in der sudoers Datei |
| − | Beispielskript: check_yum | + | Beispielskript: check_yum -c [crit days] -w [warn days] |
<syntaxhighlight lang="bash" line="1"> | <syntaxhighlight lang="bash" line="1"> | ||
#!/bin/bash | #!/bin/bash | ||
| Zeile 76: | Zeile 123: | ||
echo "Unknown: ${diff_msg}" | echo "Unknown: ${diff_msg}" | ||
| + | exit 3 | ||
| + | </syntaxhighlight> | ||
| + | Im Idealfall liegt das Skript auf dem Remoteserver unter <code>/usr/lib64/nagios/plugins</code>. | ||
| + | Unser check-plugin, dass wir auf unserem Icinga2 Server erstellen müssen, muss quasi folgenden Befehl ausführen | ||
| + | |||
| + | <code>/usr/lib64/nagios/plugins/check_by_ssh -H 213.147.9.200 -l icinga -i ~/.ssh/id_ed25519 -C 'sudo /usr/lib64/nagios/plugins/check_yum -c15 -w10'</code> | ||
| + | |||
| + | Dies können wir wie folgt simulieren: | ||
| + | <syntaxhighlight lang="bash" line="1"> | ||
| + | su - icinga -s /bin/bash -c "/usr/lib64/nagios/plugins/check_by_ssh -H 213.147.9.200 -l icinga -i ~/.ssh/id_ed25519 -C 'sudo /usr/lib64/nagios/plugins/check_yum -c15 -w10'" | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Aktuelle Version vom 26. März 2019, 09:12 Uhr
Beispiel: Anzahl der verfügbaren Pakete zur Aktualisierung
1 #!/bin/sh
2
3 set -o nounset
4 set -o errexit
5
6 while getopts ":c:w:" opt; do
7 case $opt in
8 c)
9 crit_val="$OPTARG" ;;
10 w)
11 warn_val="$OPTARG" ;;
12 \?)
13 echo "Invalid Option -$OPTARG" >&2
14 esac
15 done
16
17 update_count="$(yum check-update|wc -l)"
18
19 if [[ "${warn_val:-}" -ge "${crit_val:-}" ]]; then
20 echo "UNKNOWN: Warning threshold can't be bigger than the Critical threshold"
21 exit 3
22 fi
23
24 if [[ "${update_count:-ERROR}" -ge "${crit_val}" ]]; then
25 echo "CRITICAL: ${update_count}"
26 exit 2
27
28 elif [[ "${update_count}" -ge "${warn_val}" ]]; then
29 echo "WARNING: ${update_count}"
30 exit 1
31
32 elif [[ "${update_count}" -lt "${warn_val}" ]]; then
33 echo "OK: ${update_count}"
34 exit 0
35 else
36 echo "UNKNOWN: ${update_count}"
37 exit 3
38 fi
Beispiel: Tage seit dem letzten Update mit Paketmanager YUM
Um z.B. zu überprüfen, wann auf einem Server mit Yum als Paketmanager das letzte mal geupdatet wurde, haben wir zwei Möglichkeiten:
- Als root-user direkt über einen Befehl
- Nachteil: Authentifizierung als Root Benutzer
- Vorteil: Kein Skript auf dem Zielrechner notwendig
- Als icinga-user über ein selbstgeschriebenes Plugin
- Vorteil: kein Zugriff über den Root account notwendig
- Nachteil: allerdings einen Eintrag in der sudoers Datei
Beispielskript: check_yum -c [crit days] -w [warn days]
1 #!/bin/bash
2 while getopts ":c:w:" opt ; do
3 case $opt in
4 c)
5 crit_days="$OPTARG" ;;
6 w)
7 warn_days="$OPTARG" ;;
8 \?)
9 echo "Invalid Option -$OPTARG" >&2
10 esac
11 done
12
13 # Centos , YYYY-MM-DD
14 last_update="$(yum history list all | egrep ' U |Update' | head -n1 |awk '{print $6}')"
15 last_update_unix_time="$(date -d "${last_update}" +%s)"
16
17 cur_date="$(date +%s)"
18
19 timediff_s="$((${cur_date} - ${last_update_unix_time}))"
20 timediff_m="$((${timediff_s} / 60))"
21 timediff_h="$((${timediff_m} / 60))"
22 timediff_d="$((${timediff_h} / 24))"
23 timediff_w="$((${timediff_d} / 7))"
24
25 diff_msg="Last update was ${timediff_d} days ago"
26
27
28 if [[ ${timediff_d} -ge ${crit_days} ]] ; then
29 echo "Critical: ${diff_msg}"
30 exit 2
31 fi
32
33 if [[ ${timediff_d} -ge ${warn_days} ]] ; then
34 echo "Warning: ${diff_msg}"
35 exit 1
36 fi
37
38 if [[ ${timediff_d} -lt ${warn_days} ]] ; then
39 echo "OK: ${diff_msg}"
40 exit 0
41 fi
42
43 echo "Unknown: ${diff_msg}"
44 exit 3
Im Idealfall liegt das Skript auf dem Remoteserver unter /usr/lib64/nagios/plugins.
Unser check-plugin, dass wir auf unserem Icinga2 Server erstellen müssen, muss quasi folgenden Befehl ausführen
/usr/lib64/nagios/plugins/check_by_ssh -H 213.147.9.200 -l icinga -i ~/.ssh/id_ed25519 -C 'sudo /usr/lib64/nagios/plugins/check_yum -c15 -w10'
Dies können wir wie folgt simulieren:
1 su - icinga -s /bin/bash -c "/usr/lib64/nagios/plugins/check_by_ssh -H 213.147.9.200 -l icinga -i ~/.ssh/id_ed25519 -C 'sudo /usr/lib64/nagios/plugins/check_yum -c15 -w10'"