Модная штучка

Переносим Cacti и Nagios на другой сервер

Март 16, 2012 | ITшное, Администрирование | Модные словечки , , , , | Оставить свое мнение

Приветствую всех читателей моего уютного бложика!

Решил я на днях отделить систему мониторинга от обычных рядовых серверов и взял под эти нужды простенький впс на базе VDSManager. И стал я все настраивать да переносить, никаких сложностей не возникало, да вот только после того как все подготовительные работы были выполнены, оказалось что графики почему то не рисуются. При чем rrd файлы были на месте, но через веб интерфейс ответ rrdtool был пустым. Я пробовал выполнить от себя команду которая в дебаг режиме пишется в самом какти и в ответ получал либо

No match

либо

Bad system call

Все попытки справиться с этим у меня не увенчались успехом и в итоге я решил что я нифига не понимаю в фрибсд и передал работу разобраться с этой проблемой сторонним админам за деньги.

Несколько дней ожидания и админы дали свой вердикт — судя по всему vdsmanager накладывает какие то свои ограничения на ОС, что не позволяет правильно работать rrdtool которая должна рисовать графики.

Впринципе, для меня это было ожидаемо. Взял я себе тогда другой вдс уже покруче, на базе KVM, правда и стоит он в три раза дороже, но что ж, и тянуть должен бы больше, может еще что навешу на него.

Сразу скажу что на этом сервере все ишло без таких неожиданностей, все становилось сразу, если не считать того что я иногда тупил.

Так вот, исходя из этого опыта несколько советов как правильно переехать на новое место обитания мониторинга.

После того как на новом сервере настроены всякие веб сервера, пхп, мускули и т.п., то есть проделана вся работа как и для установки нового кактуса, делаем следующее:

  1. На старом сервере пакуем всю папку /usr/local/www/cacti и делаем дамп базы cacti
  2. Делаем дампы rrd файлов (как это сделать немного ниже)
  3. Скидываем надампеное на новый сервер
  4. На новом сервере копируем с заменой файлы config.php и все файлы из scripts/ без замены файлов, то есть добавляем то,  чего не хватает на новом.
  5. Восстанавливаем из дампов rrd файлы
  6. Ставим скрипт кактуса в крон как и при сетапе нового сервера.

Как сделать бекап и восстановление.

Вообще говоря есть стандартная функциональность rrdtool делать dump & restore. Почему мне этого было мало? — файлов несколько десятков, а запускать команду нужно на каждый файл отдельно, это просто издевательство так делать.

Выход прост — нагуглил уже готовый скрипт для масового переноса —  вот на этом форуме (второй пост)

Для надежности продублирую скрипт еще тут

 

#!/bin/bash

set_dump_values () {
        src_ftype="rrd"
        dest_ftype="xml"
}

set_restore_values () {
        src_ftype="xml"
        dest_ftype="rrd"
}

set_search_path () {
        search_path=$1
        log_path="${search_path}/rra_batch.log"
}

print_usage () {
        echo "Usage: $0 [COMMAND] [-c | -d [PATH]]"
        echo " "
        echo "Summary:"
        echo "Does either an rrdtool dump or an rrdtool restore of all files in the search directory."
        echo "This script will not look for .rrd files or .xml files to use outside of the specified search directory, but will recursively search throught the specified directory."
        echo " "
        echo "Commands:"
        echo "dump     Dumps files with .rrd in the file name to an XML file."
        echo "dump-nh  Dumps files with .rrd in the file name to an XML file."
        echo "         This command puts no headers in the output XML for compatibility with rrdtools 1.2.x."
        echo "restore  Restores files with .xml in the file name to an RRD file."
        echo " "
        echo "Options:"
        echo "-c  Search current working directory."
        echo "-d  Specify search directory."
        exit 0
}

log () {
        echo "[`date +%Y%m%d%H%M%S`] $1" >> ${log_path}
}

rrdtool_command () {
        case $1 in
                dump)
                        log "Dumping \"$name\" to ${new_name}.${dest_ftype}"
                        rrdtool $1 "$name" > "${new_name}.${dest_ftype}"
                        ;;
                dump-nh)
                        log "Dumping with no header \"$name\" to ${new_name}.${dest_ftype}"
                        rrdtool dump "$name" --no-header > "${new_name}.${dest_ftype}"
                        ;;
                restore)
                        log "Restoring \"$name\" to ${new_name}.${dest_ftype}"
                        rrdtool $1 "$name" "${new_name}.${dest_ftype}"
                        ;;
                *)
                        log "Illegal command: ${1}"
                        exit 1
                        ;;
        esac
}

case $1 in
        dump)
                set_dump_values
                ;;
        dump-nh)
                set_dump_values
                ;;
        restore)
                set_restore_values
                ;;
        *)
                print_usage $0
                ;;
esac

case $2 in
        -d)
                set_search_path $3
                ;;
        -c)
                set_search_path `pwd`
                ;;
        *)
                print_usage $0
                ;;
esac

echo "Logging output to $log_path..."
log "Search path set to \"$search_path\"."

for name in $(find $search_path -type f -print | grep [.]${src_ftype})
do
        if [ $name != "." ] ; then
                new_name=""
                OIFS=$IFS
                IFS='.'
                for name_element in $name
                do
                        if [ $name_element != $src_ftype ] ; then
                                if [ -z $new_name ] ; then
                                        new_name=$name_element
                                else
                                        new_name="${new_name}.${name_element}"
                                fi
                        fi
                done
                IFS=$OIFS
                if [ -n $name ] ; then
                        rrdtool_command $1
                fi
        fi
done

log "Finished batch."
echo "Done."
exit 0

Пользоваться им очень просто. Сохраняем скрипт где угодно, пусть это будет ~/rrdmove.sh

После этого на старом сервере:

bash ~/rrdmove.sh dump -d /usr/local/www/cacti/rra/
# создаем архив с дампами
tar -czf ~/rrd.tar.gz /usr/local/www/cacti/rra/*.xml
# кидаем файл на новый сервер
scp ~/rrd.tar.gz user@server:~/

После чего на новом сервер надо закинуть этот же скрипт куда либо, я для примера возьму тот же самый файл ~/rrdmove.sh и делаем следующее:

cd /usr/local/www/cacti/rra/
# распаковываем дампы
tar -xzf ~/rrd.tar.gz
# запускаем скрипт восстановления
bash ~/rrdmove.sh restore -d /usr/local/www/cacti/rra/
# удаляем дампы, они больше не нужны
rm /usr/local/www/cacti/rra/*.xml

Кто то может спросить — почему бы просто не скопировать rrd файлы и не дрочить мозг? — И я отвечу, что именно такой способ у меня возник первым. Но, как оказалось, rrd файлы платформо-зависимы, что означает что не всякие rrd файлы подойдут для новой системы. Отсюда и необходимость в их дампе/ресторе.

Касательно Nagios — там все просто — нужно скопировать и перенести папку /usr/local/etc/nagios/

Только не трогать /usr/local/www/nagios, во всяком случае cgi скрипты там, потому что они тоже платформо-зависимы и я потратил пару часов на то, что бы определить, почему бляха cgi скрипты не работают. Там только конфиг файл стоит перенести со старого, да и то, лучше его поправить заново ручками, а то может на новом сервере нагиос другой версии и там файл немного отличается.

Позже еще будет пост о настройке nagios, а то сразу я его поставил и он стоял без дела фактически  =)

Если cacti перестал рисовать графики..?

Январь 5, 2012 | ITшное, Администрирование | Модные словечки , , | Оставить свое мнение

Недавно, настраивая отображение графиков по своей статистике случилось странное: только что добавленный график начал рисоваться, но как я заметил уже позже, все остальные перестали проявлять какую либо активность =)

По логам кактуса он  обрабатывал только этот новый график, а остальных как будто не было. Я сначала удалил новый график на всякий случай, но ситуация не изменилась, к тому же в логах фигурировала фраза

NOTE: There are no items in your poller for this polling cycle!

То бышь сервер кактуса как бы и не видел других заданий. В общем то решение было простое. Нужно было зайти в console -> system utilities -> View Poller Cache. Там я увидел пустую табличку. После чего клацнул на Rebuild Poller Cache на предыдущей странице и это решило проблемму.

Спустя 10 минут графики стали возвращаться на свои позиции, оставив дыру без данных =)

Выводим в cacti статистику со своего скрипта

Январь 5, 2012 | ITшное, Администрирование | Модные словечки , , , , | Оставить свое мнение

Статистика по стандартным серверным штукам это хорошо, но хочется видеть еще и наглядные графики по сайтам, например прибыль или что там у кого.

Для этого сначала пишем на сайте скрипт типа stat_cacti.php который будет выводить ответ формата

count:XXX

В моем случае скрипт принимал еще параметры с (параметр, характеризующий какого рода статистику выдавать) и i (интервал, за какое время выдавать стату).

Скрипт готов, настраиваем кактус.

Сначала добавляем data input method -> add и приводим его примерно к следующему виду:

В input string  у меня следующее:

/usr/local/bin/wget --tries=1 --inet4-only --connect-timeout=3 --dns-timeout=3 --timeout=3 --quiet --no-check-certificate -O - "<url>?c=<command>&i=<interval>"

Суть такова — скрипт выполняет запрос на удаленный сервер, который будет позже задан в конфиге <url> и читает результат.

Далее добавляем data template и приводим примерно к следующему виду:

Добавляем graph template.

(эту часть вы увидете после того как нажмете добавить, заполнив то что на картинке ниже) 

 Теперь, если вы все правильно сделали, все готово для добавления графика. Ждя этого жмакаем кнопку new graphs и в скиске выбираем то, что вы вписывали в название graph template. После нажатия на кнопку добавить, кактус должен бы вас спросить написать адрес откуда брать стату, название создаваемого графика и еще вроде что то. Если каких то полей он не спросил, а должен, проверяйте в созданных шаблонах (template), что бы на нужных полях стояла галочка user per-data value.

После этого все, следите что там рисует кактус, у меня спустя минут 10 уже были видны первые штрихи. Правда меня ожидала еще и неожиданность, о ней в следующем посте =)

Дружим cacti с apache

Январь 3, 2012 | ITшное, Администрирование | Модные словечки , , , | Оставить свое мнение

Для начала, на мониторимом сервере нужно включить отображение статистики server-status & server-info.

У меня, к примеру, не было модуля mod_info, поэтому нужно было пересобрать apache с этим модулем.

Далается это в соответстветствии с инструкцией здесь http://help.directadmin.com/item.php?id=191

Единственное замечание к той инстукции: не всегда нужно добавлять именно —with-module, иногда запись может отличаться. Я перепробовал разнообразные варианты типа with-mod_info, with-info_module, но ничего не работало. В итоге я нарыл соответствия параметров конфига строки и модулей:  http://httpd.apache.org/docs/2.2/programs/configure.html

Оказалось, нужно было добавлять: —enable-info.

Update: сначала сделал все так как описал ниже, но потом обнаружил более новую версию здесь и здесь (по второй ссылке это типа оффициальная страница). Удалил старые дата темплейты и поставил вместо них эти, работает тоже ок, только читайте внимательно инструкции по установке там на форуме.

После того, как действие выполнено, следуем по интрукции http://www.lissyara.su/articles/freebsd/www/apachestats/

Далее все прошло в целом гладко, пришлось только немного допилить скрипт для парсинга статуса. Он мог работать нормально только на локальном хосте. Если же требовалось собирать статистику с удаленного сервера то в нем явно была ошибка. Может быть конечно где то и есть новая версия, у меня скрипт 2004 года, так что внес в него свежие правки =) Можете скачать его.

P.S. мне потребовалось доставить в perl модуль Switch, так как скрипт вылетал с ошибкой

Switch will be removed from the Perl core distribution in the next major release бла бла бла

Ставится точно так же как и в посте http://toha.su/post/график-загрузки-nginx-для-cacti/. Только в CPAN нужно ввести

install Switch

(регистр имеет значение!)

Cacti, centos, snmp и какие проблеммы могут возникнуть.

Январь 3, 2012 | ITшное, Администрирование | Модные словечки , , , , , , | Оставить свое мнение

Недавно я подумал, почему бы не добавить в мониторинг и третий сервер из комплекса, с которым я работаю в мониторинг. Раньше я о нем как то замалчивал, потому что он крутится на centos + панелька директадмин и используется для всяких треш скриптов которые я вообще не  в силах контролировать и приводить в порядок. Раньше этот сервер был основным и там крутилось все, но постепенно я хочу оставить там только то, что не является особо критичным. А все важное вынести на кластер из двух серверов на freebsd.

Так вот, впринципе здесь было бы нечего описывать даже, так как процедура по сути та же что и для добавления удаленного сервера на freebsd. Но особенности таки есть.

В целом это только фаервол, который к примеру у меня (возможно это панель directadmin ставит свои дефолтные конфиги iptables), доступы к «левым» портам, в том числе и  161 (по умолчанию для snmp) были закрыты.

Как открыть нужные порты я нашел здесь http://shalb.com/ru/spae/spaedocs/firewallrules/. Но по результатам скажу что описанные там правила будут работать не для всех. Дело в том, что у меня в конце цепочки INPUT было правило, запрещающее доступ ко всем портам которые не попали под правила выше. И если делать так как там, то правила добавлялись в конце и никогда не срабатывали. Свои правила пишу здесь:

iptables -I INPUT --proto tcp --dport 161 -s 1.2.3.4 -j ACCEPT
iptables -I INPUT --proto udp --dport 161 -s 1.2.3.4 -j ACCEPT

Где вместо 1.2.3.4 вы пишите адрес сервера, на котором стоит cacti. Моя правка заключается в том, что я использую -I вместо -A — то есть вставку вместо добавления. Если после слова INPUT не указать номер, то по-умолчанию добавляется в начало и таким образом правило обрабатывается правильно.

После добавления правил не забудьте сделать

service iptables save

Иначе изменения пропадут при перезапуске.

P.S. еще, пока сразу не понял в чем дело, узнал у слона, что при подключении к кактусу сервера на впс centos может возникнуть проблемма в том, что по udp snmp не рабтает. В этом случае нужно попробовать подключить по tcp.

Как это сделано неплохо описано здесь: http://forums.cacti.net/viewtopic.php?t=15353

Краткое содержание:

на подключаемом сервере в snmpd.conf добавить:

agentaddress tcp:161

А в кактусе при добавлении хоста указать не просто IP, а запись вида tcp:IP (пример: tcp:1.2.3.4)

Так же оттуда полезно почерпнуть инфу о том, как сделать возможность мониторить диски по snmp, так как если не добавить этого в конфиг то  в кактусе не будет видно никаких дисков.

Upd: недавно почему то сбились настройки фаервола, делал по своей же инструкции  и обнаружил что парсер вордпресса сьел двойной минус и заменил его тыре. Исправил эту ошибку.

P.P.S. Не забывайте перезапускать (service snmpd restart) после внесения правок в snmpd.conf

P.P.P.S. С Новым Годом всех =)