Поиск по этому блогу

Записки на память

Cacti не рисует графики - что делать?


Очень часто, когда мы начинаем писать свои скрипты получения данных, нас начинает преследовать так называемая проблема NaN - график не отображает данные. Когда я делал первые свои графики это просто ужас как бесило и заставляло меня ругать Cacti. Тратил кучу времени на то что вновь и вновь заново создавал источники данных, переписывал скрипт, искал чорт знает что вобщем. Потом, всеже успокоившись, решил перейти к методическому убийству данной проблемы. В результате набрел на хороший англоязычный ман по лечению данной проблемы и вольно перевел его для себя и глядишь тем пригодится кто только отправляется в битву за графики с Cacti. Итак пошаговое руководство в борьбе с NaN в Cacti.

Проверка Cacti логфайла
В первую очередь следует заглянуть в него. Обычно он находится по адресу /log/cacti.log. В противном случае необходимо заглянуть в настройки - Settings, Paths. В случае если в данном лог файле будет встречаться

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. Скрипт должен выполняться быстро! Но это уже ваша забота по его оптимизации.

Статья не моя, но когда настраивал cacti очень помогла в работе над ошибками.
Автор: Uncle_Sam

Оригинал статьи находится по адресу http://www.unsam.ru/2011/01/cacti.html


WinSCP и копирование больших больших файлов

Понадобилось как-то скопировать с удаленного сервера порядка 30-40Гбайт информации из под FreeBSD на отдельный, специально купленный для этих целей внещний жесткий диск с файловой системой NTFS. Во   FreeBSD есть средства позволяющие примонтировать раздел    NTFS, но там с ними заморочки какие-то.  Решил слить ее через WinSCP , но оказалось, что скорость не поднимается выше 2 Мб, хотя канал способен на большее. 

Скачать ее можно здесь

 P.S. Основные возможности программы:

  • Графический интерфейс в стиле Norton Commander и как в проводнике Windows Explorer(на выбор);
  • Все основные файловые операции — копирование, удаление и т.д.;
  • Автоматизация при помощи скриптов и интерфейса командной строки;
  • Интеграция с Pagent (PuTTY Agent) с поддержкой авторизации по открытым ключам;
  • Интеграция с Windows (поддержка Drag&Drop, ярлыков, поддержка схем URL);
  • Работа с ключами и версиями протокола SSH;
  • Встроенный текстовый редактор;
  • Поддержка различных типов авторизации: по паролю, аутентификации с открытым ключом, Kerberos;
  • Возможность сохранять настройки соединений;
  • Синхронизация папок по нескольким автоматическим и полуавтоматическим алгоритмам;
  • Возможность работы с использованием файла конфигурации вместо хранения настроек в реестре, что удобно при запуске с переносных носителей;
  • Поддержка протоколов SFTP и SCP поверх SSH-1 и SSH-2, а так-же FTP;
  • Также есть поддержка русского языка. 


Cisco 3740 ограничить скорость

Для того что бы зарезать скорость на интерфейсе определенному IP-адресу не трогая другие.
Для начала создается access-list такого содержания

access-list 140 permit ip host 192.168.0.129 any
access-list 140 permit ip any host 192.168.0.129


Затем заходим на нужный интерфейс

conf t
interface FastEthernet0/1


И добавляем туда строки такого содержания
rate-limit input access-group 140 512000 128000 256000 conform-action transmit exceed-action drop

rate-limit output access-group 140 512000 128000 256000 conform-action transmit exceed-action drop


Где "512000 128000 256000" - это максимальная минимальная и средняя, указывается в килобитах.

Если нужно зарезать скорость нескольким адресам или целой подсети то создается список такого содержания
access-list 120 permit ip 192.168.100.0 0.0.0.255 any
access-list 120 permit ip any 192.168.100.0 0.0.0.255


0.0.0.255 - обратная маска

Ну а дальше тоже самое



Cisco Nat Vlan


У меня есть циска 3640, понадобилось поднять на ней NAT, ничего сложного в этом нет. На интерфейсе смотрящим на ружу пишется ip nat outsude, а на интерфейсе смотрящим в локальную сеть ip nat insude

Создается список доступа с адресами которые должны работать под натом
access-list 20 permit 192.168.100.0 0.0.0.255
access-list 20 permit 192.168.111.0 0.0.0.255



Добавляется такая команда
ip nat inside source list 20 interface Ethernet0/0 overload

Ethernet0/0 - интерфейс смотрящий в инет

При добавлении Vlan на интерфейсе, который должен быть в NATе необходимо на каждом добавлять строчку ip nat insude




Управление трафиком на core-циске

Для отработы приоритета используется вес.

Основные команды для конфигурации:
conf t
router bgp 42***
! для установки весов, наприер, делаем на ТТК приоритет:
neighbor 91.195.*.* weight 500
neighbor 217.150.*.* weight 400
! убираем веса:
no neighbor 91.195.*.* weight 500
no neighbor 217.150.*.* weight 400
exit


name-gw#sh ip bgp summ
BGP router identifier 217.150.*.*, local AS number 42***
BGP table version is 32537981, main routing table version 32537981
289232 network entries using 33840144 bytes of memory
577438 path entries using 30026776 bytes of memory
102070/50351 BGP path/bestpath attribute entries using 12656680 bytes of memory
92444 BGP AS-PATH entries using 2561850 bytes of memory
87 BGP community entries using 2184 bytes of memory
0 BGP route-map cache entries using 0 bytes of memory
0 BGP filter-list cache entries using 0 bytes of memory
BGP using 79087634 total bytes of memory
BGP activity 1587151/1297919 prefixes, 10209472/9632034 paths, scan interval 60 secs

Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
91.195.*.* 4 43727 8704245 146483 32537969 0 0 00:05:03 288758
217.150.*.* 4 20485 13285770 160854 32537969 3 0 00:02:58 288679


после изменения настроек bgp очищаем таблицу адресации
clear ip bgp 91.195.126.*.*
clear ip bgp 217.150.61.*.*



Создать dump раздела

Если нужно сделать dump одного из разделов, архивнуть его и положить на удаленный сервер, то можно сделать вот так
dump -0auL -f - /dev/da0s1c | bzip2 | ssh юзер@192.168.0.100(ip сервера куда бросать) -p 22 dd of=/root/vd-backup.dump




Очистить лог файл большого размера

Заходим в директорию с лог файлом и пишем:
cat /dev/null > имя_файла