Istotna kwestia. Wszystko wykonywałem z poziomu root, dlatego poniższym
komendom brak sudo wskazującego które komendy wymagają podniesienia uprawnień.
Z zasady nie powinno się tak robić pomimo tego, że tak jest łatwiej.
1. Zainstaluj zależności
# yum install -y gcc unzip git libmcrypt4 libpcre3-dev ntp make cifs-utils
openssl-devel
W razie jeśli któraś z paczek jest już zainstalowana, może zostać zaktualizowana przez yum przy tym kroku. Nie ma obaw, yum dobrze dba o zależności.
2. Pobierz paczkę
# wget
https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.4.6.tar.gz
Jak będziesz to czytać pewnie wersja paczki Nagios Core się zmieni korzystając
ze
strony z historią wersji Nagios Core
można znaleźć jaki jest numer ostatniego stabilnego wydania i po prostu
podmienić numer w komendzie (oby nie zmienili struktury na serwerze).
3. Rozpakuj paczkę
# tar -zxvf nagios-4.4.6.tar.gz
# rm nagios-4.4.6.tar.gz
Usunąłem paczkę zaraz po rozpakowaniu, ale to już moja sprawa. Nie potrzebowałem aby się walała.
4. Zmiany na użytkownikach
# useradd nagios -M -r
# usermod -a -G nagios nginx
Dodaj użytkownika dla nagios jako użytkownika systemowego (-r) bez katalogu
domowego (-M). Przy okazji dodaj użytkownika nginx do grupy nagios, co pozwoli
na dostęp do zasobów nagiosa z poziomu procesu nginx.
5. Skompiluj i zainstaluj Nagios
# cd nagios-4.4.6
# ./configure --with-nagios-group=nagios --with-command-group=nginx
--with-mail=/usr/sbin/sendmail
# make all
# make install
# make install-init
# make install-commandmode
# make install-config
6. pobierz paczkę z pluginami
# cd ~
# wget https://nagios-plugins.org/download/nagios-plugins-2.3.3.tar.gz
7. rozpakuj paczkę z pluginami
# tar -xzvf nagios-plugins-2.3.3.tar.gz
# rm nagios-plugins-2.3.3.tar.gz
8. skompiluj i zainstaluj pluginy
# cd nagios-plugins-2.3.3
# ./configure --with-nagios-user=nagios --with-nagios-group=nagios
--with-openssl
# make
# make install
# chown -R nagios:nagios /usr/local/nagios/libexec
Na koniec jeszcze ustawiłem własność folderu z libexec w nagios, gdzie rezydują wszystkie pluginy. Domyślnie była ustawiona na roota.
9. pobierz i zainstaluj NRPE
# cd ~
# wget https://netix.dl.sourceforge.net/project/nagios/nrpe-3.x/nrpe-3.3.0.tar.gz
# tar -xzvf nrpe-3.3.0.tar.gz
# rm nrpe-3.3.0.tar.gz
# cd nrpe-3.3.0
# ./configure --enable-command-args --with-nagios-user=nagios --with-nagios-group=nagios --with-ssl=/usr/bin/openssl --with-ssl-lib=/usr/lib64/
# make all
# make install
# make install-init
# make install-config
# systemctl enable --now nrpe.service
Jedyna nowość to od razu włączyłem usługę nrpe do startu razem z systemem, a
opcja --now
uruchomiła ją również w tej sesji.
10. Instalacja fcgi
Nagios używa fcgi do części czynności. Nginx nie obsługuje samodzielnie fcgi dlatego potrzebne jest dodatkowe narzędzie do tego. Wygląda na to, że najlepszą opcją jest użycie fcgiwrapper. Tu też pojawia się największa różnica względem tutoriali, na których pracowałem. W większości miejsc zalecane jest użycie spawn-fcgi. Okazuje się, że spawn-fcgi nie jest potrzebny, a nawet przeszkadza. Wystarczy odpowiednie użycie systemd.
# yum install -y fcgiwrap
Tworzymy konfigurację socket fcgiwrap dla systemd. W pliku /etc/systemd/system/fcgiwrap.socket
[Unit]
Description=fcgiwrap Socket
[Socket]
SocketMode=0600
SocketUser=nginx
SocketGroup=nginx
ListenStream=/run/nginx/fcgiwrap.sock
[Install]
WantedBy=sockets.target
Tworzymy konfigurację procesu fcgiwrap dla systemd. W pliku
/etc/systemd/system/fcgiwrap.service
:
[Unit]
Description=Simple CGI Server
After=nss-user-lookup.target
[Service]
ExecStart=/usr/sbin/fcgiwrap
User=nginx
Group=nginx
[Install]
Also=fcgiwrap.socket
Teraz wystarczy już tylko włączyć i uruchomić nowe komponenty systemd
# systemctl enable --now fcgiwrap.socket
# systemctl enable --now fcgiwrap.service
Teraz jeszcze wyjaśnienie czemu spawn-fcgi nie jest potrzebny, a mi nawet przeszkadzał. Na pierwszy rzut oka wydawało się, że robił to samo, bo uruchamiał proces fcgiwrap i tworzył socket. Kłopot był z SELinux. spawn-fcgi tworzył socket i spawnował proces w niewłaściwym kontekście przez co nginx nie miał możliwości się z nimi komunikować. W przeglądarce pojawiał się błąd 503, a w logach można było znaleźć informację o odrzuceniu połączenia. Problem można było obejść na 2 sposoby: osłabić SELinux, albo go nawet wyłączyć (odpada), albo dodać dla nginx uprawnienia do dostępu do kontekstu socket tak jak ustawił go spawn-fcgi. To niestety też tworzyło lukę bezpieczeństwa, więc odpadało. Skorzystanie bezpośrednio z systemd i odpowiednia konfiguracja socket i service zupełnie eliminują ten problem. Na to rozwiązanie natrafiłem tutaj.
11. Konfiguracja Nginx
Tu już wiele zależy od konfiguracji konkretnego serwera i domeny. W moim
przypadku nagios uruchomiony jest w ścieżce /nagios
na istniejącej domenie.
Dlatego też poniżej nie zamieszczam pełnej konfiguracji domeny, a jedynie
część dla nagios.
location /nagios {
try_files $uri $uri/
/index.php$is_args$args;
index index.php index.html
index.htm;
alias /usr/local/nagios/share;
allow all;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param AUTH_USER $remote_user;
fastcgi_param REMOTE_USER $remote_user;
}
location ~ \.cgi$ {
root /usr/local/nagios/sbin;
rewrite ^/nagios/cgi-bin/(.*)\.cgi /$1.cgi break;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param AUTH_USER $remote_user;
fastcgi_param REMOTE_USER $remote_user;
fastcgi_pass unix:/var/run/nginx/fcgiwrap.sock;
}
auth_basic "Nagios";
auth_basic_user_file /usr/local/nagios/etc/htpasswd.users;
}
location
~ ^/nagios/nagiosgraph/cgi-bin/(.*\.cgi)$ {
alias
/usr/local/nagiosgraph/cgi/$1;
allow all;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME
$request_filename;
fastcgi_param AUTH_USER
$remote_user;
fastcgi_param REMOTE_USER
$remote_user;
fastcgi_pass
unix:/var/run/nginx/fcgiwrap.sock;
}
location
/nagios/nagiosgraph {
alias
/usr/local/nagiosgraph/share;
allow all;
}
Istotne są konfiguracje cgi. Jak widać wszystkie zapytania do tych lokacji są
proxy do socket fcgiwrap.
To już wszystko. Teraz pozostaje tylko skonfigurować konkretne checki na
Nagios i nadzorować swoje serwery.
Źródła
- https://copr.fedorainfracloud.org/coprs/jorti/fcgiwrap/
- https://gist.github.com/vietdien2005/8712ebe930051bcb015e643a9c24d6d7
- https://www.centlinux.com/2019/08/configure-perl-fastcgi-on-centos-7-nginx-server.html
- https://www.nginx.com/blog/using-nginx-plus-with-selinux/
- https://olivertappin.com/command-line-tools/installing-nagios-nginx-php-fpm-nagiosgraph-ubuntu-16-04/
- https://atlgeek.wordpress.com/2014/05/12/nagios-4-nginx-ubuntu-14-04-lts/
- https://linuxize.com/post/how-to-install-and-configure-nagios-on-centos-7/
- https://blog.serverdensity.com/howto-install-nagios-in-30-minutes-and-jumpstart-your-monitoring/
- https://eopio.com/nginx-nagios-server-monitoring/
Brak komentarzy:
Prześlij komentarz