Проверка Cacti логфайла
В первую очередь следует заглянуть в него. Обычно он находится по адресуSPINE: Host[...] DS[....] WARNING: SNMP timeout detected [500 ms], ignoring host '...'
Это означает вероятнее всего, что опрашиваемое вами устройство не может полностью отработать, то количество SNMP OID в SNMP запросе, которое к нему приходит. Для устранения этой ошибки следует уменьшит количество SNMP OID в запросе. Идем в Settings, Poller и уменьшаем значение The Maximum SNMP OID's Per SNMP Get Request. Следует установить значение в 1 и после того как poller начнет собирать требуемую статистику, следует его постепенно увеличить, выбрав подходящее для вашего случая значение.
Проверка функционирования вашего скрипта
Хоть это и очевидно, но всеже не стоит игнорировать - следует проверить лишний раз работу вашего скрипта, выдающего данные в командной строке. Сделать это следует обязателно с привилегиями пользователя cacti.
su - cactiuser
/full/path/to/perl your-perl-script.pl p1 p2
... (проверяем ответ)
Если вы получаете данные посредством snmp запроса, то для проверки следует использовать snmpget, в запросе укажите OID, используйте тоже значение community и укажите версию snmp, туже что вы определили в cacti. Например опрос OID of .1.3.6.1.4.blablabla, со значением community "very-secret" и версией 2 SNMP опрашиваемый хост target это будет выглядеть вот так:
snmpget -c very-secret -v 2c target .1.3.6.1.4.blablabla
.... (проверяем ответ)
Проверяем Cacti Poller
В первую очередь проверьте наличие poller.php в cron. Эта программа вызывает базовый скрипт cmd.php, или spine, альтернативный метод запросов данных, написанный на C. Установить какой поллер используется встроенный или spine можно в настройках - Settings, Poller. Если вы хотите использовать Spine, то его следует установить отдельно, в базовую установку Cacti он не входит.Теперь следует очистить лог файл /log/cacti.log (ну или переименуйте его, чтобы не было "старого мусора"). Затем измените настройки - Settings, Poller Logging Level установив значение DEBUG.
Теперь вам следует определить ID вашего запроса и ID вашего хоста. Найти требуемый вам ID запроса следует в меню Data Sources. ID хоста определяется в меню Devices.
Теперь следует запустить наш poller вручную и только для выбранного нами запроса данных. Делается это следующим образом -
php -q cmd.php id id
если вы используете Spine, то запустить такую проверку в режиме логгирования на уровне Debug можно вот так:
./spine --verbosity=5 id id
В обоих случаях мы увидим ответ в STDOUT. Данную процедуру можно повторять не дожидаясь установленного в Cacti временного интервала. Кроме того это очень удобно - вам не надо искать ошибку в сотнях записей лога, когда у вас уже очень большое количество данных мониторится в Cacti.
Проверка состояние MySQL
В большинстве своем данная проверка является излишней, и ее можно на первом этапе дабага проблемы просто опустить, но в случае если все далее описанные шаги, показывают что все работает правильно, то следует ее всеже сделать.В дебаг логе, найдите запрос MySQL update соответствующий исследуемому хосту. Там будет SQL запрос который следует выполнить непосредственно на сервере mysql либо через терминал, либо средствами phpmyadmin. Проверьте что запрос сервером mysql выполняется корректно.
Проверка обновления RRD файла
Проверьте лог файл, в нем должны быть примерно такие строки:rrdtool update filename --template ...
Для каждого RRD файла должна быть одна строка в логе.
RRD файлы должны создаваться изначально самим поллером. Если он их не создал то соответственно не пойдет и их обновление. Если их нет, проверьте Poller Cache в меню Utilities и проверьте там запрос к файлу.
Проверка владельца RRD файлов
Если rrd файлы были созданы с правами root-а, а поллер запущен в системи с привилегиями cactiuser , то естественно поллер не сможет обновить данные в RRD файле.cd /var/www/html/cacti/rra
ls -l localhost*
-rw-r--r-- 1 root root 463824 May 31 12:40 localhost_load_1min_5.rrd
-rw-r--r-- 1 cactiuser cactiuser 155584 Jun 1 17:10 localhost_mem_buffers_3.rrd
-rw-r--r-- 1 cactiuser cactiuser 155584 Jun 1 17:10 localhost_mem_swap_4.rrd
-rw-r--r-- 1 cactiuser cactiuser 155584 Jun 1 17:10 localhost_proc_7.rrd
-rw-r--r-- 1 cactiuser cactiuser 155584 Jun 1 17:10 localhost_users_6.rrd
Выполните следующую команду для решения такой проблемы, если она у вас присутствует:
chown cactiuser:cactiuser *.rrd
Проверка пределов в RRD файле
Возможно причиной ваших проблем являются некорректно установленные пределы MAXIMUM и MINIMUM в RRD файле данных. Выполните следующее:rrdtool fetch rrd_file AVERAGE
просмотрите 10-20 строк и если вы там видите NaN, то:
rrdtool info rrd_file
нас интересуют значения ds[loss].min ds[loss].max (loss - это частный пример - у вас будет имя ваших данных) и в результате вы увидите например такую картину:
ds[loss].min = 0.0000000000e+00
ds[loss].max = 1.0000000000e+02
В данном примере мы имеем MINIMUM = 0 и MAXIMUM = 100. Теперь следует сравнить значение ds.[…].type=ВЕЛИЧИНА, то есть мы убеждаемся что полученная нами ВЕЛИЧИНА находится в установленных значениях максимума и минимума.
Если значение не укладывается в установленные пределы , то недостаточно изменить пределы в Data Template, следует выполнить :
rrdtool tune rrd_file --maximum ds-name:new_ds_maximum>
где ds_name имя для данных определенное внутри RRD файла, а new_ds_maximum - новое значение максимума для данных. (Изменение минимума делается аналогично).
На этом шаге следует также проверить значения step и heartbeat интересующего нас RRD файла.
Проверка связи RRD файла и графика
Наконец следует проверить те ли хранилища данных использует график, который мы пытаемся получить. Идем в Graph Management и выбираем наш график. В данном режиме выбираем Turn On Graph Debug Mode и в появивишемся окне RRDTool Command: видим к каким RRD файлам обращается наш график (на это указывает выражение DEF).
Разное
До версии 0.8.6j, poller_output мог "вылезти за грани разума" ).Эо обычно происходило из-за параметров настройки памяти в php.ini в значение 8 МБ. Измените данное значение по крайней мере на 64 MB.
Чтобы проверить это, выполните sql запрос через mysql cli (или phpmyadmin)
select count(*) from poller_output;
Для устранения проблемы выполните:
truncate table poller_output;
Данная проблема решена, начиная с версии 0.8.7
Установка через RPM
Некоторые RPM инсталяции некорректно встраивают поллер в cron - в результате поллер присутствует в cron в двух таблицах. Необходимо сделать проверку /etc/crontab и таблицы cron пользователя cactiuser (ну или как вы там у себя его назвали) и настроить cron так чтобы вызов шол однократно.Не Nan , но значение 0
Во первых, внимательно пишите свои скрипты. Если в ы в скрипте используете внешние команды, то не надо надеятся на переменную $PATH. Указывайте нормальный, полный путьдо команды /full/path/to/external/commandВо вторых, следите чтобы скрипт выполнялся быстро. Если в логах cacti вы видите “U”, это значит что Cacti устал ждать выполнения скрипта , и в результате вы словите NaN. Скрипт должен выполняться быстро! Но это уже ваша забота по его оптимизации.
Удачи вам в ваших графопостроениях c Cacti!
З.Ы. Данную статью когдато писал для Хабра, но так как аккаунт там ушел в вечный бан, по просьбам нормальных людей статью восстановил.
Комментариев нет:
Отправить комментарий