Nagios to bardzo przydatne narzędzie do systemu monitoringu serwerów, usług, urządzeń itp.. Natomiast Grafana to dobre narzędzie do wizualizacji danych w postaci ładnych wykresów (posiada także możliwość ustawiania alarmów kiedy np. jakiś wykres przekroczy wskazane limity). Czyli tym razem instalacja narzędzia do monitoringu jakim jest Nagios i integracja z Grafana, która znacząco uatrakcyjni przeglądanie danych zebranych przez Nagiosa (przedstawiony opis dotyczy instalacji i integracji w systemie Centos 7). W tej części opisana jest tylko instalacja i integracja Nagiosa z Grafana. Nie ma tutaj żadnych opisów dotyczących konfiguracji wtyczek, urządzeń, usług i podłączenia ich do Nagiosa w celu monitorowania/zbierania danych do wykresów. Możliwe, że w przyszłości pojawią się opisy jak dodać do Nagiosa urządzenia/usługi, które mają być monitorowane.
Spis treści:
1. Instalacja Nagiosa
2. Instalacja Influxdb
3. Instalacja Nagflux
4. Instalacja Grafana
5. Instalacja Histou
6. Konfiguracja Nagflux
7. Konfiguracja Nagiosa do działania z Nagflux i Grafana
8. Konfiguracja firewalla (opcjonalnie: jeśli ktoś ma uruchomionego)
9. Konfiguracja Histou i Nagiosa
10. Konfiguracja Grafana
Konfiguracja systemu (Centos 7) dla której został wykonany ten opis dotyczy konfiguracji z wyłączonym SELINUX (/etc/selinux/config i w pliku config ustawione SELINUX=disabled. UWAGA: po ustawieniu SELINUX na disabled należy ponownie uruchomić system).
Instalacja Nagiosa
Najpierw należy zainstalować repozytorium epel-release
yum install epel-release
Po instalacji epel-release można zainstalować Nagiosa, Apache 2, wtyczki Nagios i potrzebne narzędzia
yum install nagios httpd nrpe nagios-plugins* net-snmp net-snmp-utils -y
Po zainstalowaniu dodajemy nagiosa i httpd do usług, które mają startować razem z systemem
systemctl enable nagios systemctl enable httpd
Instalacja Influxdb
Dodajemy nowe repozytorium
cat << EOF | sudo tee /etc/yum.repos.d/influxdb.repo [influxdb] name = InfluxDB Repository - RHEL \$releasever baseurl = https://repos.influxdata.com/rhel/\$releasever/\$basearch/stable enabled = 1 gpgcheck = 1 gpgkey = https://repos.influxdata.com/influxdb.key EOF
Instalujemy influxdb
yum install influxdb -y
Dodanie usługi do startu z systemem i uruchomienie Influxdb
systemctl enable influxdb
systemctl start influxdb
Proces instalacji Influxdb został także opisany na stronie Influxdb (https://docs.influxdata.com/influxdb/v1.7/introduction/installation/).
Instalacja Nagflux
Nagflux wprowadza performance data do bazy danych Influxdb, które jest zbierane przez Nagiosa.
yum install -y golang git
Następnie wykonujemy instalację nagfluxa
cd /tmp export GOPATH=$HOME/gorepo mkdir $GOPATH go get -v -u github.com/griesbacher/nagflux go build github.com/griesbacher/nagflux mkdir -p /opt/nagflux cp $GOPATH/bin/nagflux /opt/nagflux/ mkdir -p /usr/local/nagios/var/spool/nagfluxperfdata chown nagios:nagios /usr/local/nagios/var/spool/nagfluxperfdata
Po instalacji instalujemy service dla systemctl
cp $GOPATH/src/github.com/griesbacher/nagflux/nagflux.service /usr/lib/systemd/system/ chmod +x /usr/lib/systemd/system/nagflux.service
Przeładowujemy daemona systemctl i ustawiamy nagfluxa żeby startował razem z systemem w czasie bootowania.
UWAGA: nie uruchamiamy nagfluxa na tym etapie i wykonujemy tylko podane poniżej komendy.
systemctl daemon-reload
systemctl enable nagflux
Instalacja Grafana
Dodajemy repozytorium Grafana
cat << EOF | sudo tee /etc/yum.repos.d/grafana.repo [grafana] name=grafana baseurl=https://packages.grafana.com/oss/rpm repo_gpgcheck=1 enabled=1 gpgcheck=1 gpgkey=https://packages.grafana.com/gpg.key sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt EOF
Instalujemy Grafana
yum install grafana -y
Aktywujemy Grafana do uruchamiania razem z systemem i uruchamiamy Grafana.
systemctl enable grafana-server
systemctl start grafana-server
Instalacja Histou
Wykonujemy poniższe polecenia
cd /tmp yum install wget -y wget -O histou.tar.gz https://github.com/Griesbacher/histou/archive/v0.4.3.tar.gz mkdir -p /var/www/html/histou cd /var/www/html/histou tar xzf /tmp/histou.tar.gz --strip-components 1 cp histou.ini.example histou.ini cp histou.js /usr/share/grafana/public/dashboards/
Konfiguracja Nagflux
Tworzymy plik /opt/nagflux/config.gcfg i wprowadzamy do niego konfigurację jak poniżej
[main] NagiosSpoolfileFolder = "/usr/local/nagios/var/spool/nagfluxperfdata" NagiosSpoolfileWorker = 1 InfluxWorker = 2 MaxInfluxWorker = 5 DumpFile = "nagflux.dump" NagfluxSpoolfileFolder = "/usr/local/nagios/var/nagflux" FieldSeparator = "&" BufferSize = 10000 FileBufferSize = 65536 DefaultTarget = "all" [Log] LogFile = "" MinSeverity = "INFO" [InfluxDBGlobal] CreateDatabaseIfNotExists = true NastyString = "" NastyStringToReplace = "" HostcheckAlias = "hostcheck" [InfluxDB "nagflux"] Enabled = true Version = 1.0 Address = "http://127.0.0.1:8086" Arguments = "precision=ms&u=root&p=root&db=nagflux" StopPullingDataIfDown = true [InfluxDB "fast"] Enabled = false Version = 1.0 Address = "http://127.0.0.1:8086" Arguments = "precision=ms&u=root&p=root&db=fast" StopPullingDataIfDown = false
Uruchamiamy Nagflux
systemctl start nagflux
Sprawdzamy poprawność konfiguracji Nagflux
curl -G "http://localhost:8086/query?pretty=true" --data-urlencode "q=show databases"
Wynik powinien być taki jak poniżej
{ "results": [ { "statement_id": 0, "series": [ { "name": "databases", "columns": [ "name" ], "values": [ [ "_internal" ], [ "nagflux" ] ] } ] } ] }
Konfiguracja Nagiosa do działania z Nagflux i Grafana
Edytujemy plik /etc/nagios/nagios.cfg i edytujemy w nim parametry tak aby były takie jak podane poniżej
process_performance_data=1 host_perfdata_file=/usr/local/nagios/var/host-perfdata host_perfdata_file_template=DATATYPE::HOSTPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tHOSTPERFDATA::$HOSTPERFDATA$\tHOSTCHECKCOMMAND::$HOSTCHECKCOMMAND$ host_perfdata_file_mode=a host_perfdata_file_processing_interval=15 host_perfdata_file_processing_command=process-host-perfdata-file-nagflux service_perfdata_file=/usr/local/nagios/var/service-perfdata service_perfdata_file_template=DATATYPE::SERVICEPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tSERVICEDESC::$SERVICEDESC$\tSERVICEPERFDATA::$SERVICEPERFDATA$\tSERVICECHECKCOMMAND::$SERVICECHECKCOMMAND$ service_perfdata_file_mode=a service_perfdata_file_processing_interval=15 service_perfdata_file_processing_command=process-service-perfdata-file-nagflux
Dodajemy wymagane komendy dla Nagiosa edytując plik /etc/nagios/objects/commands.cfg (komendy możemy dodać na samym końcu pliku)
define command { command_name process-host-perfdata-file-nagflux command_line /bin/mv /usr/local/nagios/var/host-perfdata /usr/local/nagios/var/spool/nagfluxperfdata/$TIMET$.perfdata.host } define command { command_name process-service-perfdata-file-nagflux command_line /bin/mv /usr/local/nagios/var/service-perfdata /usr/local/nagios/var/spool/nagfluxperfdata/$TIMET$.perfdata.service }
Weryfikujemy poprawność konfiguracji Nagiosa
nagios -v /etc/nagios/nagios.cfg
W wyniku powinno być mędzy innymi
Total Warnings: 0 Total Errors: 0 Things look okay - No serious problems were detected during the pre-flight check
Wskazuje to na to, że nie ma żadnych ostrzeżeń oraz błędów w konfiguracji.
Ustawiamy chown dla miejsca w którym będą zapisywane dane performance
chown -R nagios:nagios /usr/local/nagios
Jeżeli wszystko jest OK to uruchamiamy Nagiosa
systemctl start nagios
Po minucie kiedy Nagios już zbierze pierwsze dane możemy wykonać test czy dane są prawidłowo dodawane do bazy.
curl -G "http://localhost:8086/query?db=nagflux&pretty=true" --data-urlencode "q=show series"
Wynik powinien być taki jak poniżej
{ "results": [ { "statement_id": 0, "series": [ { "columns": [ "key" ], "values": [ [ "metrics,command=check-host-alive,crit-fill=none,host=localhost,performanceLabel=pl,service=hostcheck,unit=%,warn-fill=none" ], [ "metrics,command=check-host-alive,crit-fill=none,host=localhost,performanceLabel=rta,service=hostcheck,unit=ms,warn-fill=none" ], [ "metrics,command=check_local_load,crit-fill=none,host=localhost,performanceLabel=load1,service=Current\\ Load,warn-fill=none" ], [ "metrics,command=check_local_load,crit-fill=none,host=localhost,performanceLabel=load15,service=Current\\ Load,warn-fill=none" ], [ "metrics,command=check_local_load,crit-fill=none,host=localhost,performanceLabel=load5,service=Current\\ Load,warn-fill=none" ], [ "metrics,command=check_local_users,crit-fill=none,host=localhost,performanceLabel=users,service=Current\\ Users,warn-fill=none" ], [ "metrics,command=check_ping,crit-fill=none,host=localhost,performanceLabel=pl,service=PING,unit=%,warn-fill=none" ], [ "metrics,command=check_ping,crit-fill=none,host=localhost,performanceLabel=rta,service=PING,unit=ms,warn-fill=none" ] ] } ] } ] }
Przechodzimy do konfiguracji dostępu do Nagiosa przez przeglądarkę
htpasswd /etc/nagios/passwd nagiosadmin
Po komendzie htpasswd podajemy hasło dla użytkownika nagiosadmin.
Startujemy httpd
systemctl start httpd
Konfiguracja firewalla (opcjonalnie: jeśli ktoś ma uruchomionego)
Dodajemy wymagane porty do firewalla przy pomocy komendy firewall-cmd
firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --zone=public --add-port=3000/tcp --permanent firewall-cmd --reload
Konfiguracja Histou i Nagiosa
Konfigurujemy Histou do wyświetlania linków do wykresów bezpośrednio w panelu Nagiosa (wykresy można dodawać także samemu w Grafanie).
Edytujemy plik /usr/share/grafana/public/dashboards/histou.js
var url = 'http://localhost/histou/';
localhost zmieniamy na adres IP naszego serwera czyli np.
var url = 'http://192.168.0.200/histou/';
Edytujemy plik /etc/nagios/objects/templates.cfg
Dodajemy na samym końcu pliku dwie komendy
define host { name host-grafana action_url http://nagios_server_address:3000/dashboard/script/histou.js?host=$HOSTNAME$ register 0 } define service { name service-grafana action_url http://nagios_server_address:3000/dashboard/script/histou.js?host=$HOSTNAME$&service=$SERVICEDESC$ register 0 }
nagios_server_address zamieniamy na adres IP naszego serwera z Nagiosem (lub nazwę domeny Nagiosa jeżeli taką mamy).
Następnie odszukujemy
define host{
name generic-host ; The name of this host template
Modyfikujemy dodając use host-grafana tak jak w przykładzie poniżej
define host{
name generic-host ; The name of this host template
use host-grafana
Odszukujemy
define service{ name generic-service ; The 'name' of this service template
Modyfikujemy dodając use service-grafana tak jak w przykładzie poniżej
define service{ name generic-service ; The 'name' of this service template use service-grafana
Wykonujemy weryfikację konfiguracji
nagios -v /etc/nagios/nagios.cfg
Jeśli nie ma błędów to wykonujemy restart nagiosa
systemctl restart nagios
Teraz możemy wejść do panelu Nagiosa przez adres http://adres_ip_naszego_serwera/nagios
Logowanie to nagiosadmin i hasło takie jak ustawiliśmy wcześniej przy pomocy komendy htpasswd.
W panelu nagiosa przy każdej monitorowanej usłudze będzie ikonka z odnośnikiem do wykresu (np. opcja services z lewego menu wyświetli monitorowane usługi). Ikonka z grafem to odnośnik do wykresu.
Można taki wykres edytować i podejrzeć jakie Query są użyte. Przydatne w celu tworzenia własnych wykresów (można także wykres skopiować, wkleić do własnego dashboarda w Grafanie i dostosować do włansych potrzeb).
Grafana jest dostępna pod adresem http://adres_ip_naszego_serwera:3000
Pierwsze logowanie odbywa się przy pomocy danych
login: admin
hasło: admin
Po zalogowaniu zostaniemy poproszeni o ustawienie nowego hasła.
Pierwszy ekran Grafany to Home Dashboard, na którym klikamy w “Add data source”.
Z listy wybieramy “InfluxDB”. W ustawieniach, które się pokażą uzupełniamy dane
Name: nagflux URL: http://localhost:8086 Database: nagflux
Pozostałe parametry pozostawiamy bez zmiany. Klikamy przycisk Save & Test. Powininen pojawić się komunikat “Data source is working”.
Teraz możemy stworzyć dowolne wykresy i dashboardy. Jeden z przykładów poniżej.
Klikamy w Grafanie Home i wybieramy New Dashboard), nastepnie Add query.
Ustawiamy:
FROM default metrics WHERE host = localhost AND service = Current Load AND performanceLabel = load1 SELECT field (value) mean () GROUP BY time ($__interval) tag (performanceLabel) fill (null) FORMAT AS Time series ALIAS BY $tag_performanceLabel
Przechodzimy do zakładki Visualization i w pozycji Stacking & Null value ustawiamy Connected
To zamieni punkty/kropki na wykresie w połączone linie i wykres będzie wyglądać tak jak na przykładowym obrazku
W celu zapisania wykresu klikamy ikonkę dyskietki (save dashboard). Nadajemy wybraną nazwę dashboardowi i zapisujemy.
W prawym górnym rogu możemy ustawiać zakres przedstawianych danych, a także włączyć automatyczne odświeżanie wykresu. Przykład na poniższym obrazku.
Kolory poszczególnych serii na wykresie edytujemy klikając na kolor przedstawiony w legendzie przy danej serii danych.
To wszystko. Teraz pozostaje skonfigurować/dodać uslugi w Nagiosie, które mają być monitorowane, a w Grafanie stworzyć ładne wykresy zgodne z naszą wyobraźnią i potrzebami.
Grafana to świetne narzędzie analityczne. Pozwala w przystępny sposób wizualizować dane. Rozwiązanie jest darmowe i pozwala na integrację z wieloma źródłami danych. Jak choćby bazy danych czy Zabbixem. A to dla mnie ogromna zaleta. Do tego, świetnie wygląda. Polecam!
Cześć, zrobiłem wszystko jak powyżej opisałeś, jednak dotarłem do momentu:
curl -G “http://localhost:8086/query?db=nagflux&pretty=true” –data-urlencode “q=show series”
i mój wynik to:
{
“results”: [
{
“statement_id”: 0
}
]
}
Masz jakiś pomysł jak to rozwiązać?