Od jakiegoś czasu monitoruję swoje systemy z użyciem Sensu (po ucieczce z Nagiosa). Niedawno naszła mnie ochota zainstalować sensu-client też na moim domowym NASie. Zatem stworzyłem sobie na tę potrzebę jail, i zacząłem się bawić.
Co będzie potrzebne?
- Jako, że tu konfigurujemy tylko klienta, dostęp do serwera Sensu
- FreeNAS w wersji 9.10+ lub FreeBSD w wersji 10+
- Dostęp do internetu.
Instalacja
Ja wybrałem instalację w jailu, ale generlanie pewnie z powodzeniem możecie tę instalację przeprowadzić na głównym systemie, choć ja bym tego nie robił :)
Zaczynamy od pobrania odpowiedniej paczki ze strony Sensu - Sensu
wget https://sensu.global.ssl.fastly.net/freebsd/10.0/amd64/sensu-0.26.3_1.txz
Możliwe, że wget będzie Wam brakował więc:
pkg install wget
Następnie instalujemy paczkę sensu:
pkg add sensu--0.26.3_1.txz
Tada! ;)
Podstawowa konfiguracja
Wszystkie standardowe pliki konfiugracyjne znajdziecie w
/usr/local/etc/sensu/
Tak jak na innych platformach wystarczy stworzyć swój config.json i plik konfiguracji transportu w /usr/local/etc/sensu/conf.d. To akurat jest dobrze opisane w dokumentacji
Uruchomienie
Aby uruchomić klienta najpierw musimy go włączyć w /etc/rc.conf. Zatem dodajemy tę linię:
sensu_client_enable="yes"
Następnie odplamy serwis:
service sensu-client start && service sensu-client status
Możemy się utwierdzić w przekonaniu czy się udało czy nie zaglądając do /var/log/sensu/
Checki
I tu kosa trafia na kamień. Niestety, sporo standardowych checków Sensu na FreeBSD/NAS nie działa (czego z resztą można było się spodziewać). Zatem należołby utworzyć dla tej maszyny osobną subskrybcję z własnymi checkami.
Checki które działają, mniej lub bardziej:
- sensu-plugins-network-checks
- sensu-plugins-disk-checks
Problemy, bonusy ;)
Okazuje się, że Sensu-client na BSD nie jest tak stabilny jak na pozostałych platformach i potrafi czasami umrzeć. Jako, że standardowo usługi nie są z automatu restartowane jeśli sfailują. Napisałem sobie watchera, którego odpalam co dwie minuty z crontaba:
#!/usr/local/bin/bash
pid=$(cat /var/run/sensu/sensu_client.pid)
status=$(/usr/sbin/service sensu-client status | grep $pid > /dev/null ; echo $?)
if [ $status -eq 1 ]; then
/usr/sbin/service sensu-client start
fi
Dlaczego akurat co dwie? Bo chciałbym dostać informację, że były jakieś problemy, a mój standardowy próg pierwszego powiadomienia o braku komunikacji z jakimś urządzeniem to 60 sekund. Może za jakiś czas, jeśli mnie to bardzo będzie nękało, będę odpalał watchera co minutę żeby cieszyć się spokojem ;)