Instalacja Nagios + Grafana [Centos 7]

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/dashboard/script/histou.js?host=$HOSTNAME$
   register   0
}

define service {
   name       service-grafana
   action_url http://nagios_server_address/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).

 
 

Konfiguracja Grafana

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

Przykład

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

Przykładowe query

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.

You can skip to the end and leave a response. Pinging is currently not allowed.

2 comments

  1. Wosiek says:

    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ć?

  2. Arek says:

    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!

Pozostaw odpowiedź Wosiek Anuluj pisanie odpowiedzi

Twój adres email nie zostanie opublikowany.

Powered by WordPress | Designed by: NewWpThemes | Provided by Free WordPress Themes