среда, 1 мая 2019 г.

Nagios+grafana

За основу можно взять статью
https://support.nagios.com/kb/article.php?id=802
Но - только взять за основу, поскольку эта статья УЖАСНА. По форме и содержанию. Главный элемент в этой доке это nagflux, который связывает метрики нагиоса и БД influxdb. Также описывается histou

Есть ряд нюансов, например если ставим в центос6 то epel там постоянно обрезают, нужно искать пакеты по архивам.
Вообще, дока крайне странная, чего стоит использование путей /usr/local/..., вместо cat >> file << EOF делается пачка echo '', неполные и нерабочие конфиги...
Также можно посмотреть эту доку
https://exchange.nagios.org/directory/Documentation/Nagios-with-InfluxDB%2C-nagflux-and-Grafana/details
Вообще, лучше использовать голову и штатные конфиги, они более полные и вменяемые.

Отдельное замечание про el/centos 6: там сказано что авторы доки не осилили установку, но у меня это много времени не заняло. Даже с учётом того, что epel активно чистится от пакетов и пришлось искать в архивах.
Краткая подготовка для 6:
cd
mkdir golang && cd golang
wget https://rpmfind.net/linux/epel/6/x86_64/Packages/g/golang-bin-1.11.5-1.el6.x86_64.rpm
wget https://rpmfind.net/linux/epel/6/x86_64/Packages/g/golang-src-1.11.5-1.el6.x86_64.rpm
wget https://rpmfind.net/linux/epel/6/x86_64/Packages/g/golang-1.11.5-1.el6.x86_64.rpm
wget https://rpmfind.net/linux/epel/6/x86_64/Packages/g/golang-src-1.11.5-1.el6.noarch.rpm
wget https://rpmfind.net/linux/centos/6.10/os/x86_64/Packages/subversion-1.6.11-15.el6_7.x86_64.rpm
wget https://rpmfind.net/linux/centos/6.10/os/x86_64/Packages/mercurial-1.4-5.el6_9.x86_64.rpm
wget https://rpmfind.net/linux/centos/6.10/os/x86_64/Packages/neon-0.29.3-3.el6_4.x86_64.rpm
wget https://rpmfind.net/linux/centos/6.10/os/x86_64/Packages/pakchois-0.4-3.2.el6.x86_64.rpm
rpm -Uvh mercurial-1.4-5.el6_9.x86_64.rpm subversion-1.6.11-15.el6_7.x86_64.rpm  neon-0.29.3-3.el6_4.x86_64.rpm pakchois-0.4-3.2.el6.x86_64.rpm
rpm -Uvh golang-*
wget https://rpmfind.net/linux/epel/6/x86_64/Packages/g/golang-github-influxdb-influxdb-client-0.9.5.1-0.1.git9eab563.el6.noarch.rpm
rpm -Uvh  golang-github-influxdb-*

Когда заполняем commands.cfg - делаем так
cat >> /etc/nagios/objects/commands.cfg << EOF

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 
     } 
EOF
Именно в этот файл, иначе не увидит строки (или в другой, но тогда обязательно подключить новый файл в конфиг, грепать конфиги на commands.cfg для примера). Смотрим на путь, если делаем нормально то он будет /bin/mv /var/log/nagios/host-perfdata ... и по аналогии вторая запись.

После этого проверяем, что метрики льются в базу
 curl -G "http://localhost:8086/query?db=nagflux&pretty=true" --data-urlencode "q=show series"
Если пусто - ещё раз проверяем пути.

Также обращаю внимание на https://github.com/Griesbacher/nagflux/blob/master/config.gcfg.example - если прописать NagiosSpoolfileFolder = "/var/spool/nagios" то nagios перестанет стартовать, так как nagflux будет зачищать постоянно эту папку, тут нужно вписывать любой другой путь типа NagiosSpoolfileFolder = "/usr/local/nagios/var/spool/nagfluxperfdata"

Можно добавить тестовый график так:
Go to Dashboards -> Home -> New
Click the small icon on the left -> Add panel -> Graph
Panel data source: nagflux
Sample query: SELECT mean("value") AS "time-value", mean("warn") AS "time-warn", mean("warn-min") AS "time-warn-min", mean("warn-max") AS "time-warn-max", mean("crit") AS "time-crit", mean("crit-min") AS "time-crit-min", mean("crit-max") AS "time-crit-max" FROM "metrics" WHERE "host" = 'localhost' AND "service" = 'HTTP' AND "command" = 'check_http' AND "performanceLabel" = 'time' AND $timeFilter GROUP BY time($interval) fill(null)
Alias by $col
(Для вставки запроса в текстовом виде вверху справа есть значок карандаша "Toggle text edit mode")

Про histou, ставится так
git clone https://github.com/Griesbacher/histou
#Copy histou.js to grafana.
cp -p histou.js /usr/share/grafana/public/dashboards/

Проверяем что можем получать данные
curl -G "http://localhost/histou/?host=localhost&service=PING"
В случае ошибки - настраиваем чтобы данные отдавались или правим /usr/share/grafana/public/dashboards/histou.js - прописываем в коде правильный путь

Потом проверяем работу так
http://GRAFANA-Server:3000/dashboard/script/histou.js?host=$HOSTNAME$&service=$SERVICEDESC$

Комментариев нет:

Отправить комментарий