Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
linux:icinga:docker-stack [2025/03/13 19:56] – adi | linux:icinga:docker-stack [2025/03/21 20:05] (aktuell) – [Graphite] adi | ||
---|---|---|---|
Zeile 39: | Zeile 39: | ||
Danach auf dem Docker-Host den Ordner für die eigenen Checks erstellen und Checks dort ablegen. | Danach auf dem Docker-Host den Ordner für die eigenen Checks erstellen und Checks dort ablegen. | ||
<code bash> | <code bash> | ||
+ | |||
+ | Hier ein Check zum Überwachen von QNap-NAS (Quelle: siehe Inhalt): | ||
+ | < | ||
+ | ############################# | ||
+ | # | ||
+ | # | ||
+ | # special thnaks to | ||
+ | # Nicola Bandini n.bandini@gmail.com | ||
+ | # Tom Lesniak and Hugo Geijteman | ||
+ | # for the nice and useful inspiratipon | ||
+ | # | ||
+ | # This progmem is free software; you can redistribute it and/or modify | ||
+ | # it under the terms of the GNU General Public License as published by | ||
+ | # the Free Software Foundation; | ||
+ | # | ||
+ | # This progmem is distributed in the hope that it will be useful, | ||
+ | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
+ | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||
+ | # GNU General Public License for more details. | ||
+ | # | ||
+ | # contact the author directly for more information at: matthias@xcontrol.de | ||
+ | ########################################################################################## | ||
+ | |||
+ | #Version 1.40 | ||
+ | |||
+ | |||
+ | usage=" | ||
+ | -ver Check_qnap Version | ||
+ | -C community default public | ||
+ | -t timeout default 10 secdons | ||
+ | -v snmpversion default 2c | ||
+ | -p snmpport defauilt 161 | ||
+ | -a checks you can use | ||
+ | cpuload: | ||
+ | cputemp: | ||
+ | systemp: | ||
+ | hdtemp: | ||
+ | diskusage: | ||
+ | mem: check´s the mem usage in perent | ||
+ | volstatus: | ||
+ | fan: check´s the Fan Speed | ||
+ | hdstatus: | ||
+ | cachediskstatus: | ||
+ | lunstatus: | ||
+ | raidstatus: | ||
+ | powerstatus: | ||
+ | sysinfo: | ||
+ | example | ||
+ | |||
+ | check_qanp -H 192.168.0.2 -a mem | ||
+ | |||
+ | responce: OK: Memory Total=15976MB used=9177MB free: | ||
+ | |||
+ | or | ||
+ | |||
+ | check_qanp -H myqnap.domain.com -C public -v 1 -p 123 -a cputemp -u F -w 40 -c 45 -t 60 | ||
+ | checked host myqnap.domain.com | ||
+ | community public | ||
+ | snmpversion 1 | ||
+ | snmpport 123 | ||
+ | check cpu Temperature | ||
+ | unit fahrenheit | ||
+ | warning 40 F | ||
+ | critical 45 F | ||
+ | timeout 60 seconds | ||
+ | |||
+ | " | ||
+ | |||
+ | while getopts H: | ||
+ | do | ||
+ | case $option in | ||
+ | H) hostaddress=$OPTARG;; | ||
+ | b) version=$OPTARG;; | ||
+ | C) community=$OPTARG;; | ||
+ | t) timeout=$OPTARG;; | ||
+ | v) snmpversion=$OPTARG;; | ||
+ | p) snmpport=$OPTARG;; | ||
+ | a) check=$OPTARG;; | ||
+ | w) warning=$OPTARG;; | ||
+ | c) critical=$OPTARG;; | ||
+ | u) unit=$OPTARG;; | ||
+ | h) help=1;; | ||
+ | esac | ||
+ | done | ||
+ | |||
+ | check() | ||
+ | { | ||
+ | |||
+ | if [[ " | ||
+ | echo " | ||
+ | exit; | ||
+ | fi | ||
+ | |||
+ | if [[ -z " | ||
+ | echo " | ||
+ | ** Hostaddress and checkprocedure are mandatory ** | ||
+ | " | ||
+ | echo " | ||
+ | exit; | ||
+ | fi | ||
+ | |||
+ | } | ||
+ | check | ||
+ | |||
+ | if [[ -z " | ||
+ | community=public; | ||
+ | fi | ||
+ | |||
+ | if [[ -z " | ||
+ | timeout=10; | ||
+ | fi | ||
+ | |||
+ | if [[ -z " | ||
+ | snmpversion=2c; | ||
+ | fi | ||
+ | |||
+ | if [[ -z " | ||
+ | snmpport=161; | ||
+ | fi | ||
+ | |||
+ | if [[ -z " | ||
+ | warning=80; | ||
+ | fi | ||
+ | |||
+ | if [[ -z " | ||
+ | critical=90; | ||
+ | fi | ||
+ | |||
+ | if [[ -z " | ||
+ | unit=C; | ||
+ | fi | ||
+ | |||
+ | if [[ " | ||
+ | var1=" | ||
+ | if [[ " | ||
+ | var2=20 | ||
+ | var3=90 | ||
+ | else | ||
+ | var2=20 | ||
+ | var3=60 | ||
+ | fi | ||
+ | else | ||
+ | var1=" | ||
+ | if [[ " | ||
+ | var2=32 | ||
+ | var3=194 | ||
+ | else | ||
+ | var=32 | ||
+ | var=140 | ||
+ | fi | ||
+ | fi | ||
+ | |||
+ | output="" | ||
+ | niu=0 | ||
+ | count=0 | ||
+ | counter=0 | ||
+ | status="" | ||
+ | criticalqty=0 | ||
+ | warningqty=0 | ||
+ | okqty=0 | ||
+ | avg=0 | ||
+ | |||
+ | mysnmpcheck=" | ||
+ | |||
+ | |||
+ | # DISKUSAGE | ||
+ | |||
+ | if [[ " | ||
+ | capacity=$($mysnmpcheck 1.3.6.1.4.1.24681.1.2.17.1.4.1 | awk ' | ||
+ | free=$($mysnmpcheck 1.3.6.1.4.1.24681.1.2.17.1.5.1 | awk ' | ||
+ | unit=$($mysnmpcheck 1.3.6.1.4.1.24681.1.2.17.1.4.1 | awk ' | ||
+ | unit2=$($mysnmpcheck 1.3.6.1.4.1.24681.1.2.17.1.5.1 | awk ' | ||
+ | |||
+ | if [[ " | ||
+ | factor=$(echo " | ||
+ | elif [[ " | ||
+ | factor=$(echo " | ||
+ | else | ||
+ | factor=$(echo " | ||
+ | fi | ||
+ | |||
+ | if [[ " | ||
+ | factor2=$(echo " | ||
+ | elif [[ " | ||
+ | factor2=$(echo " | ||
+ | else | ||
+ | factor2=$(echo " | ||
+ | fi | ||
+ | |||
+ | capacitybytes=$(echo " | ||
+ | freebytes=$(echo " | ||
+ | usedbytes=$(echo " | ||
+ | used=$(echo " | ||
+ | usedperc=$(echo " | ||
+ | freeperc=$(echo " | ||
+ | |||
+ | output=" | ||
+ | |||
+ | if [[ $usedperc -ge $critical ]]; then | ||
+ | echo " | ||
+ | exit 2 | ||
+ | elif [[ $usedperc -ge $warning ]]; then | ||
+ | echo " | ||
+ | exit 1 | ||
+ | else | ||
+ | echo "OK: " | ||
+ | exit 0 | ||
+ | fi | ||
+ | |||
+ | # CPULOAD | ||
+ | elif [[ " | ||
+ | cpuload=$($mysnmpcheck 1.3.6.1.4.1.24681.1.2.1.0 | awk ' | ||
+ | |||
+ | output=" | ||
+ | |||
+ | if [[ $cpuload -ge $critical ]]; then | ||
+ | echo " | ||
+ | exit 2 | ||
+ | elif [[ $cpuload -ge $warning ]]; then | ||
+ | echo " | ||
+ | exit 1 | ||
+ | else | ||
+ | echo "OK: " | ||
+ | exit 0 | ||
+ | fi | ||
+ | |||
+ | # CPUTEMP | ||
+ | elif [[ " | ||
+ | temp=$($mysnmpcheck .1.3.6.1.4.1.24681.1.2.5.0 | awk ' | ||
+ | |||
+ | output=" | ||
+ | |||
+ | if [[ $temp -ge $critical ]]; then | ||
+ | echo " | ||
+ | exit 2 | ||
+ | elif [[ $temp -ge $warning ]]; then | ||
+ | echo " | ||
+ | exit 1 | ||
+ | else | ||
+ | echo "OK: " | ||
+ | exit 0 | ||
+ | fi | ||
+ | |||
+ | # System Temperature | ||
+ | elif [[ " | ||
+ | |||
+ | temp=$($mysnmpcheck .1.3.6.1.4.1.24681.1.2.6.0 | awk ' | ||
+ | |||
+ | output=" | ||
+ | |||
+ | if [[ $temp -ge $critical ]]; then | ||
+ | echo " | ||
+ | exit 2 | ||
+ | |||
+ | elif [[ $temp -ge $warning ]]; then | ||
+ | echo " | ||
+ | exit 1 | ||
+ | else | ||
+ | echo "OK: " | ||
+ | exit 0 | ||
+ | fi | ||
+ | |||
+ | # HD Temperature | ||
+ | elif [[ " | ||
+ | count=$($mysnmpcheck .1.3.6.1.4.1.24681.1.2.10.0 | awk ' | ||
+ | |||
+ | for (( c=1; c< | ||
+ | do | ||
+ | |||
+ | temp=$($mysnmpcheck .1.3.6.1.4.1.24681.1.2.11.1.3.$c | awk ' | ||
+ | |||
+ | if [[ " | ||
+ | crt=" | ||
+ | criticalqty=$(echo " | ||
+ | avg=$(echo " | ||
+ | elif [[ " | ||
+ | wrn=" | ||
+ | warningqty=$(echo " | ||
+ | avg=$(echo " | ||
+ | else | ||
+ | okqty=$(echo " | ||
+ | avg=$(echo " | ||
+ | fi | ||
+ | done | ||
+ | |||
+ | avg=$(echo $avg/$count | bc ) | ||
+ | |||
+ | if [[ " | ||
+ | echo " | ||
+ | exit 2 | ||
+ | elif [[ " | ||
+ | echo " | ||
+ | exit 1 | ||
+ | else | ||
+ | echo "OK: $okqty HD´s Average temperature= $avg $unit|Average-HD-temp=$avg$unit; | ||
+ | exit 0 | ||
+ | fi | ||
+ | |||
+ | # Free mem | ||
+ | elif [[ " | ||
+ | total=$($mysnmpcheck 1.3.6.1.4.1.24681.1.2.2.0 | awk ' | ||
+ | used=$($mysnmpcheck 1.3.6.1.4.1.24681.1.2.3.0 | awk ' | ||
+ | perc=$(echo " | ||
+ | unit=$($mysnmpcheck 1.3.6.1.4.1.24681.1.2.2.0 | awk ' | ||
+ | free=$(echo " | ||
+ | |||
+ | output=" | ||
+ | |||
+ | if [[ $perc -ge $critical ]]; then | ||
+ | echo " | ||
+ | exit 2 | ||
+ | elif [[ $perc -ge $warning ]]; then | ||
+ | echo " | ||
+ | exit 1 | ||
+ | else | ||
+ | echo "OK: " | ||
+ | exit 0 | ||
+ | fi | ||
+ | |||
+ | # Volumestatus | ||
+ | elif [[ " | ||
+ | count=$($mysnmpcheck .1.3.6.1.4.1.24681.1.2.16.0 | awk ' | ||
+ | |||
+ | for (( c=1; c< | ||
+ | do | ||
+ | status=$($mysnmpcheck .1.3.6.1.4.1.24681.1.2.17.1.6.$c | awk ' | ||
+ | if [[ $status == " | ||
+ | okqty=$(echo " | ||
+ | elif [[ $status == " | ||
+ | warningqty=$(echo " | ||
+ | else | ||
+ | criticalqty=$(echo " | ||
+ | fi | ||
+ | |||
+ | capacity=$($mysnmpcheck .1.3.6.1.4.1.24681.1.2.17.1.4.$c | awk ' | ||
+ | free=$($mysnmpcheck .1.3.6.1.4.1.24681.1.2.17.1.5.$c | awk ' | ||
+ | unit=$($mysnmpcheck 1.3.6.1.4.1.24681.1.2.17.1.4.$c | awk ' | ||
+ | unit2=$($mysnmpcheck 1.3.6.1.4.1.24681.1.2.17.1.5.$c | awk ' | ||
+ | if [[ " | ||
+ | factor=$(echo " | ||
+ | elif [[ " | ||
+ | factor=$(echo " | ||
+ | else | ||
+ | factor=$(echo " | ||
+ | fi | ||
+ | |||
+ | if [[ " | ||
+ | factor2=$(echo " | ||
+ | elif [[ " | ||
+ | factor2=$(echo " | ||
+ | else | ||
+ | factor2=$(echo " | ||
+ | fi | ||
+ | |||
+ | capacitybytes=$(echo " | ||
+ | freebytes=$(echo " | ||
+ | usedbytes=$(echo " | ||
+ | used=$(echo " | ||
+ | usedperc=$(echo " | ||
+ | freeperc=$(echo " | ||
+ | |||
+ | if [[ $usedperc -ge $critical ]]; then | ||
+ | crt=" | ||
+ | criticalqty=$(echo " | ||
+ | elif [[ $perc -ge $warning ]]; then | ||
+ | wrn=" | ||
+ | warningqty=$(echo " | ||
+ | fi | ||
+ | |||
+ | if [[ $c -lt $count ]]; then | ||
+ | output=" | ||
+ | else | ||
+ | output=" | ||
+ | fi | ||
+ | done | ||
+ | |||
+ | if [[ $criticalqty -ge 1 ]]; then | ||
+ | echo " | ||
+ | exit 2 | ||
+ | elif [[ $warningqty -ge 1 ]]; then | ||
+ | echo " | ||
+ | exit 1 | ||
+ | else | ||
+ | echo "OK: $okqty Volumes, $output|Used=$usedperc%; | ||
+ | exit 0 | ||
+ | fi | ||
+ | |||
+ | # Fan | ||
+ | elif [[ " | ||
+ | count=$($mysnmpcheck .1.3.6.1.4.1.24681.1.2.14.0 | awk ' | ||
+ | |||
+ | for (( c=1; c< | ||
+ | do | ||
+ | speed=$($mysnmpcheck .1.3.6.1.4.1.24681.1.2.15.1.3.$c | awk ' | ||
+ | |||
+ | if [[ $speed -le 5000 ]]; then | ||
+ | okqty=$(echo " | ||
+ | avg=$(echo " | ||
+ | else | ||
+ | crt=" | ||
+ | criticalqty=$(echo " | ||
+ | avg=$(echo " | ||
+ | fi | ||
+ | done | ||
+ | |||
+ | avg=$(echo $avg/$count | bc ) | ||
+ | |||
+ | if [[ " | ||
+ | echo " | ||
+ | exit 2 | ||
+ | else | ||
+ | echo "OK Fans $okqty Average Speed=$avg RPM|Average-Speed=$avg RPM; | ||
+ | exit 0 | ||
+ | fi | ||
+ | |||
+ | # HD Status | ||
+ | elif [[ " | ||
+ | count=$($mysnmpcheck .1.3.6.1.4.1.24681.1.2.10.0 | awk ' | ||
+ | |||
+ | for (( c=1; c< | ||
+ | do | ||
+ | | ||
+ | |||
+ | if [[ $status == " | ||
+ | | ||
+ | elif [[ " | ||
+ | | ||
+ | else | ||
+ | | ||
+ | | ||
+ | fi | ||
+ | done | ||
+ | if [[ " | ||
+ | echo " | ||
+ | exit 2 | ||
+ | else | ||
+ | echo "OK: Online Disk $okqty, HD status = GOOD, Free Slot $niu" | ||
+ | exit 0 | ||
+ | fi | ||
+ | |||
+ | # Cachedisstatus | ||
+ | elif [[ " | ||
+ | count=$($mysnmpcheck .1.3.6.1.4.1.24681.1.4.1.1.1.1.6.1.0 | awk ' | ||
+ | |||
+ | for (( c=1; c< | ||
+ | do | ||
+ | status=$($mysnmpcheck .1.3.6.1.4.1.24681.1.4.1.1.1.1.6.2.1.4.$c | awk ' | ||
+ | | ||
+ | if [[ " | ||
+ | okqty=$(echo " | ||
+ | else | ||
+ | crt=" | ||
+ | criticalqty=$(echo " | ||
+ | fi | ||
+ | done | ||
+ | |||
+ | if [[ " | ||
+ | echo " | ||
+ | exit 2 | ||
+ | else | ||
+ | echo "OK: Cachedisk $okqty " | ||
+ | exit 0 | ||
+ | fi | ||
+ | |||
+ | # LUN Status | ||
+ | elif [[ " | ||
+ | count=$($mysnmpcheck .1.3.6.1.4.1.24681.1.4.1.1.2.1.10.1.0 | awk ' | ||
+ | |||
+ | for (( c=1; c< | ||
+ | do | ||
+ | | ||
+ | |||
+ | if [[ $status == " | ||
+ | | ||
+ | else | ||
+ | | ||
+ | | ||
+ | fi | ||
+ | done | ||
+ | |||
+ | if [[ " | ||
+ | echo " | ||
+ | exit 2 | ||
+ | else | ||
+ | echo "OK: LUN´s $okqty" | ||
+ | exit 0 | ||
+ | fi | ||
+ | |||
+ | # raid Status | ||
+ | elif [[ " | ||
+ | count=$($mysnmpcheck | ||
+ | |||
+ | for (( c=1; c< | ||
+ | do | ||
+ | | ||
+ | |||
+ | if [[ $status == " | ||
+ | | ||
+ | else | ||
+ | | ||
+ | fi | ||
+ | done | ||
+ | |||
+ | if [[ " | ||
+ | echo " | ||
+ | criticalqty=$(echo " | ||
+ | exit 2 | ||
+ | else | ||
+ | echo "OK: Raid $okqty Ready" | ||
+ | exit 0 | ||
+ | fi | ||
+ | |||
+ | # Power stuply status | ||
+ | elif [[ " | ||
+ | count=$($mysnmpcheck .1.3.6.1.4.1.24681.1.4.1.1.1.1.3.1.0 | awk ' | ||
+ | |||
+ | for (( c=1; c< | ||
+ | do | ||
+ | status=$($mysnmpcheck .1.3.6.1.4.1.24681.1.4.1.1.1.1.3.2.1.4.$c | awk ' | ||
+ | | ||
+ | if [[ " | ||
+ | okqty=$(echo " | ||
+ | else | ||
+ | crt=" | ||
+ | criticalqty=$(echo " | ||
+ | fi | ||
+ | done | ||
+ | |||
+ | if [[ " | ||
+ | echo " | ||
+ | exit 2 | ||
+ | else | ||
+ | echo "OK: Powersupply $okqty " | ||
+ | exit 0 | ||
+ | fi | ||
+ | |||
+ | #Model | ||
+ | elif [[ " | ||
+ | model=$($mysnmpcheck | ||
+ | hdnum=$($mysnmpcheck | ||
+ | count=$($mysnmpcheck | ||
+ | name=$($mysnmpcheck | ||
+ | firmware=$($mysnmpcheck | ||
+ | netuptime=$($mysnmpcheck .1.3.6.1.2.1.1.3.0 | awk ' | ||
+ | sysuptime=$($mysnmpcheck .1.3.6.1.2.1.25.1.1.0 | awk ' | ||
+ | |||
+ | echo NAS $name, Model $model, Firmware $firmware, Max HD number $hdnum, No. volume $count, system Uptime $sysuptime, Network Uptime $netuptime | ||
+ | exit 0 | ||
+ | |||
+ | |||
+ | # | ||
+ | # | ||
+ | else | ||
+ | echo -e " | ||
+ | fi | ||
+ | exit 0</ | ||
Eigene Icinga-Constants erstellen. | Eigene Icinga-Constants erstellen. | ||
Zeile 46: | Zeile 602: | ||
< | < | ||
const CustomPluginDir = " | const CustomPluginDir = " | ||
- | |||
- | Eigene Icinga-Service Konfiguration erstellen. | ||
- | <code bash>/ | ||
- | |||
- | Inhalt am Beispiel vom Check für QNap-Nas: | ||
- | < | ||
- | import " | ||
- | command = [ CustomPluginDir + "/ | ||
- | arguments += { | ||
- | " | ||
- | description = "Host name, IP Address, or unix socket (must be an absolute path)" | ||
- | value = " | ||
- | } | ||
- | " | ||
- | description = " | ||
- | value = " | ||
- | } | ||
- | " | ||
- | description = "SNMP protocol version (defalt: 2c)" | ||
- | value = " | ||
- | } | ||
- | " | ||
- | description = "Port number (default: 161)" | ||
- | value = " | ||
- | } | ||
- | " | ||
- | description = " | ||
- | value = " | ||
- | } | ||
- | " | ||
- | description = " | ||
- | value = " | ||
- | } | ||
- | } | ||
- | vars.check_address = { | ||
- | arguments = [ ] | ||
- | deprecated = false | ||
- | name = "< | ||
- | side_effect_free = false | ||
- | type = " | ||
- | } | ||
- | vars.check_ipv4 = false | ||
- | vars.check_ipv6 = false | ||
- | vars.qnap_address = " | ||
- | }</ | ||
Nun noch den Icinga stack neu starten. | Nun noch den Icinga stack neu starten. | ||
Zeile 97: | Zeile 608: | ||
Jetzt kann der neu definierte Check im Director normal verwendet werden. | Jetzt kann der neu definierte Check im Director normal verwendet werden. | ||
+ | |||
+ | - neues Kommando erstellen | ||
+ | - Reiter Kommando | ||
+ | - **Kommandotyp**: | ||
+ | - **Kommandoname**: | ||
+ | - **Kommando**: | ||
+ | - Reiter Arguments | ||
+ | - Argument " | ||
+ | - **Argumentname**: | ||
+ | - **Beschreibung**: | ||
+ | - **Werttyp**: | ||
+ | - **Wert**: '' | ||
+ | - **Position**: | ||
+ | - **Bedingungsformat**: | ||
+ | - **Benötigt**: | ||
+ | - Argument " | ||
+ | - **Argumentname**: | ||
+ | - **Beschreibung**: | ||
+ | - **Werttyp**: | ||
+ | - **Wert**: '' | ||
+ | - **Position**: | ||
+ | - **Bedingungsformat**: | ||
+ | - **Benötigt**: | ||
+ | - Argument " | ||
+ | - **Argumentname**: | ||
+ | - **Beschreibung**: | ||
+ | - **Werttyp**: | ||
+ | - **Wert**: '' | ||
+ | - **Position**: | ||
+ | - **Bedingungsformat**: | ||
+ | - **Benötigt**: | ||
+ | - Neue Datenfelder anlegen | ||
+ | - Datenfeld " | ||
+ | - **Feldname**: | ||
+ | - **Beschriftung**: | ||
+ | - **Datentyp**: | ||
+ | - **Sichtbarkeit**: | ||
+ | - Datenfeld " | ||
+ | - **Feldname**: | ||
+ | - **Beschriftung**: | ||
+ | - **Datentyp**: | ||
+ | - **Sichtbarkeit**: | ||
+ | - Datenfeld " | ||
+ | - **Feldname**: | ||
+ | - **Beschriftung**: | ||
+ | - **Datentyp**: | ||
+ | - **Sichtbarkeit**: | ||
+ | - neue Service Vorlage erstellen | ||
+ | - hier das Check-Kommando " | ||
+ | - Reiter " | ||
+ | - hier die Felder " | ||
+ | - Reiter " | ||
+ | - das Feld " | ||
+ | - neue Host Vorlage erstellen | ||
+ | - hier das Feld " | ||
+ | - neuen Service, z.B. für CpuLoad, anlegen | ||
+ | - **Importe**: | ||
+ | - **Host**: die Host Vorlage die zuvor angelegt wurde | ||
+ | - **qnap_argument**: | ||
+ | |||
+ | ===== Notifications ===== | ||
+ | Damit Icinga Benachrichtungen per Mail senden kann muss man sich eine '' | ||
+ | Diese steuert den lokalen Mailbefehl '' | ||
+ | <code bash>cd / | ||
+ | mkdir -p etc_data/ | ||
+ | vi etc_data/ | ||
+ | |||
+ | Hier diesen Inhalt einfügen und nach belieben anpassen. | ||
+ | < | ||
+ | # On this port, TLS is activated via STARTTLS. | ||
+ | defaults | ||
+ | tls on | ||
+ | # | ||
+ | tls_trust_file | ||
+ | logfile | ||
+ | # | ||
+ | |||
+ | # Define a mail account | ||
+ | account | ||
+ | # Host name of the SMTP server | ||
+ | host < | ||
+ | port < | ||
+ | tls_starttls | ||
+ | # Envelope-from address | ||
+ | from < | ||
+ | # Authentication | ||
+ | auth on | ||
+ | user < | ||
+ | # | ||
+ | passwordeval | ||
+ | |||
+ | account default: < | ||
+ | |||
+ | Dann erstellt man sich die verschlüsslete Datei mit dem Passwort. | ||
+ | <code bash>vi etc_data/ | ||
+ | Hier das Passwort einfügen und danach verschlüsseln. | ||
+ | <code bash>gpg -c .msmtp-cred.txt</ | ||
+ | Die Passphrase merken, wird im Container jedes mal wenn er neu gestartet wurde abgefragt. | ||
+ | Möchte man gpg nicht verwenden, dann einfach wie oben beschrieben das Passwort als Plaintext einfügen. | ||
+ | |||
+ | Den Inhalt kann man so prüfen. | ||
+ | <cocde bash>gpg -d --no-tty -q .msmtp-cred.txt.gpg</ | ||
+ | |||
+ | Die beiden Dateien '' | ||
+ | Dazu in der " | ||
+ | < | ||
+ | - ./ | ||
+ | |||
+ | Jetzt noch die Konfiguration bekannt machen. | ||
+ | <code bash> | ||
+ | |||
+ | Die Grundlage zum Senden von Mails ist nun vorhanden. | ||
+ | Man kann im " | ||
+ | <code bash> | ||
+ | |||
+ | Jetzt noch IcingaWeb konfigurieren. | ||
+ | - Felder erstellen | ||
+ | - notification_from | ||
+ | - **Datentyp**: | ||
+ | - Zeitperiode erstellen | ||
+ | - im Reiter " | ||
+ | - Benutzer erstellen | ||
+ | - **Zeitraum**: | ||
+ | - **Benachrichtigungen senden**: ja | ||
+ | - **E-Mail**: Mailadresse des Benutzers | ||
+ | - **Zustände**: | ||
+ | - **Änderungsstypen**: | ||
+ | - Benachrichtigungsvorlage für Hosts und Services erstellen | ||
+ | - **Felder hinzufügen**: | ||
+ | - **Benutzer**: | ||
+ | - **Benachrichtigungskommando**: | ||
+ | - **Benachrichtigungsintervall**: | ||
+ | - **Zeitraum**: | ||
+ | - **notification_from**: | ||
+ | - **Zustände**: | ||
+ | - **Änderungsstypen**: | ||
+ | - Benachrichtigung für Hosts und Services erstellen | ||
+ | - **Importe**: | ||
+ | - **Benutzer**: | ||
+ | - **Anwenden auf**: Hosts bzw. Services | ||
+ | - **Zuweisen wo**: 1. Textfeld: " | ||
+ | |||
+ | Wenn nun noch der Host oder Service die Benachrichtigungen aktiviert hat, werden Mails gesendet. | ||
+ | Man kann in IcingaWeb an einem Host oder Server eine Benutzerdefinierte Benachrichtigung senden und dann im Log des Containers das senden der Mail sehen. | ||
+ | Dazu müssen Benutzerdefinierte Benachrichtigungen oben überall als Änderungsstypen angegeben werden. | ||
+ | Die Logs des Containers kann man sich so anzeigen. | ||
+ | <code bash>cd / | ||
+ | docker compose logs -f icinga2</ | ||
+ | ===== Graphite ===== | ||
+ | Mit Graphite kann man Performancedaten der einzelnen Checks grafisch darstellen. | ||
+ | Zum einbinden von Graphite folgendes tun. | ||
+ | - Docker Container erstellen <code bash>cd / | ||
+ | vi docker-compose.yml</ | ||
+ | - hier beim Service " | ||
+ | - danach folgendes unter den letzten Service einfügen < | ||
+ | container_name: | ||
+ | image: graphiteapp/ | ||
+ | restart: always | ||
+ | ports: | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | - " | ||
+ | hostname: graphite | ||
+ | volumes: | ||
+ | #- ./ | ||
+ | #- ./ | ||
+ | - ./ | ||
+ | #- ./ | ||
+ | #- ./ | ||
+ | #- ./ | ||
+ | #- ./ | ||
+ | #- ./ | ||
+ | #- ./ | ||
+ | environment: | ||
+ | - GRAPHITE_TIME_ZONE=Europe/ | ||
+ | - GRAPHITE_DATE_FORMAT=%m/ | ||
+ | - COLLECTD=1</ | ||
+ | - Volumeordner für Graphite erstellen <code bash> | ||
+ | - Icinga Konfiguration zum senden von Performancedaten erstellen <code bash> | ||
+ | - hier die Datei graphite.conf mit folgendem Inhalt erstellen < | ||
+ | * The GraphiteWriter type writes check result metrics and | ||
+ | * performance data to a graphite tcp socket. | ||
+ | */ | ||
+ | |||
+ | object GraphiteWriter " | ||
+ | host = " | ||
+ | port = 2003 | ||
+ | }</ | ||
+ | - Graphite Container starten <code bash> | ||
+ | - ggf. in IcingaWeb unter Einstellungen (Zahnrad) -> " | ||
+ | - im Reiter " | ||
+ | - In der Ansicht eines Hosts oder Service werden nun die Graphen angezeigt, vorausgesetzt die Performancedaten sind in den jew. Icinga-Objekten eingeschaltet | ||
+ | - Über die URL " |