Nagiosgraph – графици у Nagiosu, инсталација

Nagiosgraph прикупља, анализира и раставља излазне податке добијене од Nagios плагинова и смешта те податке у RRD фајлове, креира графике и генерише HTML странице са графицима.

Nagiosgraph је важна екстензија, додатак Nagios-у који нам омогућава брзи преглед историје перформанси за сваки хост или сервис кога надгледамо и то у графичком приказу.

nagiosgraph-main

Интегрисан је у Nagios али је и даље независтан од њега. Писан је у програмском језику Perl па га је могуће модификовати по потребама. Не треба класичну базу већ све чува у rrd(round-robin database) фајловима. Нови графици за нове хостове и сервисе се генеришу аутоматски ако постоји одговарајући приказ излаза у perl фајлу map. Ако немамо приказ у map-у онда је потребно ажурирати фајл map и рестартовати Nagios.

Укратко, Nagiosgraph скрипта insert.pl прикупља излазне податке, раставља их према предефинисаним критеријумима који се налазе у конфигурационом фајлу map и креира или ажурира RRD фајлове. Обично постоји један RRD фајл по сервису или хосту. Сви RRD фајлови везани за један хост се налазе у директоријуму са називом тог хоста.

Графици перформанси су интегрисани у сам Nagios приказ преко линка и још једне мале додатне иконице која се налази поред самог сервиса. Кликом на иконицу добијамо приказ графика за тај сервис за све хостове.

Инсталација

Упутство је тестирано на оперативном систему ЦентОС 7 на коме су већ инсталирани Nagios Core 4.1.1 и Nagios plugin 2.1.1 и где се тренутно надгледа само localhost и неки његови сервиси.

За инсталацију Nagios Core и Nagios додатак видети упутство на https://kompjuteras.com/osnovna-instalacija-i-konfiguracija-nagios-4-na-centos-7-korak-po-korak/

Предуслови

Потребно је да, поред Nagios сервера који је у функцији, имамо инсталиране и још неке додатне пакете (perl-GD, php-gd, rrdtool-perl,…) и то радимо следећом командом:

yum -y install perl-GD php-gd rrdtool-perl rrdtool-php rrdtool perl-CGI perl-Time-HiRes

Корак 1: Креирање директоријума и преузимање са интернета Nagiosgraph пакета

Креирамо директоријум nagiosgraph за Nagiosgraph инсталацију

mkdir /root/nagiosgraph
cd /root/nagiosgraph

Помоћу команде wget преузимамо последњу верзију Nagiosgraph пакета, распакујемо је командом tar и прелазимо у новокреирани директоријум nagiosgraph-1.5.2

wget http://downloads.sourceforge.net/project/nagiosgraph/nagiosgraph/1.5.2/nagiosgraph-1.5.2.tar.gz
tar -xzvf nagiosgraph-1.5.2.tar.gz
cd nagiosgraph-1.5.2

Корак 2: Провера потребних предуслова за инсталацију Nagiosgraph

Провера да ли су инсталирани сви потребни пакети вршимо користећи „install.pl“ скрипту са опцијом „check-prereq

./install.pl --check-prereq

Ако не добијемо никакву грешку прелазимо на корак 3.
Ако нам се појави следећи приказ где имамо грешку за пакете Digest::MD5…***FAIL*** i Nagios::Config…FAIL<<<< онда је потребно додатно да инсталирамо недостајуће пакете.

DigestFail
Да би инсталирали недостајуће пакете потребно је прво да инсталирамо CPAN shell. При самој инсталацији одговарамо да хоћемо аутоматску инсталацију.

yum install perl-CPAN -y

Прелазимо у CPAN shell. Када први пут стартујемо CPAN добијемо гомилу питања на која одговарамо или са Yes или једноставно ударимо Ентер на тастатури.

perl -MCPAN -e shell

Инсталирамо недостајуће модуле и излазимо из CPAN shell-а после сваке инсталације појединачног модула, то у нашем случају је:

cpan>install Digest::MD5
cpan>exit

Сад опет улазимо у CPAN.

perl -MCPAN -e shell
cpan>install Module::Build
cpan>exit

Опет улазимо у CPAN командом

perl -MCPAN -e shell
cpan> install Nagios::Config
cpan> exit

Опет проверавамо да ли имамо све потребне пакете и модуле.

./install.pl --check-prereq

Потребно је да добијемо следећу слику:
check-prereq

Сада смо спремни за конфигурацију nagiosgraph-а.

Корак 3: Креирање директоријума nagiosgraph и копирање садржаја

Креирање директоријума nagiosgraph у оквиру подразумеваног фолдера nagios на локацији /usr/local/nagios/.

Копирање целог фолдера nagiosgraph/nagiosgraph-1.5.2/etc у новокреирани доректоријум nagiosgraph на путањи /usr/local/nagios/.

cd /usr/local/nagios
mkdir /usr/local/nagios/nagiosgraph/
cp /root/nagiosgraph/nagiosgraph-1.5.2/etc/* /usr/local/nagios/nagiosgraph/

Корак 4: Измена cgi скрипти и скрипте insert.pl и њихово копирање

Све фајлове у фолдеру /root-nagiosgraph/nagiosgraph-1.5.2/cgi/ отворити са nano и изменити „use lib“ линију тако да показује на директоријум из претходне тачке (на /usr/local/nagios/nagiosgraph)

cd /root/nagiosgraph/nagiosgraph-1.5.2/cgi/

cgi
Имамо осам фајлова да изменимо – export.cgi, show.cgi, showconfig.cgi, showgraph.cgi, showgroup.cgi, showhost.cgi, showservice.cgi, testcolor.cgi.

Пример за export.cgi.

nano export.cgi

exportcgi

Ово можете урадити ручно кроз „vi“ едитор или једноставном командом за замену текста

sed -i s/"use lib '\/opt\/nagiosgraph\/etc';"/"use lib '\/usr\/local\/nagios\/nagiosgraph';"/g *.cgi

Фајл insert.pl у фолдеру /root/nagiosgraph/nagiosgraph-1.5.2/lib/ отворити и изменити „use lib“ линију тако да показује на директоријум из претходне тачке (на /usr/local/nagios/nagiosgraph/)

cd /root/nagiosgraph/nagiosgraph-1.5.2/lib/
sed -i s/"use lib '\/opt\/nagiosgraph\/etc';"/"use lib '\/usr\/local\/nagios\/nagiosgraph';"/g insert.pl

ngshared
Сада овако преправљене фајлове копирамо на одговарајуће путање (insert.pl у директоријум /usr/local/nagios/libexec а све cgi фајлове у директоријум /usr/local/nagios/sbin)

cp /root/nagiosgraph/nagiosgraph-1.5.2/lib/insert.pl /usr/local/nagios/libexec/
cp /root/nagiosgraph/nagiosgraph-1.5.2/cgi/*.cgi /usr/local/nagios/sbin

Корак 5: Копирање CSS, Javascript фајлова, измена конфигурационих и лог фајлова, креирање припадајућих директоријума

Копирати CSS и Javascript фајлове из директоријума /root/nagiosgraph/nagiosgraph-1.5.2/share/ у директоријум веб сервера /usr/local/nagios/share

cp /root/nagiosgraph/nagiosgraph-1.5.2/share/nagiosgraph.css /usr/local/nagios/share
cp /root/nagiosgraph/nagiosgraph-1.5.2/share/nagiosgraph.js /usr/local/nagios/share
Измена фајла nagiosgraph.cfg

Потребно је изменити фајл nagiosgraph.conf у директоријуму /usr/local/nagios/nagiosgraph/etc/

cd /usr/local/nagios/nagiosgraph/
nano nagiosgraph.conf

Мењамо следеће линије (можете и да закоментаришете постојеће па ове само додате после последњег коментара):

logfile = /usr/local/nagios/var/nagiosgraph.log
cgilogfile = /usr/local/nagios/var/nagiosgraph-cgi.log
perflog = /usr/local/nagios/var/perfdata.log
rrddir = /usr/local/nagios/nagiosgraph/rrd
mapfile = /usr/local/nagios/nagiosgraph/map
nagiosgraphcgiurl = /nagios/cgi-bin
javascript = /nagios/nagiosgraph.js
stylesheet = /nagios/nagiosgraph.css
Креирање директоријума rrd и измена дозвола

Креирамо директоријум rrd на путањи /usr/local/nagios/nagiosgraph и дајемо кориснику nagios права читања, уписивања и извршавања.

mkdir /usr/local/nagios/nagiosgraph/rrd
chown nagios /usr/local/nagios/nagiosgraph/rrd
chmod 777 /usr/local/nagios/nagiosgraph/rrd
Креирање фајла nagiosgraph.log и измена дозвола

Намештамо право приступа фајлу nagiosgraph.log тако да корисник nagios може да му приступи и да уписује, чита и извршава (прво са командом touch направимо празан лог фајл)

touch /usr/local/nagios/var/nagiosgraph.log
chown nagios /usr/local/nagios/var/nagiosgraph.log
chmod 777 /usr/local/nagios/var/nagiosgraph.log
Креирање фајла nagiosgraph-cgi.log и измена дозвола

Намештамо право приступа фајлу nagiosgraph-cgi.log тако да корисник nagios може да му приступи и да уписује, чита и извршава(прво са командом touch направимо празан лог фајл)

touch /usr/local/nagios/var/nagiosgraph-cgi.log
chown nagios /usr/local/nagios/var/nagiosgraph-cgi.log
chmod 777 /usr/local/nagios/var/nagiosgraph-cgi.log
Измене пермисија над директоријумом „var“

Подешавамо права приступа корисника nagios над директоријумом /usr/local/nagios/var тако да може да креира и брише perfdata фајлове

chown nagios /usr/local/nagios/var
chmod 777 /usr/local/nagios/var

Корак 6: Измена Nagios конфигурационог фајла

У Nagios конфигурационом фајлу мењамо следеће линије:

nano /usr/local/nagios/etc/nagios.cfg
process_performance_data=1
service_perfdata_file=/usr/local/nagios/var/perfdata.log
service_perfdata_file_template=$LASTSERVICECHECK$||$HOSTNAME$||$SERVICEDESC$||$SERVICEOUTPUT$||$SERVICEPERFDATA$
service_perfdata_file_mode=a
service_perfdata_file_processing_interval=30
service_perfdata_file_processing_command=process-service-perfdata

Корак 12: Измене пермисија над nagiosgraph фајловима и директоријумима

Подешавамо права приступа корисника nagios над директоријумом /usr/local/nagios/nagiosgraph

chown nagios /usr/local/nagios/nagiosgraph
chmod 755 /usr/local/nagios/nagiosgraph

Промена власника фајла insert.pl

chown nagios /usr/local/nagios/libexec/insert.pl

Корак 14: Nagios фајл commands.cfg

У nagios commands.cfg фајлу потребно је да додамо дефиницију команде.

cd /usr/local/nagios/etc/objects
nano commands.cfg

Коментаришемо постојећу дефиницију за process-service-perfdata па додајемо нашу на крај фајла:

define command {
command_name process-service-perfdata
command_line /usr/local/nagios/libexec/insert.pl
}

…тако да сам то изгледа овако:

command

Корак 15: Провера Nagios конфигурације, рестарт и верификација рада

Проверу конфигурације Nagiosа радимо командом:

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Рестартујемо nagios командом:

/etc/init.d/nagios restart

Верификација да nagiosgraph ради је провера следецег линка (унесите вашу адресу сервера, у овом случају ће се радити о адреси 192.168.11.105 – што можете видети у скриншоту):

http://<<server>>/nagios/cgi-bin/showconfig.cgi

У веб браузеру треба да добијемо следеће:

Verifikacija

Корак 18: Измене Nagios .cfg фајлова

У nagios templates.cfg фајлу потребно је да додамо дефиницију сервиса.

cd /usr/local/nagios/etc/objects
nano templates.cfg

Додајемо следеће линије на крај фајла:

define service {
name Service-graph ;The name of this service template
use generic-service ;Inherit difolt values from the generic-service definition
action_url /nagios/cgi-bin/show.cgi?host=$HOSTNAME$&service=$SERVICEDESC$'onMouseOver='showGraphPopup(this)' onMouseOut='hideGraphPopup()'rel='/nagios/cgi-bin/showgraph.cgi?host=$HOSTNAME$&service=$SERVICEDESC$
register 0
}
Измене Nagios фајла localhost.cfg

Креирамо линк ка графику за одређени сервис тако што додајемо template Service-graph том сервису у фајлу localhost.cfg.

Када будемо креирали nagios фајл services.cfg и повезали га у конфигурационом фајлу nagios.cfg онда ћемо template Service-graph додавати сервисима разлицитих хостова у фајлу services.cfg.

Тренутно, у фајлу localhost.cfg додајемо template Service-graph сервисима PING, Root Partition, Current Load.

cd /usr/local/nagios/etc/objects
nano localhost.cfg

У оквиру дефиниције сервиса иза кључне речи use додајемо и template Service-graph.

define service {
use local-service,Service-graph

}

Конкретно у нашем случају за дефиницију сервиса PING то треба да изгледа као на слици:
localhost

Замена Nagios иконице са nagiosgraph иконицом

mv /usr/local/nagios/share/images/action.gif /usr/local/nagios/share/images/action.gif-orig
cp /root/nagiosgraph/nagiosgraph-1.5.2/share/graph.gif /usr/local/nagios/share/images/action.gif
Измена фајла nagiosgraph.ssi

У фајлу nagiosgraph.ssi поставити тачан УРЛ за фајл nagiosgraph.js

nano /root/nagiosgraph/nagiosgraph-1.5.2/share/nagiosgraph.ssi

мењамо линију
src=“/nagiosgraph/nagiosgraph.js“
нова линија је
src=“/nagios/nagiosgraph.js“

Копирамо новокреирани фајл nagiosgraph.ssi уместо фајла common-header.ssi

cp /root/nagiosgraph/nagiosgraph-1.5.2/share/nagiosgraph.ssi /usr/local/nagios/share/ssi/common-header.ssi

Додајемо линкове ка графицима на nagios services html страницама.
Мењамо фајл side.php на путањи /usr/local/nagios/share

nano /usr/local/nagios/share/side.php

после 49 линије (ако је некоме лакши рад у Notepad++ онда прекопира преко програмчића WinSCP-а фајл на Виндовс и отвори га у Notepad++ и тамо га ажурира, па га поново аплоудује кад заврши)
side1
додати следеће линије

<li><a href="/nagios/cgi-bin/show.cgi" target="main">Graphs</a></li>
<li><a href="/nagios/cgi-bin/showservice.cgi" target="main">Graphs by Service</a></li>
Провера конфигурације и рестарт Nagiosа
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
/etc/init.d/nagios restart

Корак 24: Права приступа фајловима

На крају је остало да подесимо права приступа одређеним фајловима.
Потребно је урадити следеће:

chmod 777 /usr/local/nagios/share/nagiosgraph.js
chmod 777 /usr/local/nagios/share/nagiosgraph.css
chmod 755 /usr/local/nagios/nagiosgraph/*
chmod 777 /usr/local/nagios/nagiosgraph/nagiosgraph.conf
chown nagios /usr/local/nagios/nagiosgraph
chown nagios /usr/local/nagios/libexec/*.*
chmod 755 /usr/local/nagios/libexec/*
chmod 777 /usr/local/nagios/libexec/insert.pl
chmod 766 /usr/local/nagios/etc/objects/*
chown -R nagios:nagios /usr/local/nagios/nagiosgraph/rrd
chown -R nagios:nagios /usr/local/nagios/sbin/
chmod 777 /usr/local/nagios/sbin/*

Корак 25: Провера рада nagiosgraph скрипте и провера постојања rrd фајлова

Можемо да проверимо сам рад скрипте insert.pl тако што ћемо је покренути директно из командне линије.
Ако не добијемо никакву грешку скрипта ради ок.

cd /usr/local/nagios/libexec
./insert.pl

Можемо да проверимо и да ли већ постоје rrd фајловим класичним листањем поддиректоријума хоста за који желимо да погледамо фајлове (потребно је да протекне одређено време око 15-ак минута како би се појавили rrd фајлови).

ls /var/nagios/rrd/localhost

ДОДАТАК: MAP (мап) фајл

Nagiosgraph RRD фајлови се генеришу тако што скрипта insert.pl „чита“ конфигурациони фајл map у директоријуму /usr/local/nagios/nagiosgraph. У том конфигурационом фајлу који је писан у perl језику се налази синтакса за читање aутпута или perfdata из фајла nagiosgraph.log.
Подразумевани map конфигурациони фајл који долази са овом верзијом nagiosgraph-а (верзија 1.5.2) није баш најадекватнији и најкориснији. На пример, график за сервис PING је тотално бескористан и изгледа као на следећој слици.
map1
Видимо на графику да су приказани подаци само за pl (packet loss) који су 99% увек исти, а битан график rta (round trip average) немамо.

Зато је препорука да се овај подразумевани map конфигурациони фајл замени са фајлом у коме можемо ми сами да додајемо синтаксу за цртање графова.
У директоријуму nagiosgraph-1.5.2 имамо и директоријум еxamples где нам је дато више примера map конфигурационог фајла.

Моја препорука је да се ископира фајл map_1_4_3 из овог директоријума на путању /usr/local/nagios/nagiosgraph, да се преименује фајл map у map-original, а овај нови да се преименује у map тако да он постане главни конфигурациони map фајл. Потребно је избрисати rrd фајлове из поддиректоријума localhost, рестартовати nagios (корак 23), и сачекати одређено време (15-ак минута) да се креирају нови rrd фајлови.

У овом фајлу синтакса за сервис PING је:

service nagios stop
rm -rf /usr/local/nagios/nagiosgraph/rrd/localhost/*
mv /usr/local/nagios/nagiosgraph/map /usr/local/nagios/nagiosgraph/map-original
cp /root/nagiosgraph/nagiosgraph-1.5.2/examples/map_1_4_3 /usr/local/nagios/nagiosgraph/map
service nagios start
# Service type: ping
    # output:PING OK - Packet loss = 0%, RTA = 0.00 ms
    /output:PING.*?(\d+)%.+?([.\d]+)\sms/
    and push @s, [ 'pingloss',
           [ 'losspct', GAUGE, $1 ]]
    and push @s, [ 'pingrta',
           [ 'rta', GAUGE, $2/1000 ]];

График је:

map2

Кад кликнемо на иконицу:ikonica добијамо само график за тај сервис.

map3

Можемо директно на графику да изаберемо детаљнији приказ за одређени временски интервал.

map4

У горњем десном углу имамо опцију и да изаберемо и хост и service

map5

map6

Као додатак за map конфигурациони фајл унео сам и већ готове и проверене синтаксе за одређене сервисе.

#---------------------------------------------------------------------------- #
# Service type:Zauzetost CPU
# output:2 CPU, average load 0.0% 70% : OK
# alternate out:4 CPU, average load 0.0% 70% : OK
/output:(\d+) CPU,.*average load (\d+\.\d+)\% ([0-9]+)\% : /
and push @s, [ $1,
[ avg5min, GAUGE, $2 ] ];
#---------------------------------------------------------------------------- #
# Service type:Zauzetost memorije
# output:Virtual Memory: 10%used(1722MB/16428MB) (85%) : OK
/output:(\S+ Memory): (\d+)\%/
and push @s, [ $1,
[ 'pctused', GAUGE, $2 ] ];
#---------------------------------------------------------------------------- #
# Service type:Zauzetost particije C hard diska
# output:C:\ Label: Serial Number c0725793: 82%used(42090MB/51098MB) (85%) : OK
/output:(\S+):\\ Label:.*: (\d+)\%used/
and push @s, [ "$1_drive",
[ 'pctused', GAUGE, $2 ] ];
#---------------------------------------------------------------------------- #
# Service type:Provera iskoriscenosti memorije
# output:Status is OK - Memory: total: 206.85 MB, used: 22.88 MB (11%), free: 183.97 MB
/output:.*MEMORY:.* \((\d+)\%\).*/
and push @s, [ "MemoryUtil",
[ 'memutil', GAUGE, $1 ] ];
#---------------------------------------------------------------------------- #
# Service type:Provera srednje vrednosti CPU load u zadnjih 5 minuta
# output:Status is OK - CPU load average (5 min): 1 %, temperature normal
/output:.*CPU load average .*: (\d+) \%\.*/
and push @s, [ "CPULoadAvg",
[ 'cpuload', GAUGE, $1 ] ];
#---------------------------------------------------------------------------- #
# Service type:Protok linka na cisco ruteru
# output:OK Out: 9.39Kbps: In: 4.05Kbps (Sent 351.99Kb, Received 152.02Kb in 300 seconds)
/output:.* Out:.* (\d+.\d+).*: (\d+.\d+).*/
and push @s, [ "BandwidthOut",
[ 'Out', GAUGE, $1 ] ]
and push @s, [ "BandwidthIn",
[ 'In', GAUGE, $2 ] ];
#---------------------------------------------------------------------------- #
#servicedesc:Root Partition
# output:DISK OK - free space: / 41750 MB (89% inode=99%):
# perfdata:/=4910MB;37328;41994;0;46661
/output:DISK.*inode=/ and do {
my @_pct = /: (\/.*?) .*?(\d+)% inode=(\d+)%/g;
while ( my($_d,$_b,$_i) = splice @_pct,0,3 ) {
my @_s;
/perfdata:.*$_d=(\d+)\w*?;(\d+);(\d+);(\d+);(\d+)/;
push @s, [ DiskSpace,
[ 'DiskUsed', GAUGE, $1*1024**2 ],
[ 'DiskWarning', GAUGE, $2*1024**2 ],
[ 'DiskCritical', GAUGE, $3*1024**2 ],
[ 'DiskMax', GAUGE, $5*1024**2 ] ];
}
};

Велики број синтакси за разне сервисе можемо да нађемо на линку http://nagios.fm4dd.com/nagiosgraph/

Када будемо додавали хостове и сервисе nagiosgraph ће аутоматски да црта графове ако постоји одговарајућа синтакса у map фајлу. Толико за сада.