Рано или поздно, каждый системный администратор приходит к необходимости сбора статистики и информации со всех ввереных ему серверов и различных сетевых устройств, а когда количество активных сетевых устройств становится достаточным, чтобы анализ собранной информации отнимал большое количество времени, то без системы мониторинга не обойтись.
Итак, что же такое мониторинг, выдержка из википедии:
Термином мониторинг сети называют работу системы, которая выполняет постоянное наблюдение за компьютерной сетью в поисках медленных или неисправных систем и которая при обнаружении сбоев сообщает о них сетевому администратору с помощью почты, телефона или других средств оповещения.
Следовательно, ключевое слово "система", говорит нам о комплексе методов и способов мониторинга собранных воедино и предоставляющих комплексную информацию и статистику хранимую в базе данных за период времени. Систем мониторинга существует на сегодняшний день огромное количество, примерная таблица сравнения поможет выбрать вам нужную http://ru.wikipedia.org/wiki/Сравнение_систем_мониторинга_сети.
Я расскажу о двух системах мониторинга, которые успешно используются для определения проблем и сбора информации с наших серверов находящихся в дата-центрах Германии. В этой статье речь пойдет о Munin (http://munin-monitoring.org/) - самая простая на мой взгляд утилита мониторинга сети, имеет такие полезные функции как отрисовка графиков, установка порогового значения warning и critical при привышении которых отправляется сообщение системному администратору, информацию хранит в циклической базе данных, тем самым является легковестной системой мониторинга и отлично подходит для небольших проектов. Итак, что же сами разработчики пишут о Munin:
Munin is a networked resource monitoring tool that can help analyze resource trends and "what just happened to kill our performance?" problems. It is designed to be very plug and play. A default installation provides a lot of graphs with almost no work.
In Norse mythology Hugin and Munin are the ravens of the god king Odin. They flew all over Midgard for him, seeing and remembering, and later telling him.
"Munin" means "memory".
Как всегда не обошлось без мифологии :-)
В моем случае есть один сервер с запущенным сервисом munin-node который собирает информацию с остальных серверов, на которых установлен munin.
Приступим к установке и настройке, сперва нам конечно же необходимо установить сам Munin:
# dpkg -l | grep munin ii munin 1.4.5-3 network-wide graphing framework (grapher/gatherer) ii munin-common 1.4.5-3 network-wide graphing framework (common) ii munin-node 1.4.5-3 network-wide graphing framework (node)
Собственно на первоначальном этапе, этого достаточно чтобы начать пользоваться мониторингом, из коробки идет просто огромное количество плагинов готовых к работе, запускаем демон:
# /etc/init.d/munin-node start
Starting Munin-Node: done.
Графики начнут автоматически наполняться, каждые 10 минут.
Теперь приступим к настройке "под себя", конфигурационные файлы лежат в /etc/munin/:
# ls -l /etc/munin/ total 32 -rw-r--r-- 1 root root 847 Окт 5 2010 apache.conf -rw-r--r-- 1 root root 6905 Дек 20 05:52 munin.conf drwxr-xr-x 2 root root 4096 Окт 5 2010 munin-conf.d -rw-r--r-- 1 root root 1229 Дек 7 07:11 munin-node.conf drwxr-x--- 2 root munin 4096 Дек 14 11:47 plugin-conf.d #в этой директории лежит интересный файлик, #munin-node в котором можно подкорректировать директивы для работы плагинов, пользователи, порт, логи и #т.д. drwxr-xr-x 2 root root 4096 Дек 14 14:03 plugins #здесь хранятся симольные ссылки на плагины, сами же #плагины лежат в /usr/share/munin/plugins/ drwxr-xr-x 3 root root 4096 Дек 7 07:09 templates
Я приведу полный листинг файла munin.conf с необходимыми изменениями и комментариями к ним:
# Example configuration file for Munin, generated by 'make build' # The next three variables specifies where the location of the RRD # databases, the HTML output, logs and the lock/pid files. They all # must be writable by the user running munin-cron. They are all # defaulted to the values you see here. # # dbdir /var/lib/munin htmldir /var/cache/munin/www/munin #директория, где будут храниться наши графики и html файлы # logdir /var/log/munin # rundir /var/run/munin # # Where to look for the HTML templates # tmpldir /etc/munin/templates # (Exactly one) directory to include all files from. # includedir /etc/munin/munin-conf.d # Make graphs show values per minute instead of per second #graph_period minute # Graphics files are normaly generated by munin-graph, no matter if # the graphs are used or not. You can change this to # on-demand-graphing by following the instructions in # http://munin.projects.linpro.no/wiki/CgiHowto # #graph_strategy cgi # munin-cgi-graph is invoked by the web server up to very many times at the # same time. This is not optimal since it results in high CPU and memory # consumption to the degree that the system can thrash. Again the default is # 6. Most likely the optimal number for max_cgi_graph_jobs is the same as # max_graph_jobs. # #munin_cgi_graph_jobs 6 # If the automatic CGI url is wrong for your system override it here: # #cgiurl_graph /cgi-bin/munin-cgi-graph # munin-graph runs in parallel, the number of concurrent processes is # 6. If you want munin-graph to not be parallel set to 0. If set too # high it will slow down munin-graph. Some experiments are needed to # determine how many are optimal on your system. On a multi-core # system with good SCSI disks the number can probably be quite high. # #max_graph_jobs 6 # Drop somejuser@fnord.comm and anotheruser@blibb.comm an email everytime # something changes (OK -> WARNING, CRITICAL -> OK, etc) #contact.someuser.command mail -s "Munin notification" somejuser@fnord.comm #contact.anotheruser.command mail -s "Munin notification" anotheruser@blibb.comm # # For those with Nagios, the following might come in handy. In addition, # the services must be defined in the Nagios server as well. #contact.nagios.command /usr/bin/send_nsca nagios.host.comm -c /etc/nsca.conf ###Notification #contact admin #Определяем группу для уведомления о выявленных проблемах #сообщения будут отправляться автоматически при достижении любого из триггеров порогового значения warning/critical contact.admin.command mail -s "Munin notification ${var:host}" mail@gmail.com contact.admin.always_send warning critical # a simple host tree [server 1] #Имя сервера/устройства которое будет отображаться на главной странице address 127.0.0.1 #так как, это наш главный сервер, то и адрес соответственно локальный, нам же нужно мониторить и этот сервер :-) use_node_name yes #вот с этого момента, мы определяем пороговые значения триггеров, конструкция проста до безобразия <plugin_name>.<field_name>.<warning/critical> #для того чтобы понять как работает плагин, достаточно запустить команду и указать интересующий нас плагин, например: # munin-run df _dev_md1.value 20.3917160180166 #дисковое пространство раздела занято на ~20 Gb _lib_init_rw.value 0 _dev.value 0.00534102440848155 _dev_shm.value 0 _dev_md0.value 22.0106056377337 #дисковое пространство раздела занято на ~22 Gb #отсюда можно понять, какую конструкцию нам указывать для считывания триггеров df._dev_md1.warning 80 # при достижении этого значения вызывается contact.admin.command и отправляется письмо на указанный адрес с пометкой WARNING df._dev_md1.critical 95 # при достижении этого значения вызывается contact.admin.command и отправляется письмо на указанный адрес с пометкой CRITICAl #value может принимать значение 0:0, где 0: - минимальное значение, а :0 - максимальное, в случае с мониторингом uptime, мне необходимо отследить полное падение сервера, поэтому я хочу получать уведомление если аптайм сервера равен самому минимальному значению uptime.uptime.warning 0: #можно проверить сервер на доступность с помощью пинга ping_server2.packetloss.warning 0 # 0 - полезно, если необходим тотальный контроль за сетевым каналом ping_server2.ping.warning 100 # ping_server3.packetloss.warning 0 ping_server3.ping.warning 100 hddtemp_smartctl.sda.warning 40 #мониторим температуру жесткого диска hddtemp_smartctl.sdb.warning 40 postgres_xlog.segments.warning 0: #мониторим транзакцию xlog файлов, если транзакция оборвалась 0: - отправить сообщение администратору if_err_eth0.rcvd.warning 0: #появились ошибки на интерфейсе - шлем почту if_err_eth0.trans.warning 0: load.load.warning 5 #загрузка сервера превысила значение 5 - шлем почту
Здесь описано только то, что интересует меня в работе моих серверов, если есть желание, можно описать практически все плагины и получать уведомления о работе самых разных сервисов вашего сервера. Теперь, чтобы наш master-node смог забирать эти самые значения triggers с server 1, нам необходимо это разрешить, на server 1 редактируем файл /etc/munin/munin-node.conf, находим:
# A list of addresses that are allowed to connect. This must be a # regular expression, since Net::Server does not understand CIDR-style # network notation unless the perl module Net::CIDR is installed. You # may repeat the allow line as many times as you'd like #добавляем ip-адрес нашего master-node сервера allow ^127\.0\.0\.1$ #такая конструкция необходима, потому что Perl модуль не умеет CIDR, указываем с помощью регулярного выражения allow ^aaa\.bbb\.ccc\.ddd$ #Далее в этом же файле, ниже: # Which address to bind to; host * #слушаем все интерфейсы # host 127.0.0.1 # And which port #стандартный порт port 4949
Ну и не забываем открыть доступ в сетевом фильтре, теперь перезагружаем сервис munin-node на всех серверах и ждем когда начнут заполняться наши графики, по умолчанию Munin доступен по адресу http://localhost/munin
В этой статье я привел лишь минимум для мониторинга удаленных серверов, поэтому я как всегда буду рад ответить более развернуто на интересующие вопросы. В следующей статье я расскажу о мониторинге с помощью лучшей на мой взгляд системой мониторинга Zabbix.
Полезные ссылки:
http://munin-monitoring.org/
http://ru.wikipedia.org/wiki/Мониторинг_компьютерной_сети
Подскажите, возможно ли для плагина df настроить контроль объема для произвольного списка каталогов? И как, если можно.
- Войдите на сайт для отправки комментариев
- cсылка
⏏Можно, если знаете perl. На мой взгляд проще найти уже готовое решение, наверняка аналоги уже есть, например вот
- Войдите на сайт для отправки комментариев
- cсылка
⏏И вот еще
- Войдите на сайт для отправки комментариев
- cсылка
⏏