Расчет затрат на разработку проекта
Затраты на разработку проекта складываются из:
· затрат на заработную плату;
· затрат на амортизацию оборудования и программных продуктов;
· затрат на оплату электроэнергии;
· накладных расходов.
Расходы на заработную плату.
При расчете затрат на заработную плату учитываем, что данный проект разрабатывал один человек: системный инженер.
Среднерыночная заработная плата системного инженера требуемого уровня по региону составляет 30000 руб. [53]
Рассчитаем стоимость 1 часа работы инженера, опираясь на следующие данные:
· премия 25%;
· районный коэффициент 15%;
· фонд рабочего времени в 2010 году, в соответствии с производственным календарем, составляет 1988 час;
Таким образом, расценка с учетом районного коэффициента составит:
РЧ = 30000*1,25*1,15*12/1988 = 260 руб
В расчете затрат на заработную плату учитываются отчисления, выплачиваемые с начисленной заработной платы, то есть общая величина тарифа страховых взносов будет равна максимальной ставке ЕСН - 26%, в том числе:
· ПФР - 20%;
· ФССР - 2,9%
· ФФОМС - 1,1%;
· ГФОМС - 2%;
· Обязательное социальное страхование от несчастных случаев - 0,2%.
В сумме отчисления составят:
СО = РЧ * 0,262 = 260 * 0,262 = 68 руб
С учетом времени работы инженера (112 часов на разработку и 56 часов на внедрение), рассчитаем расходы на заработную плату:
ЗП = (112 + 56) * (РЧ + СО) = 168 * 328 = 55104 руб
|
|
Расходы на амортизацию оборудования и программных продуктов.
В качестве основного оборудования на этапе разработки проекта сети использовались персональный компьютер и сервер AQUARIUS SERVER T40 S41. Стоимость компьютера на данный момент составляет примерно 17000 руб, тогда как сервера 30000 руб [54].
Таким образом стоимость разовых вложений в аппаратуру составит:
РВА = 47000 руб
В течение срока эксплуатации компьютера и сервера допускается их модернизация, данный вид затрат также учитывается при расчете. Закладываем 50% от РВ на модернизацию:
РМА = РВ * 0,5 = 23500 руб
Компьютер использовался на следующих этапах:
· поиск литературы;
· поиск решений проектирования системы сетевого мониторинга;
· разработка структур и подсистем;
· проектирование системы сетевого мониторинга;
· оформление документа.
Сервер использовался во время внедрения системы и непосредственной работы с системой.
Используемые в разработке программные продукты получены по свободным лицензиям, что говорит о нулевой их стоимости и отсутствии необходимости их амортизации.
Таким образом общие затраты на аппаратуру с учетом амортизации составят:
ОЗА = РВА + РМА = 47000 + 23500 = 70500 руб
|
|
Срок полезного использования принимаем 2 года. Стоимость одного часа работы составляет (приняв число рабочих дней в месяце 22 и при 8-часовом рабочем дне):
СОЧР = ОЗА / ВР = 70500 / 4224 = 16,69 руб
На время разработки и внедрения стоимость амортизационных отчислений соответственно составит:
САЧРВ = СОЧР * ТРВ = 16,69 * 168 = 2803,92 руб
Расходы на электроэнергию.
Расходы на электроэнергию складываются из потребляемой компьютером и затрачиваемой на освещение. Стоимость электроэнергии:
СЭН = 0,80 руб/кВт * ч (По договору с собственником помещения)
Рк,с = 200 Вт - мощность, потребляемая компьютером или сервером.
Трк = 168 ч - время работы компьютера на этапе разработки и внедрения системы.
Трс = 52 ч - время работы сервера на этапе разработки и внедрения системы.
Таким образом стоимость электроэнергии на этапе разработки и внедрения проекта составит:
СЭНП = Рк * Трк * СЭН + Рк * Трс * СЭН = (200 * 168 * 0,80 + 200 * 52 * 0,80) / 1000 = (26880 + 8320) / 1000 = 35,2 руб
Рабочее место, на котором производилась данная работа, оснащено светильником мощностью 100 Вт. Рассчитаем стоимость электроэнергии, затраченной осветительным прибором на время разработки и внедрения системы:
|
|
СЭНО = 100 * Трк * СЭН = (100 * 168 * 0,80) / 1000 = 13,44 руб
Общие затраты на электроэнергию составили:
ОЗЭН = СЭНП + СЭНО = 35,2 + 13,44 = 48,64 руб
Расчет накладных расходов
Данный пункт затрат охватывает затраты на прочее оборудование и расходные материалы, также непредвиденные расходы.
Накладные расходы в бюджете предприятия составляют 400% от начисленной заработной платы:
НР = ЗП * 4 = 55104 * 4 = 220416 руб.
Таким образом затраты на разработку и внедрение проекта составили:
СРВ = ЗП + САЧРВ + ОЗЭН + НР = 55104 + 2803,92 + 48,64 + 220416 = 278372,56 руб
Эффективность
В результате выполнения экономических расчетов была назначена минимальная цена разработки и внедрения системы сетевого мониторинга 278372,56 руб.
Как видно из расчетов, подавляющая часть стоимости расходов приходится на материалы и оборудование. Это объясняется тем, что производители основного оборудования это зарубежные компании и соответственно цены на данную продукцию приводятся в американских долларах по курсу ЦБРФ + 3%. А повышение таможенных пошлин на ввозимую продукцию также негативно сказывается на цене для конечных заказчиков.
Для обоснования самостоятельной разработки системы сравним ее стоимость с готовыми решениями, присутствующими на рынке [55]:
|
|
· D-Link D-View - 360 000 руб
· HP OpenView - 750 000 руб
Учитывая, что эти решения также требуют наличие опытного системного инженера, выделенного сервера и компьютера, то получаем экономию только за счет сокращения времени на разработку системы, то есть для расчета стоимости внедрения коммерческой системы, необходимо из полученной минимальной цены разработки и внедрения системы вычесть затраты на заработную плату и электричество в процессе разработки системы:
СВКС = СЛ + МЦРВС - ВР * (РЧ + СО) - СЭНР - СЭНОР = 360 000 + 278372,56 - 112 * 328 - 26,88 - 9,44 = 670032,24 руб.
Как видно из расчета, стоимость внедрения самой недорогостоящей коммерческой системы сетевого мониторинга стоит почти в два раза дороже, чем разработка и внедрение собственной системы.
В заключение подсчитаем потенциальную экономию от внедрения системы. Как было сказано в обосновании необходимости внедрения системы, она позволяет предсказывать перегрузки сети и планировать модернизацию её отдельных участков до того, как произойдет сбой в работе оборудования и поступят первые жалобы от клиентов, что повлечет за собой необходимость перерасчетов и возврата части вложенных средств на счета абонентов.
Расчет будем производить на основе статистических данных, собранных с биллинговой системы учета и регистрации платежей и подключений, используемой внутри предприятия, с расчетом на один год работы системы. Имеем следующие данные:
Сеть работает в 15 районах города Верхняя Пышма, поделена на 15 независимых сегментов, которые обслуживаются 15 центральными маршрутизаторами.
Среднестатистический месячный платеж одного пользователя 700 руб, из чего получаем стоимость 1 дня простоя сети 700 / 30 = 23 руб.
В каждом районе в среднем по 20 домов, в каждом доме усреднено 50 абонентов, имеем общее число абонентов в районе 1000.
При неожиданном отказе оборудования получаем произойдет следующая ситуация - часть абонентов (как правило 75% от общего числа в районе) не сможет получит заказанные услуги в течение времени, пока будет заказано новое оборудование, настроено и установлено. Как правило это время составляет от 1 до 2 недель. То есть эти пользователи потребуют возврата денег за неполученные услуги. Происходит такая ситуация как правило 3 раза в год, проведем расчет недополученной выручки при данных условиях:
НВ = 23 * 1000 * 0,75 * 14 * 3 = 724500 руб.
Таким образом, разработанная и внедренная система полностью окупается менее, чем за год, что говорит об экономической целесообразности её разработки.
ЗАКЛЮЧЕНИЕ
В результате проделанной работы была разработана и внедрена система мониторинга, позволяющая проводить слежение как за коммутаторами, маршрутизаторами разных производителей, так и серверов различных платформ. Полностью выполнено требование ориентирования на использование открытых протоколов и систем, с максимальным использованием готовых наработок из фонда свободного программного обеспечения.
Система удовлетворяет всем требованиям уточненного технического задания:
§ минимальные требования к аппаратным ресурсам;
§ открытые исходные коды всех составляющих комплекса;
§ расширяемость и масштабируемость системы;
§ стандартные средства предоставления диагностической информации;
§ наличие подробной документации на все используемые программные продукты;
§ способность работать с оборудованием различных производителей (Полный список оборудования приведен в Приложении В)
В будущем с увеличением объемов работ планируется приобретения более производительного аппаратного обеспечения, а также перевод хранилища информации ядра системы и модуля сбора системных журналов из файлового в SQL базу данных.
В дипломном проекте будут добавлены разделы экономической эффективности предлагаемого решения и безопасности жизнедеятельности.
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Бойченко Е.В. Кальфа В. Овчинников В.В. Локальные вычислительные сети / Бойченко Е.В. Кальфа В. Овчинников В.В. - М.: Радио и связь 2000. - 500 с.
. Бройдо В. Л. Вычислительные системы, сети и телекоммуникации: Учебник для вузов / В.Л. Бройдо. - Спб.: Питер, 2003. - 688 с.
. Гусева А.И. Работа в локальных сетях: Учебник / А. И. Гусева. - М.: Диалог - МИФИ, 2001. - 344 с.
. Камалян А.К., Кулев С.А., Назаренко К.Н. и др. Компьютерные сети и средства защиты информации: Учебное пособие /Камалян А.К., Кулев С.А., Назаренко К.Н. и др. - Воронеж: ВГАУ, 2003.-119с.
. Курносов А.П. Практикум по информатике/Под ред. Курносова А.П. Воронеж: ВГАУ, 2001.- 173 с.
. Малышев Р.А. Локальные вычислительные сети: Учебное пособие/ РГАТА. - Рыбинск, 2005. - 83 с.
. Новиков Ю. В. Локальные сети: архитектура, алгоритмы, проектирование. / Ю. В. Новиков. - М.: ЭКОМ, 2000. - 312 с.
. Новиков Ю. В. Основы локальных сетей / Ю. В. Новиков. - М.: ЭКОМ, 2005. - 360 с.
. Олифер В.Г, Олифер Н.А. Сетевые операционные системы/ В.Г. Олифер, Н.А. Олифер. - СПб.: Питер, 2002. - 544 с.: ил.
. Олифер В.Г., Олифер Н.А. Компьютерные сети. Принципы, технологии, протоколы /В.Г. Олифер, Н.А. Олифер. - СПб.: Питер, 2002. - 672 с.
. Флинт Д. Локальные сети ПК: принципы построения, реализация / Д. Флинт. - М.: Финансы и статистика, 2001. - 359 с.
. Фридман А.Л. Основы объектно-ориентированной разработки программных систем. / А. Л. Фридман. - М.: Финансы и статистика, 2000. - 192 с.
. Шафрин Ю.А. Основы компьютерной технологии / Ю.А. Шафрин. - М.: АБФ, 2001. - 560 с.
. Яковлев В.А. Компьютерные сети / В.А. Яковлев. - М.: ИНФРА-М. 2001. - 244 с.
. www.informika.ru - Интернет-учебник по информатике.
. www.ito.edu.ru - Виртуальный университет информационных технологий.
17. www.ietf.org - Портал технических стандартов.
18. www.nagios.org - Сайт проекта Nagios.
19. www.debian.org - Сайт операционной системы Debian.
20. www.linux.org - Сайт ядра Linux.
21. www.habrahabr.ru - Русский блог-портал специалистов по информационным технологиям.
. http://en.wikipedia.org/wiki/Wiki - Англоязычная свободная энциклопедия.
. Храмцов П.Б.Информационные сети / Московская финансово-промышленная академия. - М., - 2004. - 290 с
. Тулябаев Ф.А. Компьютерные сети и телекоммуникации 171 стр.
. Столлингс В. Современные компьютерные сети. 2-е изд СПб.: Питер, 2003. - 783 с.: ил.
. Паркер Т., Сиян К. TCP/IP. Для профессионалов 3-е изд. СПб.: Питер, 2004. - 859 с.: ил.
. Вишневский В.М. Теоретические основы проектирования компьютерных сетей Техносфера, 2003 г.
28. Casad J. Sams teach yourself TCP-IP in 24 hours
. Hunt C. TCP-IP network administration
. James Turnbull. Pro Nagios 2.0
31. Бейли Д., Райт Э. Волоконная оптика: теория и практика Волоконная оптика: теория и практика/Пер. с англ. - М: КУДИЦ-ПРЕСС, 2008 г. , 320 с.
. Руководство пользователя. Коммутаторы локальных сетей D-Link. Учебное пособие 2004 г. 89 стр.
. Таненбаум Э. Компьютерные сети 4-е изд.
34. Feit S. TCP/IP: Architecture, Protocols, and Implementation with IPv6 and IP Security - 2nd ed. Dr. Sidnie Feit Copyright 1997, 1993 All rights reserved Фейт С. TCP/IP: Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) - 2-е изд. Copyright © 1997, 1993 by The McGraw-Hill Companies, Inc. ISBN 0-07-021389-5 McGraw-Hill Издательство "Лори", 2000 , 450 стр
35. Уилсон Эд. Мониторинг и анализ сетей. Методы выявления неисправностей
. ГОСТ 12.1.005-88 ССБТ. Общие санитарно-гигиенические требования к воздуху рабочей зоны.
. СНиП 23.05-95. Естественное и искусственное освещение.
. СанПиН 2.2.2/2.4.1340-03. Гигиенические требования к персональным электронно-вычислительным машинам и организации работы.
. СанПиН 2.2.2.542-96. Гигиенические требования к видеодисплейным терминалам, персональным ЭВМ и организации работы.
. НПБ 105-03. «Пожарная безопасность».
. СНиП 21-01-97. Пожарная безопасность зданий и сооружений.
. ГОСТ 12.1.003-83 ССБТ. Шум. Общие требования безопасности.
. ГОСТ 12.1.006-84 ССБТ. Электромагнитные поля радиочастот. Общие требования безопасности.
. ГОСТ 12.2.032-78 ССБТ. Рабочее место при выполнении работ сидя. Общие требования.
. http://ru.wikipedia.org/wiki/ - Русскоязычная свободная интернет-энциклопедия.
. http://www.goural.ru/svregion/407 - Официальный туристический сайт Свердловской области
47. http://www.ugmk.com - Сайт компании УГМК-холдинг.
. СН 2.2.4/2.1.8.562-96. Шум на рабочих местах, в помещениях жилых, общественных зданий и на территории жилой застройки.
49. www.nix.ru - Сайт поставщика компьютерных комплектующих.
. http://www.mprso.ru/a_2001.htm - Сайт министерства природных ресурсов Свердловской области.
. СанПиН 2.1.4.1074-01. Питьевая вода и водоснабжение населенных мест питьевая вода. Гигиенические требования к качеству воды централизованных систем питьевого водоснабжения. Контроль качества санитарно-эпидемиологические правила и нормативы.
. Технический паспорт ламп ЛДЦ60.
53. www.e1.ru - Интернет-портал города Екатеринбург.
54. www.price.ru - Справочник по ценам.
55. www.opennet.org - Форум специалистов по информационным технологиям.
Приложение А
Рис. А.1 - Структура предприятия
Приложение Б
Таблица Б.1 - Сравнительная таблица систем сетевого мониторинга
Назв. | Диаграммы | SLA <http://en.wikipedia.org/wiki/Service_level_agreement> ОтчетыЛогическое группированиеТрендыПрогнозирование трендовАвтоматическое обнаружениеАгент [1]SNMP <http://en.wikipedia.org/wiki/Simple_Network_Management_Protocol>Syslog <http://en.wikipedia.org/wiki/Syslog>Внешние скрипты [2]Плагины [3]Сложность создания плагинов [4]Триггеры/события [5]Веб-интерфейс <http://en.wikipedia.org/wiki/Web_application> [6]Распределенный мониторингИнвентаризацияМетод хранения данныхЛицензия <http://en.wikipedia.org/wiki/Software_license_agreement>Карты[7]Управление доступом[8]События [9]ЯзыкОтслеживание пользователей | |||||||||||||||||||||
AdRem NetCrunch <http://en.wikipedia.org/wiki/NetCrunch>ДНДДНДНДДДДН/ДДТолько просмотрННSQL <http://en.wikipedia.org/wiki/SQL>Коммерч.Динамические, статические, полностью настраиваемыеДД | |||||||||||||||||||||||
Argus <http://en.wikipedia.org/wiki/Argus_%28monitoring_software%29>ДДДНННДДНДДЛегкоДТолько просмотрЧастичноНеизвестноBerkeley DB <http://en.wikipedia.org/wiki/Berkeley_DB>Своя <http://en.wikipedia.org/wiki/Artistic_License>НГрадацияД | |||||||||||||||||||||||
Cacti <http://en.wikipedia.org/wiki/Cacti_%28software%29>ДДДДДЧерез плагинНДДД<http://cactiusers.org/wiki/PluginArchitectureInstall>ЛегкоДПолный <http://www.cacti.net/sites_that_use_cacti.php> контрольДДRRDtool <http://en.wikipedia.org/wiki/RRDtool>, MySQL <http://en.wikipedia.org/wiki/MySQL>GPL <http://en.wikipedia.org/wiki/GNU_General_Public_License>Через плагин (weathermap)НеизвестноНеизвестноPHP <http://en.wikipedia.org/wiki/PHP> (требуется <http://www.cacti.net/what_is_cacti.php>) | |||||||||||||||||||||||
CiscoWorks <http://en.wikipedia.org/wiki/CiscoWorks> LMSДДДНеизвестноНДНДДНеизвестноНеизвестноНеизвестноДПолный кнтроль (без обн.)ДДНеизвестноКоммерч.Динамические и настраиваемыеДДД | |||||||||||||||||||||||
collectd <http://en.wikipedia.org/wiki/Collectd>Внешний скриптННННМодель добавления, возможен multicastДДДДД (C или Perl)Легко - Сложно (зависит от метода)ДВнешний скриптДНRRDtool <http://en.wikipedia.org/wiki/RRDtool>, CSV <http://en.wikipedia.org/wiki/Comma-separated_values>, в памяти, плагиныGPLv2 <http://en.wikipedia.org/wiki/GNU_General_Public_License>НApache ACLflaН<http://en.wikipedia.org/wiki/C_%28programming_language%29> | |||||||||||||||||||||||
FreeNATS <http://en.wikipedia.org/wiki/FreeNATS>ДДДННДДНЧерез плагинЧерез плагинДСреднеНа PHPПолный контрольННMySQL <http://en.wikipedia.org/wiki/MySQL>GPL <http://en.wikipedia.org/wiki/GNU_General_Public_License>НГрадацияДPHP <http://en.wikipedia.org/wiki/PHP> | |||||||||||||||||||||||
Ganglia <http://en.wikipedia.org/wiki/Ganglia_%28software%29>ДНДДНЧерез gmond проверкуДЧерез плагинНДДСреднеНТольско просмотрДНеизвестноRRDtool <http://en.wikipedia.org/wiki/RRDtool>, в памятиBSD <http://en.wikipedia.org/wiki/BSD>ДНН<http://en.wikipedia.org/wiki/C_%28programming_language%29> | |||||||||||||||||||||||
Intellipool Network Monitor <http://en.wikipedia.org/wiki/Intellipool_Network_Monitor>ДДДННДНДДДДДНДДДFirebirdSQL <http://en.wikipedia.org/wiki/FirebirdSQL>Коммерч.ДГрадацияДC++ <http://en.wikipedia.org/wiki/C%2B%2B> | |||||||||||||||||||||||
IPHost Network Monitor <http://en.wikipedia.org/wiki/IPHost_Network_Monitor>ДДДДНДНДНДДЛегкоДПросмотр, Отчетность, ПодтверждениеННFirebirdSQL <http://en.wikipedia.org/wiki/FirebirdSQL>Коммерч.ННД | |||||||||||||||||||||||
Munin <http://en.wikipedia.org/wiki/Munin_%28Network_Monitoring_Application%29>ДННДНеизвестноНДДНДДСреднеЧастичноТолько <http://munin.ping.uio.no/> просмотр, привитивНеизвестноНеизвестноRRDtool <http://en.wikipedia.org/wiki/RRDtool>GPL <http://en.wikipedia.org/wiki/GNU_General_Public_License>НеизвестноНеизвестноНеизвестноPerl <http://en.wikipedia.org/wiki/Perl> | |||||||||||||||||||||||
Nagios <http://en.wikipedia.org/wiki/Nagios>ДЧерез плагинДДДЧерез плагинДЧерез плагинЧерез плагинД<http://nagiosplugins.org/>ЛегкоДПросмотр, отчетность, контрольДЧерез плагинФайл <http://en.wikipedia.org/wiki/Flat_file>, SQL <http://en.wikipedia.org/wiki/SQL>GPL <http://en.wikipedia.org/wiki/GNU_General_Public_License>Динамические и настраиваемыеДД<http://en.wikipedia.org/wiki/C_%28programming_language%29>Д | |||||||||||||||||||||||
NetMRI <http://en.wikipedia.org/wiki/Netcordia>ДНДДНДНДДДДСреднеДНДДMySQL <http://en.wikipedia.org/wiki/MySQL>Коммерч.ДДД | |||||||||||||||||||||||
NetQoS Performance Center <http://en.wikipedia.org/wiki/NetQoS>ДДДДДДНДДДДДДДДДДКоммерч.ДДД<http://en.wikipedia.org/wiki/C>, .NET <http://en.wikipedia.org/wiki/.NET_Framework>Д | |||||||||||||||||||||||
OpenNMS <http://en.wikipedia.org/wiki/OpenNMS>ДД<http://www.opennms.org/index.php/Categories>ДНеизвестноДПоддержД<http://www.opennms.org/index.php/Syslogd><http://www.opennms.org/index.php/GeneralPurposePoller>ДЛегко - Сложно (зависит от метода)ДПолный контроль<http://www.opennms.org/index.php/Distributed_Monitoring>LimitedJRobin <http://www.jrobin.org/>, PostgreSQL <http://en.wikipedia.org/wiki/PostgreSQL> [1] <http://www.opennms.org/documentation/InstallStable.html>GPL <http://en.wikipedia.org/wiki/GNU_General_Public_License><http://www.opennms.org/index.php/Maps><http://www.opennms.org/index.php/User>ДJava <http://en.wikipedia.org/wiki/Java_%28programming_language%29>Д | |||||||||||||||||||||||
OPNET ACE Live <http://en.wikipedia.org/wiki/OPNET>ДДДДДДНДНДДЛегкоДДДНДКоммерч.ДДД<http://en.wikipedia.org/wiki/C>, Java <http://en.wikipedia.org/wiki/Java>Д | |||||||||||||||||||||||
Opsview <http://en.wikipedia.org/wiki/Opsview>ДДДДНДДДДДДДДДДНSQL <http://en.wikipedia.org/wiki/SQL>GPL <http://en.wikipedia.org/wiki/GNU_General_Public_License>Динамические и настраиваемыеГрадацияДPerl <http://en.wikipedia.org/wiki/Perl>, <http://en.wikipedia.org/wiki/C_%28programming_language%29> | |||||||||||||||||||||||
PacketTrap <http://en.wikipedia.org/wiki/PacketTrap>ДНДДНеизвестноДДДДДДСреднеДПросмотр и отчетностьДНеизвестноSQL <http://en.wikipedia.org/wiki/SQL>Коммерч.НеизвестноНеизвестноНеизвестно | |||||||||||||||||||||||
Pandora FMS <http://en.wikipedia.org/wiki/Pandora_FMS>ДДДДДДПоддерж.ДДДДЛегкоДПолный контрольДДMySQL <http://en.wikipedia.org/wiki/MySQL>GPLv2 <http://en.wikipedia.org/wiki/GPL>; (доступна коммперч. подписка)Автоматическое построениеГрадацияДPerl <http://en.wikipedia.org/wiki/Perl>, PHP <http://en.wikipedia.org/wiki/PHP> | |||||||||||||||||||||||
Performance Co-Pilot <http://en.wikipedia.org/wiki/Performance_Co-Pilot>ДНДДННДННДДСреднеДНДНФайл <http://en.wikipedia.org/wiki/Flat_file>GPL <http://en.wikipedia.org/wiki/GNU_General_Public_License>, LGPL <http://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License>ННН<http://en.wikipedia.org/wiki/C_%28programming_language%29>, Perl <http://en.wikipedia.org/wiki/Perl>, Python <http://en.wikipedia.org/wiki/Python_%28programming_language%29> | |||||||||||||||||||||||
Scrutinizer <http://en.wikipedia.org/wiki/Plixer_International>ДДДДНННДДДДЛегкоДДДДMySQL <http://en.wikipedia.org/wiki/MySQL>Коммерч.Динамические, статические, полностью настраиваемыеДДPerl <http://en.wikipedia.org/wiki/Perl>Д | |||||||||||||||||||||||
ServersCheck <http://en.wikipedia.org/wiki/ServersCheck>ДДДДНДПоддержДДДДЛегкоДПолный контрольДНFlat file <http://en.wikipedia.org/wiki/Flat_file>, ODBC <http://en.wikipedia.org/wiki/ODBC>Коммерч.Динамические, статические, полностью настраиваемыеДД | |||||||||||||||||||||||
SevOne <http://en.wikipedia.org/wiki/SevOne>ДДДДНеизвестноДНДНДДЛегкоДПолный контрольДНеизвестноMySQL <http://en.wikipedia.org/wiki/MySQL>Коммерч.НеизвестноДД | |||||||||||||||||||||||
Orion <http://en.wikipedia.org/wiki/SolarWinds>ДДДДДДДДДДДЛегкоДПолный контрольДДSQL <http://en.wikipedia.org/wiki/SQL>Коммерч.ДДД<http://en.wikipedia.org/wiki/C_%28programming_language%29>Н | |||||||||||||||||||||||
Shinken <http://en.wikipedia.org/wiki/Shinken_%28software%29>ДЧерез плагинДДНЧерез плагинДЧерез плагинЧерез плагинД<http://nagiosplugins.org/>ЛегкоДПросмотр, отчетность, контрольДЧерез плагинФайл <http://en.wikipedia.org/wiki/Flat_file>, MySQL <http://en.wikipedia.org/wiki/MySQL>, Oracle <http://en.wikipedia.org/wiki/Oracle_Database>, CouchDB <http://en.wikipedia.org/wiki/CouchDB>, Sqlite <http://en.wikipedia.org/wiki/Sqlite>AGPL <http://en.wikipedia.org/wiki/Affero_General_Public_License>Динамические, статические, настраиваемыеНДPython <http://en.wikipedia.org/wiki/Python_%28programming_language%29>Н | |||||||||||||||||||||||
Spiceworks <http://en.wikipedia.org/wiki/Spiceworks>ДДДННДПоддержДНДДСреднеДДДДSqlite <http://en.wikipedia.org/wiki/Sqlite>Free Коммерч.Динамические, статические, настраиваемыеАдмин и польз. отчетность, больше через плагинДRuby <http://en.wikipedia.org/wiki/Ruby_%28programming_language%29>Д | |||||||||||||||||||||||
TclMon <http://en.wikipedia.org/wiki/TclMon>Contributed standalone clientДДДНДПоддержДДДДЛегко - Сложно (зависит от метода)ДВнешний скриптННRRDTool, в памяти, плагиныBSD <http://en.wikipedia.org/wiki/BSD>Внешний отдельно стоящий клиентДНTcl <http://en.wikipedia.org/wiki/Tcl> | |||||||||||||||||||||||
Zabbix <http://en.wikipedia.org/wiki/Zabbix>ДДДДДДПоддержДДДДЛегкоДПолный контрольДДOracle <http://en.wikipedia.org/wiki/Oracle_Database>, MySQL <http://en.wikipedia.org/wiki/MySQL>, PostgreSQL <http://en.wikipedia.org/wiki/PostgreSQL>, SQLite <http://en.wikipedia.org/wiki/SQLite>GPL <http://en.wikipedia.org/wiki/GNU_General_Public_License>ДДД<http://en.wikipedia.org/wiki/C_%28programming_language%29>, PHP <http://en.wikipedia.org/wiki/PHP> | |||||||||||||||||||||||
ZeНss <http://en.wikipedia.org/wiki/Zenoss>ДДДДДДНДДДДЛегкоДПолный контрольДДZODB <http://en.wikipedia.org/wiki/ZODB>, MySQL <http://en.wikipedia.org/wiki/MySQL>, RRDtool <http://en.wikipedia.org/wiki/RRDtool>GPL ZeНss Core; платная Pro и Enterprise подпискиДДДPython <http://en.wikipedia.org/wiki/Python_%28programming_language%29>, Zope <http://en.wikipedia.org/wiki/Zope> | |||||||||||||||||||||||
Zyrion Traverse <http://en.wikipedia.org/wiki/Zyrion_Traverse>ДReal-time or ScheduledДДДДПоддержДДДДЛегкоДПолный контрольДДSQL <http://en.wikipedia.org/wiki/SQL>Коммерч.НастраиваемыеМногозвенныйДJava <http://en.wikipedia.org/wiki/Java_%28programming_language%29>, <http://en.wikipedia.org/wiki/C_%28programming_language%29> |
Примечения к Таблице: 1. Агент - это программа, запускаемая на хосте, мониторинг которого необходимо проводить. "Поддерж" означает, что агент может использоваться, но не обязательно. Служба SNMP не считается в данном случае агентом; 2. Возможность выполнения действия запущенного скрипта, написанного пользователем; 3. Официальные или написанные пользователями расширения, которые позволяют получать дополнительную информацию с контролируемых хостов; 4. Написание новых плагинов может быть обычной задачей, если пользователь хочет расширить функционал продукта; 5. Триггеры это правила, определяющие совпадение статуса системы с заданным пользователем; 6. Веб-интерфейс, который может быть использован для просмотра графиков, статусов системы, редактирования параметров, таких, как контролируемые хосты, триггеры, правила; 7. Карты это графическое представления контролируемых компонентов; 8. Контроль доступа это возможность обезопасить данные мониторинга через использование нескольких уровней привилегий пользователей через пароли или другие способы. Следует заметить, что даже если поддержка контроля доступа отсутствует, современные веб-сервера могут осуществлять её независимо от службы мониторинга, блокируя определенные страницы; 9. События это возможность подтверждать и записывать определенные действия
Приложение В
Таблица В.1 - Перечень оборудования сети
№ | Наименован. | Марка, характеристики, номер. | Назначение. | № сертификата соответствия. |
1 | Модемный пул | Robotics MP/16 v/34 S/n:000930014196552 | Коммутируемое соединение | ОС/1-СПД-105 |
2 | Модем | Robotics Courier v/34 S/n:310ZB2D812TC | Коммутируемое соединение | ОС/1-ТФ-439 |
3 | Модем | Robotics Courier v/34 S/n:310ZB2A79E6X | Коммутируемое соединение | ОС/1-ТФ-439 |
4 | Модем | Robotics Courier v/34 S/n:310ZB2979AC9 | Коммутируемое соединение | ОС/1-ТФ-439 |
5 | Модем | Robotics Courier v/34 S/n:310ZB2A79IV2 | Коммутируемое соединение | ОС/1-ТФ-439 |
6 | Модем | Robotics Courier v/34 S/n:310ZB2A79J1E | Коммутируемое соединение | ОС/1-ТФ-439 |
7 | ISP- сервер (WEB, Mail) | AQUARIUS SERVER T40 S41, Linux Debian. | Электронная почта, WEB сервер. | ГОСТ Р 51318.22-99 (класс В), ГОСТ 26329-84, ГОСТ Р 51318.24-99, ГОСТ Р МЭК 60950-2002, СанПиН 2.2.2/2.4.1340-03 |
8 | Диалап - сервер | AQUARIUS SERVER E40 S20, Linux Debian | Мультеплексирование РРР соединений | ГОСТ Р 51318.22-99 (класс В),ГОСТ 26329-84, ГОСТ Р 51318.24-99, ГОСТ Р МЭК 60950-2002, СанПиН 2.2.2/2.4.1340-03 |
9 | Маршрутизатор входной. | AQUARIUS SERVER T40 S41, Linux Debian. | Fire Wall Маршрутизация сетей провайдеров. | ГОСТ Р 51318.22-99 (класс В), ГОСТ 26329-84, ГОСТ Р 51318.24-99, ГОСТ Р МЭК 60950-2002, СанПиН 2.2.2/2.4.1340-03 |
10 | Резерв. | PC Pentium 466 mHz, 2,4HDD, 128 mBit RAM, Linux Debian. | Fire Wall | |
11 | Концентратор (хаб) | AT - FS708LE s/n:LITA419B | Коммутация серверов | ОС/1-СПД-791 |
12 | DB - сервер | AQUARIUS SERVER T50 D60, Linux Debian | Сервер баз данных | ГОСТ Р 51318.22-99 (класс В), ГОСТ 26329-84, ГОСТ Р 51318.24-99, ГОСТ Р МЭК 60950-2002,СанПиН 2.2.2/2.4.1340-03 |
13 | Центральный коммутатор с функцией биллинга. | AT-9924T S/n: 64691073 | Коммутация серверов, учет трафика, система авторизации клиентов | ОС/3-СПД-0208 |
14 | Оптический модем | FE-C120S5.S20 S/n:94H3D4121099 | Вход внешнего канала ГТ | ОС/1-СПД-0031 |
15 | Модем | D-Link DSL-300T S/n: DR9U151006045 | Вход внешнего канала УСИ | ОС/1-ТМ-318 |
16 | Коммутатор | D-Link DES-2108 | Коммутация абонентских линий | ОС/3-СПД-0208 |
17 | Коммутатор | D-Link DES-3018 | Коммутация абонентских линий | ОС/3-СПД-0208 |
18 | Коммутатор | D-Link DES-3028 | Коммутация абонентских линий | ОС/3-СПД-0208 |
19 | Коммутатор | D-Link DES-3526 | Коммутация абонентских линий | ОС/3-СПД-0208 |
20 | Коммутатор | D-Link DES-1228 | Коммутация абонентских линий | ОС/3-СПД-0208 |
21 | Коммутатор | D-Link DES-1226 | Коммутация абонентских линий | ОС/3-СПД-0208 |
22 | Коммутатор | Allied Telesyn Rapier-24i | Коммутация абонентских линий | ОС/3-СПД-0208 |
23 | Маршрутизатор | D-Link DGS-3627 | Коммутация оптических магистралей | ОС/3-СПД-0208 |
24 | Коммутатор | Allied Telesyn AT-8024 | Коммутация абонентских линий | ОС/3-СПД-0208 |
25 | Коммутатор | Allied Telesyn AT-8012M | Коммутация абонентских линий | ОС/3-СПД-0208 |
26 | Коммутатор | Allied Telesyn Rapier_6G | Коммутация абонентских линий | ОС/3-СПД-0208 |
27 | WiFi точка доступа | D-Link DWL-1000 AP | Организация WiFi сети | ГОСТ 26329-84 |
28 | WiFi точка доступа | D-Link 2000 AP+ | Организация WiFi сети | ГОСТ 26329-84 |
29 | WiFi точка доступа | D-Link 900 AP+ | Организация WiFi сети | ГОСТ 26329-84 |
Приложение Г
Конфигурация почтового модуля postfix
/etc/postfix/main.cf
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname_banner = $myhostname ESMTP $mail_name (Debian/GNU)= no
# appending .domain is the MUA's job._dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h_directory = no
# TLS parameters_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key_use_tls=yes_tls_session_cache_database = btree:${data_directory}/smtpd_scache_tls_session_cache_database = btree:${data_directory}/smtp_scache
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.= monitoring.vpcit.ru_maps = hash:/etc/aliases_database = hash:/etc/aliases= /etc/mailname= monitoring.vpcit.ru, localhost.vpcit.ru, , localhost== 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128_size_limit = 0_delimiter = +_interfaces = all_protocols = ipv4
Приложение Д
Рис. Д.1 - Диаграмма работы ядра сетевого мониторинга
Приложение Е
Структура конфигурационных файлов ядра системы
/etc/nagios3
├── apache2.conf
├── cgi.cfg
├── commands.cfg
├── commands.cfg.dpkg-dist
├── conf.d
│ ├── contacts_nagios2.cfg
│ ├── extinfo_nagios2.cfg
│ ├── generic-host_nagios2.cfg
│ ├── generic-service_nagios2.cfg
│ ├── host-gateway_nagios3.cfg
│ ├── host-gateway_nagios3.cfg.ucf-dist
│ ├── hostgroups_nagios2.cfg
│ ├── localhost_nagios2.cfg
│ ├── services_nagios2.cfg
│ └── timeperiods_nagios2.cfg
├── htpasswd.users
├── nagios.cfg
├── nagios.cfg.dpkg-dist
├── objects
│ ├── contacts.cfg
│ ├── extinfo.cfg
│ ├── hostgroups.cfg
│ ├── routers
│ │ ├── at9924.cfg
│ │ ├── des3627g.cfg
│ │ ├── rapier24i.cfg
│ │ └── router_len58a.cfg
│ ├── servers
│ │ ├── 1c.cfg
│ │ ├── db.cfg
│ │ ├── for.cfg
│ │ ├── host_mail.cfg
│ │ ├── isp.cfg
│ │ └── localhost.cfg
│ ├── servicegroups.cfg
│ ├── switches
│ ├── templates.cfg
│ └── timeperiods.cfg
├── pnp
├── resource.cfg
└── stylesheets
├── avail.css
├── checksanity.css
├── cmd.css
├── common.css
├── config.css
├── extinfo.css
├── histogram.css
├── history.css
├── ministatus.css
├── notifications.css
├── outages.css
├── showlog.css
├── status.css
├── statusmap.css
├── summary.css
├── tac.css
└── trends.css
Приложение Ж
Рис. Ж.1 - Схема взаимодействия конфигурационных файлов Nagios
Приложение З
Файлы описания хостов и служб
/etc/nagios3/objects/contacts.cfg
contact{_name nagiosadmin ; Short name of usergeneric-contact ; Inherit default values from generic-contact template (defined above)Voynovich Andrey ; Full name of useradmin@vpcit.ru_notifications_enabled 1_notifications_enabled 1_notification_period 24x7_notification_period 24x7_notification_options w,u,c,r_notification_options d,u,r_notification_commands notify-service-by-email_notification_commands notify-host-by-email_submit_commands 1
}
contact{_name mainadmin ; Short name of usergeneric-contact ; Inherit default values from generic-contact template (defined above)Demidoff Alexander ; Full name of userdemidoff@vpcit.ru host_notifications_enabled 1_notifications_enabled 1_notification_period 24x7_notification_period 24x7_notification_options w,u,c,r_notification_options d,u,r_notification_commands notify-service-by-email_notification_commands notify-host-by-email_submit_commands 0
}
contact{_name maincoder ; Short name of usergeneric-contact ; Inherit default values from generic-contact template (defined above)Don Yura ; Full name of useryura@vpcit.ru_notifications_enabled 1_notifications_enabled 1_notification_period 24x7_notification_period 24x7_notification_options w,u,c,r_notification_options d,u,r_notification_commands notify-service-by-email_notification_commands notify-host-by-email_submit_commands 0
}
/etc/nagios3/objects/extinfo.cfg
hostextinfo{_name debian-serversDebian GNU/Linux servers_image base/debian.png_image_alt Debian GNU/Linux_image debian.png_image base/debian.gd2
}
hostextinfo{_name windows-serversMicrosoft Windows servers_image base/win40.png_image_alt Microsoft Windows_image win40.png_image base/win40.gd2
}
hostextinfo{_name routersNetwork Routers_image base/router40.png_image_alt Router_image router40.png_image base/router40.gd2
}
/etc/nagios3/objects/hostgroups.cfg
# Define an optional hostgroup for Linux machineshostgroup{_name linux-servers ; The name of the hostgroupLinux Servers ; Long name of the grouplocalhost,host_mail,db,isp,for ; Comma separated list of hosts that belong to this group
}
# A list of your Debian GNU/Linux servershostgroup {_name debian-serversDebian GNU/Linux Serverslocalhost,host_mail,db,isp,for,router_len58a
}
# Define a hostgroup for Windows machines
# All hosts that use the windows-server template will automatically be a member of this group
hostgroup{_name windows-servers ; The name of the hostgroupWindows Servers ; Long name of the group
}
# Create a new hostgroup for switches
hostgroup{_name routers ; The name of the hostgroupNetwork Routers ; Long name of the group
}
/etc/nagios3/objects/templates.cfg
# CONTACT TEMPLATES
# Generic contact definition template - This is NOT a real contact, just a template!
contact{generic-contact ; The name of this contact template_notification_period 24x7 ; service notifications can be sent anytime_notification_period 24x7 ; host notifications can be sent anytime_notification_options w,u,c,r,f,s ; send notifications for all service states, flapping events, and scheduled downtime events_notification_options d,u,r,f,s ; send notifications for all host states, flapping events, and scheduled downtime events_notification_commands notify-service-by-email ; send service notifications via email_notification_commands notify-host-by-email ; send host notifications via email0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL CONTACT, JUST A TEMPLATE!
}
# HOST TEMPLATES
# Generic host definition template - This is NOT a real host, just a template!
host{generic-host ; The name of this host template_enabled 1 ; Host notifications are enabled_handler_enabled 1 ; Host event handler is enabled_detection_enabled 1 ; Flap detection is enabled_prediction_enabled 1 ; Failure prediction is enabled_perf_data 1 ; Process performance data_status_information 1 ; Retain status information across program restarts_nonstatus_information 1 ; Retain non-status information across program restarts_period 24x7 ; Send host notifications at any time0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
}
# Linux host definition template - This is NOT a real host, just a template!
host{linux-server ; The name of this host templategeneric-host ; This template inherits other values from the generic-host template_period 24x7 ; By default, Linux hosts are checked round the clock_interval 5 ; Actively check the host every 5 minutes_interval 1 ; Schedule host check retries at 1 minute intervals_check_attempts 10 ; Check each Linux host 10 times (max)_command check-host-alive ; Default command to check Linux hosts_period workhours ; Linux admins hate to be woken up, so we only notify during the day
; Note that the notification_period variable is being overridden from
; the value that is inherited from the generic-host template!_interval 120 ; Resend notifications every 2 hours_options d,u,r ; Only send notifications for specific host states_groups admins ; Notifications get sent to the admins by default0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
}
# Windows host definition template - This is NOT a real host, just a template!
host{windows-server ; The name of this host templategeneric-host ; Inherit default values from the generic-host template_period 24x7 ; By default, Windows servers are monitored round the clock_interval 5 ; Actively check the server every 5 minutes_interval 1 ; Schedule host check retries at 1 minute intervals_check_attempts 10 ; Check each server 10 times (max)_command check-host-alive ; Default command to check if servers are "alive"_period 24x7 ; Send notification out at any time - day or night_interval 30 ; Resend notifications every 30 minutes_options d,r ; Only send notifications for specific host states_groups admins ; Notifications get sent to the admins by defaultwindows-servers ; Host groups that Windows servers should be a member of0 ; DONT REGISTER THIS - ITS JUST A TEMPLATE
}
# We define a generic printer template that can be used for most printers we monitor
host{generic-printer ; The name of this host templategeneric-host ; Inherit default values from the generic-host template_period 24x7 ; By default, printers are monitored round the clock_interval 5 ; Actively check the printer every 5 minutes_interval 1 ; Schedule host check retries at 1 minute intervals_check_attempts 10 ; Check each printer 10 times (max)_command check-host-alive ; Default command to check if printers are "alive"_period workhours ; Printers are only used during the workday_interval 30 ; Resend notifications every 30 minutes_options d,r ; Only send notifications for specific host states_groups admins ; Notifications get sent to the admins by default0 ; DONT REGISTER THIS - ITS JUST A TEMPLATE
}
# Define a template for switches that we can reusehost{generic-switch ; The name of this host templategeneric-host ; Inherit default values from the generic-host template_period 24x7 ; By default, switches are monitored round the clock_interval 5 ; Switches are checked every 5 minutes_interval 1 ; Schedule host check retries at 1 minute intervals_check_attempts 10 ; Check each switch 10 times (max)_command check-host-alive ; Default command to check if routers are "alive"_period 24x7 ; Send notifications at any time_interval 30 ; Resend notifications every 30 minutes_options d,r ; Only send notifications for specific host states_groups admins ; Notifications get sent to the admins by default0 ; DONT REGISTER THIS - ITS JUST A TEMPLATE
}
# SERVICE TEMPLATES
# Generic service definition template - This is NOT a real service, just a template!
service{generic-service ; The 'name' of this service template_checks_enabled 1 ; Active service checks are enabled_checks_enabled 1 ; Passive service checks are enabled/accepted_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems)_over_service 1 ; We should obsess over this service (if necessary)_freshness 0 ; Default is to NOT check service 'freshness'_enabled 1 ; Service notifications are enabled_handler_enabled 1 ; Service event handler is enabled_detection_enabled 1 ; Flap detection is enabled_prediction_enabled 1 ; Failure prediction is enabled_perf_data 1 ; Process performance data_status_information 1 ; Retain status information across program restarts_nonstatus_information 1 ; Retain non-status information across program restarts_volatile 0 ; The service is not volatile_period 24x7 ; The service can be checked at any time of the day_check_attempts 3 ; Re-check the service up to 3 times in order to determine its final (hard) state_check_interval 10 ; Check the service every 10 minutes under normal conditions_check_interval 2 ; Re-check the service every two minutes until a hard state can be determined_groups admins ; Notifications get sent out to everyone in the 'admins' group_options w,u,c,r ; Send notifications about warning, unknown, critical, and recovery events_interval 60 ; Re-notify about service problems every hour_period 24x7 ; Notifications can be sent out at any time0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE!
}
# Local service definition template - This is NOT a real service, just a template!
service{local-service ; The name of this service templategeneric-service ; Inherit default values from the generic-service definition_check_attempts 4 ; Re-check the service up to 4 times in order to determine its final (hard) state_check_interval 5 ; Check the service every 5 minutes under normal conditions_check_interval 1 ; Re-check the service every minute until a hard state can be determined0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE!
}
/etc/nagios3/objects/timeperiods.cfg
# This defines a timeperiod where all times are valid for checks,
# notifications, etc. The classic "24x7" support nightmare. :-)timeperiod{_name 24x724 Hours A Day, 7 Days A Week00:00-24:0000:00-24:0000:00-24:0000:00-24:0000:00-24:0000:00-24:0000:00-24:00
}
# 'workhours' timeperiod definitiontimeperiod{_name workhoursNormal Work Hours09:00-18:0009:00-18:0009:00-18:0009:00-18:0009:00-18:00
}
# 'none' timeperiod definitiontimeperiod{_name noneNo Time Is A Good Time
}
# Some U.S. holidays
# Note: The timeranges for each holiday are meant to *exclude* the holidays from being
# treated as a valid time for notifications, etc. You probably don't want your pager
# going off on New Year's. Although you're employer might... :-)timeperiod{us-holidays_name us-holidaysU.S. Holidays
1 00:00-00:00 ; New Years-1 may 00:00-00:00 ; Memorial Day (last Monday in May)4 00:00-00:00 ; Independence Day1 september 00:00-00:00 ; Labor Day (first Monday in September)-1 november 00:00-00:00 ; Thanksgiving (last Thursday in November)25 00:00-00:00 ; Christmas
}
# This defines a modified "24x7" timeperiod that covers every day of the
# year, except for U.S. holidays (defined in the timeperiod above).timeperiod{_name 24x7_sans_holidays24x7 Sans Holidays
us-holidays ; Get holiday exceptions from other timeperiod
00:00-24:0000:00-24:0000:00-24:0000:00-24:0000:00-24:0000:00-24:0000:00-24:00
}
/etc/nagios3/objects/servers/localhost.cfg
host{linux-server_name localhostlocalhost127.0.0.1_interval 0.12_period 24x7_options d,u,f,r_interval 30_groups admins_enabled 1
}
service{local-service_name localhost_description PING_command check_ping!100.0,20%!500.0,60%_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}service{local-service_name localhost_description Root Partition_command check_local_disk!20%!10%!/_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{local-service_name localhost_description var Partition_command check_local_disk!20%!10%!/var_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{local-service_name localhost_description Current Users_command check_local_users!20!50_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{local-service_name localhost_description Total Processes_command check_local_procs!250!400!RSZDT_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{local-service_name localhost_description Current Load_command check_local_load!5.0,4.0,3.0!10.0,6.0,4.0_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}service{local-service_name localhost_description Swap Usage_command check_local_swap!20!10_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
# Define a service to check SSH on the local machine.
# Disable notifications for this service by default, as not all users may have SSH enabled.
service{local-service ; Name of service template to use_name localhost_description SSH_command check_ssh_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
# Define a service to check HTTP on the local machine.
# Disable notifications for this service by default, as not all users may have HTTP enabled.service{local-service ; Name of service template to use_name localhost_description HTTP_command check_http_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service; Inherit values from a template_name localhost_description Uptime_command check_netapp_uptime
}
service{generic-service; Inherit values from a template_name localhost_description eth0 System Link Status on hosting_command check_snmp!public!ifOperStatus.2! -m RFC1213-MIB_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}service{generic-service; Inherit values from a template_name localhost_description eth0.1001 Management Link Status on hosting_command check_snmp!public!ifOperStatus.3! -m RFC1213-MIB_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
# Monitor bandwidth via MRTG logs
service{generic-service; Inherit values from a template_name localhost_description eth0 System Link Bandwidth Usage on hosting_command traffic_average!/var/www/mrtg/monitoring/127.0.0.1_2.log!AVG!1000000,2000000!5000000,5000000!10_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service; Inherit values from a template_name localhost_description eth0.1001 Management Link Usage on hosting_command traffic_average!/var/www/mrtg/monitoring/127.0.0.1_3.log!AVG!1000000,2000000!5000000,5000000!10
# servicegroups bandwidth_services_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name localhost_description Memory Usage_command check_snmp_mem_v1!public!70,70!90,90_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
/etc/nagios3/objects/servers/1c.cfg
# Define a host for the Windows machine we'll be monitoring
# Change the host_name, alias, and address to fit your situationhost{windows-server ; Inherit default values from a template_name 1c ; The name we're giving to this host1c terminal server ; A longer name associated with the host10.10.80.33 ; IP address of the host_period 24x7_options d,u,f,r_interval 30_groups admins_enabled 1
}
# Create a service for monitoring the version of NSCLient++ that is installed
# Change the host_name to match the name of the host you defined above
service{generic-service_name 1c_description NSClient++ Version_command check_nt!CLIENTVERSION
}
# Create a service for monitoring the uptime of the server
# Change the host_name to match the name of the host you defined above
service{generic-service_name 1c_description Uptime_command check_nt!UPTIME
}
# Create a service for monitoring CPU load
# Change the host_name to match the name of the host you defined above
service{generic-service_name 1c_description CPU Load_command check_nt!CPULOAD!-l 5,80,90_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
# Create a service for monitoring
# Change the host_name to match the name of the host you defined above
service{generic-service_name 1c_description Memory Usage_command check_nt!MEMUSE!-w 80 -c 90_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
# Create a service for monitoring C:\ disk usage
# Change the host_name to match the name of the host you defined above
service{generic-service_name 1c_description C:\ System Space_command check_nt!USEDDISKSPACE!-l c -w 80 -c 90_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name 1c_description D:\ Data Space_command check_nt!USEDDISKSPACE!-l d -w 80 -c 90_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name 1c_description E:\ Swap Usage_command check_nt!USEDDISKSPACE!-l e -w 80 -c 90_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
# Create a service for monitoring the Explorer.exe process
# Change the host_name to match the name of the host you defined above
service{generic-service_name 1c_description Explorer_command check_nt!PROCSTATE!-d SHOWALL -l Explorer.exe_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
/etc/nagios3/objects/servers/db.cfg
host{linux-server_name dbDatabase and DNS192.168.10.215at9924_period 24x7_options d,u,r,f_interval 30_groups admins_enabled 1
}
service{local-service ; Name of service template to use_name db_description PING_command check_ping!100.0,20%!500.0,60%_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service; Inherit values from a template_name db_description Uptime_command check_netapp_uptime
}
service{generic-service_name db_description CPU Load_command check_nrpe_1arg!check_load_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name db_description / Free Space_command check_nrpe_1arg!check_disk1_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name db_description /var Free Space_command check_nrpe_1arg!check_disk2_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name db_description Raid State md0_command check_nrpe_1arg!check_raid_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name db_description Total Processes_command check_nrpe_1arg!check_total_procs_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name db_description Zombie Processes_command check_nrpe_1arg!check_zombie_procs_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name db_description Swap Usage_command check_nrpe_1arg!check_swap_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name db_description Memory Usage_command check_snmp_mem_v1!public!85,70!90,90_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service; Inherit values from a template_name db_description DNS_command check_dns
}
/etc/nagios3/objects/servers/for.cfg
host{linux-server_name forFortochka192.168.10.3_period 24x7_options d,u,r,f_interval 30_groups admins_enabled 1
}
# SERVICE DEFINITIONS
# Define a service to "ping" the machine
service{local-service_name for_description PING_command check_ping!100.0,20%!500.0,60%_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
# Monitor uptime via SNMP
service{generic-service_name for_description Uptime_command check_netapp_uptime
}
service{generic-service_name for_description CPU Load_command check_nrpe_1arg!check_load_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}service{generic-service_name for_description / Free Space_command check_nrpe_1arg!check_disk1_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name for_description Total Processes_command check_nrpe_1arg!check_total_procs_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name for_description Zombie Processes_command check_nrpe_1arg!check_zombie_procs_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name for_description Swap Usage_command check_nrpe_1arg!check_swap_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name for_description eth0 External Link Status_command check_snmp!public!ifOperStatus.2! -m RFC1213-MIB_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}service{generic-service_name for_description Memory Usage_command check_snmp_mem_v1!public!85,70!90,90_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name for_description HTTP_command check_http
}
/etc/nagios3/objects/servers/host_mail.cfg
host{linux-server_name host_mailHosting and Mail192.168.10.214_period 24x7_options d,u,r,f_interval 30_groups admins_enabled 1
}
service{local-service_name host_mail_description PING_command check_ping!100.0,20%!500.0,60%_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
# Monitor uptime via SNMP
service{generic-service_name host_mail_description Uptime_command check_netapp_uptime
}
service{generic-service_name host_mail_description CPU Load_command check_nrpe_1arg!check_load_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name host_mail_description /var/ Free Space_command check_nrpe_1arg!check_disk1_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name host_mail_description Total Processes_command check_nrpe_1arg!check_total_procs_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name host_mail_description Zombie Processes_command check_nrpe_1arg!check_zombie_procs_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name host_mail_description Swap Usage_command check_nrpe_1arg!check_swap_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name host_mail_description eth0 External Link Status on hosting_command check_snmp!public!ifOperStatus.2! -m RFC1213-MIB_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name host_mail_description eth1 System Link Status on hosting_command check_snmp!public!ifOperStatus.3! -m RFC1213-MIB_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name host_mail_description eth1.80 Internal Link Status on hosting_command check_snmp!public!ifOperStatus.4! -m RFC1213-MIB_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
# Monitor bandwidth via MRTG logsservice{generic-service_name host_mail_description eth0 Bandwidth Usage on hosting_command traffic_average!/var/www/mrtg/host_mail/192.168.10.214_2.log!AVG!1000000,2000000!5000000,5000000!10_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name host_mail_description eth1 Bandwidth Usage on hosting_command traffic_average!/var/www/mrtg/host_mail/192.168.10.214_3.log!AVG!1000000,2000000!5000000,5000000!10_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name host_mail_description eth1.80 Bandwidth Usage on hosting_command traffic_average!/var/www/mrtg/host_mail/192.168.10.214_5.log!AVG!1000000,2000000!5000000,5000000!10_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name host_mail_description SMTP_command check_smtp_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name host_mail_description POP3_command check_pop_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name host_mail_description IMAP_command check_imap_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name host_mail_description Memory Usage_command check_snmp_mem_v1!public!85,70!90,90_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}service{generic-service_name host_mail_description Raid State md1_command check_nrpe_1arg!check_raid_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name host_mail_description HTTP_command check_http
}
/etc/nagios3/objects/servers/isp.cfg
host{linux-server_name ispDatabase and DNS192.168.10.217at9924_period 24x7_options d,u,r,f_interval 30_groups admins_enabled 1
}
service{local-service_name isp_description PING_command check_ping!100.0,20%!500.0,60%_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name isp_description DNS_command check_dns
}
/etc/nagios3/objects/routers/at9924.cfg
host{generic-switch ; Inherit default values from a template_name at9924 ; The name we're giving to this switchAllied Telesyn AT-9924 ; A longer name associated with the switch192.168.10.101 ; IP address of the switchrouters ; Host groups this switch is associated with_period 24x7_options d,u,f,r_interval 30_groups admins_enabled 1
}
# Create a service to PING to switch
service{generic-service ; Inherit values from a template_name at9924 ; The name of the host the service is associated with_description PING ; The service description_command check_ping!200.0,20%!600.0,60% ; The command used to monitor the service_check_interval 5 ; Check the service every 5 minutes under normal conditions_check_interval 1 ; Re-check the service every minute until its final/hard state is determined_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
# Monitor uptime via SNMP
service{generic-service ; Inherit values from a template_name at9924_description Uptime_command check_netapp_uptime
}
# Monitor Ports status via SNMP
service{generic-service ; Inherit values from a template_name at9924_description Port 1 Link Status ub13_command check_snmp!public!ifOperStatus.1! -m RFC1213-MIB
}
service{generic-service ; Inherit values from a template_name at9924_description Port 2 Link Status Lenina-105B_command check_snmp!public!ifOperStatus.2! -m RFC1213-MIB
}
service{generic-service ; Inherit values from a template_name at9924_description Port 3 Link Status krivousova36b_command check_snmp!public!ifOperStatus.3! -m RFC1213-MIB
}
service{generic-service ; Inherit values from a template_name at9924_description Port 4 Link Status ur39a_command check_snmp!public!ifOperStatus.4! -m RFC1213-MIB
}
service{generic-service ; Inherit values from a template_name at9924_description Port 5 Link Status ISP-concentrator_command check_snmp!public!ifOperStatus.5! -m RFC1213-MIB
}
service{generic-service ; Inherit values from a template_name at9924_description Port 6 Link Status isp-server_command check_snmp!public!ifOperStatus.6! -m RFC1213-MIB
}
<…>
# Monitor bandwidth via MRTG logs
service{generic-service ; Inherit values from a template_name at9924_description Port 1 Bandwidth Usage ub13_command traffic_average!/var/www/mrtg/AT-9924/192.168.10.101_1.log!AVG!80000000,90000000!100000000,120000000!10_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service ; Inherit values from a template_name at9924_description Port 2 Bandwidth Usage Lenina-105B_command traffic_average!/var/www/mrtg/AT-9924/192.168.10.101_2.log!AVG!80000000,90000000!100000000,120000000!10_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service ; Inherit values from a template_name at9924_description Port 3 Bandwidth Usage krivousova36b_command traffic_average!/var/www/mrtg/AT-9924/192.168.10.101_3.log!AVG!80000000,90000000!100000000,120000000!10_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}service{generic-service ; Inherit values from a template_name at9924_description Port 4 Bandwidth Usage ur39a_command traffic_average!/var/www/mrtg/AT-9924/192.168.10.101_4.log!AVG!80000000,90000000!100000000,120000000!10_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
<…>
/etc/nagios3/objects/routers/router_len58a.cfg
host{linux-server_name router_len58aLenina 58a Router192.168.10.158des3627g_period 24x7_options d,u,r,f_interval 30_groups admins_enabled 1
}service{local-service ; Name of service template to use_name router_len58a_description PING_command check_ping!100.0,20%!500.0,60%_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service; Inherit values from a template_name router_len58a_description Uptime_command check_netapp_uptime
}
service{generic-service_name router_len58a_description CPU Load_command check_nrpe_1arg!check_load_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}service{generic-service_name router_len58a_description / Free Space_command check_nrpe_1arg!check_disk1_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name router_len58a_description Total Processes_command check_nrpe_1arg!check_total_procs_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name router_len58a_description Zombie Processes_command check_nrpe_1arg!check_zombie_procs_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service_name router_len58a_description Memory Usage_command check_snmp_mem_v1!public!85,70!90,90_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service; Inherit values from a template_name router_len58a_description DNS_command check_dns
}
/etc/nagios3/objects/routers/des3627g.cfg
host{generic-switch ; Inherit default values from a template_name des3627g ; The name we're giving to this switchD-Link DES-3627G ; A longer name associated with the switch192.168.10.111 ; IP address of the switchrouters ; Host groups this switch is associated with_period 24x7_options d,u,f,r_interval 30_groups admins_enabled 1
}
# Create a service to PING to switch
service{generic-service ; Inherit values from a template_name des3627g ; The name of the host the service is associated with_description PING ; The service description_command check_ping!200.0,20%!600.0,60% ; The command used to monitor the service_check_interval 5 ; Check the service every 5 minutes under normal conditions_check_interval 1 ; Re-check the service every minute until its final/hard state is determined_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
# Monitor uptime via SNMPservice{generic-service ; Inherit values from a template_name des3627g_description Uptime_command check_netapp_uptime
}
# Monitor Ports status via SNMP
service{generic-service ; Inherit values from a template_name des3627g_description Port 1 Link Status_command check_snmp!public!ifOperStatus.1! -m RFC1213-MIB
}
service{generic-service ; Inherit values from a template_name des3627g_description Port 2 Link Status_command check_snmp!public!ifOperStatus.2! -m RFC1213-MIB
}
service{generic-service ; Inherit values from a template_name des3627g_description Port 3 Link Status_command check_snmp!public!ifOperStatus.3! -m RFC1213-MIB
}
service{generic-service ; Inherit values from a template_name des3627g_description Port 4 Link Status_command check_snmp!public!ifOperStatus.4! -m RFC1213-MIB
}
service{generic-service ; Inherit values from a template_name des3627g_description Port 5 Link Status_command check_snmp!public!ifOperStatus.5! -m RFC1213-MIB
}
service{generic-service ; Inherit values from a template_name des3627g_description Port 6 Link Status_command check_snmp!public!ifOperStatus.6! -m RFC1213-MIB
}
service{generic-service ; Inherit values from a template_name des3627g_description Port 7 Link Status_command check_snmp!public!ifOperStatus.7! -m RFC1213-MIB
}
service{generic-service ; Inherit values from a template_name des3627g_description Port 8 Link Status_command check_snmp!public!ifOperStatus.8! -m RFC1213-MIB
}
service{generic-service ; Inherit values from a template_name des3627g_description Port 9 Link Status_command check_snmp!public!ifOperStatus.9! -m RFC1213-MIB
}
service{generic-service ; Inherit values from a template_name des3627g_description Port 10 Link Status_command check_snmp!public!ifOperStatus.10! -m RFC1213-MIB
}
service{generic-service ; Inherit values from a template_name des3627g_description Port 11 Link Status_command check_snmp!public!ifOperStatus.11! -m RFC1213-MIB
}
service{generic-service ; Inherit values from a template_name des3627g_description Port 12 Link Status ugmk-router_command check_snmp!public!ifOperStatus.12! -m RFC1213-MIB
}
service{generic-service ; Inherit values from a template_name des3627g_description Port 21 Link Status_command check_snmp!public!ifOperStatus.21! -m RFC1213-MIB
}
service{generic-service ; Inherit values from a template_name des3627g_description Port 22 Link Status_command check_snmp!public!ifOperStatus.22! -m RFC1213-MIB
}
service{generic-service ; Inherit values from a template_name des3627g_description Port 23 Link Status_command check_snmp!public!ifOperStatus.23! -m RFC1213-MIB
}
# Monitor bandwidth via MRTG logs
service{generic-service ; Inherit values from a template_name des3627g_description Port 1 Bandwidth Usage_command traffic_average!/var/www/mrtg/DES-3627G/192.168.10.111_1.log!AVG!80000000,90000000!100000000,120000000!10_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service ; Inherit values from a template_name des3627g_description Port 2 Bandwidth Usage_command traffic_average!/var/www/mrtg/DES-3627G/192.168.10.111_2.log!AVG!80000000,90000000!100000000,120000000!10_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service ; Inherit values from a template_name des3627g_description Port 3 Bandwidth Usage_command traffic_average!/var/www/mrtg/DES-3627G/192.168.10.111_3.log!AVG!80000000,90000000!100000000,120000000!10_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service ; Inherit values from a template_name des3627g_description Port 4 Bandwidth Usage_command traffic_average!/var/www/mrtg/DES-3627G/192.168.10.111_4.log!AVG!80000000,90000000!100000000,120000000!10_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service ; Inherit values from a template_name des3627g_description Port 5 Bandwidth Usage_command traffic_average!/var/www/mrtg/DES-3627G/192.168.10.111_5.log!AVG!80000000,90000000!100000000,120000000!10_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service ; Inherit values from a template_name des3627g_description Port 6 Bandwidth Usage_command traffic_average!/var/www/mrtg/DES-3627G/192.168.10.111_6.log!AVG!80000000,90000000!100000000,120000000!10_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service ; Inherit values from a template_name des3627g_description Port 8 Bandwidth Usage_command traffic_average!/var/www/mrtg/DES-3627G/192.168.10.111_8.log!AVG!80000000,90000000!100000000,120000000!10_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service ; Inherit values from a template_name des3627g_description Port 9 Bandwidth Usage_command traffic_average!/var/www/mrtg/DES-3627G/192.168.10.111_9.log!AVG!80000000,90000000!100000000,120000000!10_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service ; Inherit values from a template_name des3627g_description Port 10 Bandwidth Usage_command traffic_average!/var/www/mrtg/DES-3627G/192.168.10.111_10.log!AVG!80000000,90000000!100000000,120000000!10_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}service{generic-service ; Inherit values from a template_name des3627g_description Port 11 Bandwidth Usage_command traffic_average!/var/www/mrtg/DES-3627G/192.168.10.111_11.log!AVG!80000000,90000000!100000000,120000000!10_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service ; Inherit values from a template_name des3627g_description Port 12 Bandwidth Usage_command traffic_average!/var/www/mrtg/DES-3627G/192.168.10.111_12.log!AVG!80000000,90000000!100000000,120000000!10_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service ; Inherit values from a template_name des3627g_description Port 21 Bandwidth Usage_command traffic_average!/var/www/mrtg/DES-3627G/192.168.10.111_21.log!AVG!80000000,90000000!100000000,120000000!10_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service ; Inherit values from a template_name des3627g_description Port 22 Bandwidth Usage_command traffic_average!/var/www/mrtg/DES-3627G/192.168.10.111_22.log!AVG!80000000,90000000!100000000,120000000!10_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
service{generic-service ; Inherit values from a template_name des3627g_description Port 23 Bandwidth Usage_command traffic_average!/var/www/mrtg/DES-3627G/192.168.10.111_23.log!AVG!80000000,90000000!100000000,120000000!10_period 24x7_options w,c,r_interval 30_groups admins_enabled 1
}
/etc/nagios/nrpe.cfg
#############################################################################
# This is configuration file for the NRPE daemon. It needs to be
# located on the remote host that is running the NRPE daemon, not the host
# from which the check_nrpe client is being executed.
#############################################################################
# PID FILE
# The name of the file in which the NRPE daemon should write it's process ID
# number. The file is only written if the NRPE daemon is started by the root
# user and is running in standalone mode.
_file=/var/run/nrpe.pid
# PORT NUMBER
# Port number we should wait for connections on.
# NOTE: This must be a non-priviledged port (i.e. > 1024).
# NOTE: This option is ignored if NRPE is running under either inetd or xinetd
_port=5666
# SERVER ADDRESS
# Address that nrpe should bind to in case there are more than one interface
# and you do not want nrpe to bind on all interfaces.
# NOTE: This option is ignored if NRPE is running under either inetd or xinetd
_address=192.168.10.214
# NRPE USER
# This determines the effective user that the NRPE daemon should run as.
# You can either supply a username or a UID.
#
# NOTE: This option is ignored if NRPE is running under either inetd or xinetd
_user=nagios
# NRPE GROUP
# This determines the effective group that the NRPE daemon should run as.
# You can either supply a group name or a GID.
#
# NOTE: This option is ignored if NRPE is running under either inetd or xinetd_group=nagios
# ALLOWED HOST ADDRESSES
# This is an optional comma-delimited list of IP address or hostnames
# that are allowed to talk to the NRPE daemon.
#
# Note: The daemon only does rudimentary checking of the client's IP
# address. I would highly recommend adding entries in your /etc/hosts.allow
# file to allow only the specified host to connect to the port
# you are running this daemon on.
#
# NOTE: This option is ignored if NRPE is running under either inetd or xinetd
_hosts=127.0.0.1,192.168.10.2
# COMMAND ARGUMENT PROCESSING
# This option determines whether or not the NRPE daemon will allow clients
# to specify arguments to commands that are executed. This option only works
# if the daemon was configured with the --enable-command-args configure script
# option.
#
# *** ENABLING THIS OPTION IS A SECURITY RISK! ***
# Read the SECURITY file for information on some of the security implications
# of enabling this variable.
#
# Values: 0=do not allow arguments, 1=allow command arguments_blame_nrpe=0
# COMMAND PREFIX
# This option allows you to prefix all commands with a user-defined string.
# A space is automatically added between the specified prefix string and the
# command line from the command definition.
#
# *** THIS EXAMPLE MAY POSE A POTENTIAL SECURITY RISK, SO USE WITH CAUTION! ***
# Usage scenario:
# Execute restricted commmands using sudo. For this to work, you need to add
# the nagios user to your /etc/sudoers. An example entry for alllowing
# execution of the plugins from might be:
#
# nagios ALL=(ALL) NOPASSWD: /usr/lib/nagios/plugins/
#
# This lets the nagios user run all commands in that directory (and only them)
# without asking for a password. If you do this, make sure you don't give
# random users write access to that directory or its contents!
# command_prefix=/usr/bin/sudo
# DEBUGGING OPTION
# This option determines whether or not debugging messages are logged to the
# syslog facility.
# Values: 0=debugging off, 1=debugging on
=0
# COMMAND TIMEOUT
# This specifies the maximum number of seconds that the NRPE daemon will
# allow plugins to finish executing before killing them off.
_timeout=60
# WEEK RANDOM SEED OPTION
# This directive allows you to use SSL even if your system does not have
# a /dev/random or /dev/urandom (on purpose or because the necessary patches
# were not applied). The random number generator will be seeded from a file
# which is either a file pointed to by the environment valiable $RANDFILE
# or $HOME/.rnd. If neither exists, the pseudo random number generator will
# be initialized and a warning will be issued.
# Values: 0=only seed from /dev/[u]random, 1=also seed from weak randomness
#allow_weak_random_seed=1
# INCLUDE CONFIG FILE
# This directive allows you to include definitions from an external config file.
#include=<somefile.cfg>
# INCLUDE CONFIG DIRECTORY
# This directive allows you to include definitions from config files (with a
# .cfg extension) in one or more directories (with recursion).
#include_dir=<somedirectory>
#include_dir=<someotherdirectory>
# COMMAND DEFINITIONS
# Command definitions that this daemon will run. Definitions
# are in the following format:
#
# command[<command_name>]=<command_line>
#
# When the daemon receives a request to return the results of <command_name>
# it will execute the command specified by the <command_line> argument.
#
# Unlike Nagios, the command line cannot contain macros - it must be
# typed exactly as it should be executed.
#
# Note: Any plugins that are used in the command lines must reside
# on the machine that this daemon is running on! The examples below
# assume that you have plugins installed in a /usr/local/nagios/libexec
# directory. Also note that you will have to modify the definitions below
# to match the argument format the plugins expect. Remember, these are
# examples only!
# The following examples use hardcoded command arguments...
[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20[check_disk1]=/usr/lib/nagios/plugins/check_disk -w 20 -c 10 -p /dev/md1[check_disk2]=/usr/lib/nagios/plugins/check_disk -w 20 -c 10 -p /dev/md3[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 17000 -c 18000 -s Z[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 17000 -c 20000[check_swap]=/usr/lib/nagios/plugins/check_swap -w 20 -c 10[check_raid]=/usr/lib/nagios/plugins/check_linux_raid md1
# The following examples allow user-supplied arguments and can
# only be used if the NRPE daemon was compiled with support for
# command arguments *AND* the dont_blame_nrpe directive in this
# config file is set to '1'...
#command[check_users]=/usr/lib/nagios/plugins/check_users -w $ARG1$ -c $ARG2$
#command[check_load]=/usr/lib/nagios/plugins/check_load -w $ARG1$ -c $ARG2$
#command[check_disk]=/usr/lib/nagios/plugins/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
#command[check_procs]=/usr/lib/nagios/plugins/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$
#
# local configuration:
# if you'd prefer, you can instead place directives here=/etc/nagios/nrpe_local.cfg
Приложение И
Исходные тексты плагинов, не идущих в поставке с пакетом ядра системы.
/usr/lib/nagios/plugins/check_snmp_load.pl
#!/usr/bin/perl -w
# nagios: -epn
############################## check_snmp_load #################$Version='1.12';
#
# Help : ./check_snmp_load.pl -h
#
strict;Net::SNMP;Getopt::Long;
# Nagios specific
$TIMEOUT = 15;%ERRORS=('OK'=>0,'WARNING'=>1,'CRITICAL'=>2,'UNKNOWN'=>3,'DEPENDENT'=>4);
# SNMP Datas
# Generic with host-ressource-mib$base_proc = "1.3.6.1.2.1.25.3.3.1"; # oid for all proc info$proc_id = "1.3.6.1.2.1.25.3.3.1.1"; # list of processors (product ID)$proc_load = "1.3.6.1.2.1.25.3.3.1.2"; # %time the proc was not idle over last minute
# Linux load
$linload_table= "1.3.6.1.4.1.2021.10.1"; # net-snmp load table$linload_name = "1.3.6.1.4.1.2021.10.1.2"; # text 'Load-1','Load-5', 'Load-15'$linload_load = "1.3.6.1.4.1.2021.10.1.3"; # effective load table
# Cisco cpu/load
$cisco_cpu_5m = "1.3.6.1.4.1.9.2.1.58.0"; # Cisco CPU load (5min %)$cisco_cpu_1m = "1.3.6.1.4.1.9.2.1.57.0"; # Cisco CPU load (1min %)$cisco_cpu_5s = "1.3.6.1.4.1.9.2.1.56.0"; # Cisco CPU load (5sec %)
# Cisco catalyst cpu/load
$ciscocata_cpu_5m = ".1.3.6.1.4.1.9.9.109.1.1.1.1.5.9"; # Cisco CPU load (5min %)$ciscocata_cpu_1m = ".1.3.6.1.4.1.9.9.109.1.1.1.1.3.9"; # Cisco CPU load (1min %)$ciscocata_cpu_5s = ".1.3.6.1.4.1.9.9.109.1.1.1.1.4.9"; # Cisco CPU load (5sec %)
# Netscreen cpu/load
$nsc_cpu_5m = "1.3.6.1.4.1.3224.16.1.4.0"; # NS CPU load (5min %)$nsc_cpu_1m = "1.3.6.1.4.1.3224.16.1.2.0"; # NS CPU load (1min %)$nsc_cpu_5s = "1.3.6.1.4.1.3224.16.1.3.0"; # NS CPU load (5sec %)
# AS/400 CPU
$as400_cpu = "1.3.6.1.4.1.2.6.4.5.1.0"; # AS400 CPU load (10000=100%);
# Net-SNMP CPU
$ns_cpu_idle = "1.3.6.1.4.1.2021.11.11.0"; # Net-snmp cpu idle$ns_cpu_user = "1.3.6.1.4.1.2021.11.9.0"; # Net-snmp user cpu usage$ns_cpu_system = "1.3.6.1.4.1.2021.11.10.0"; # Net-snmp system cpu usage
# Procurve CPU$procurve_cpu = "1.3.6.1.4.1.11.2.14.11.5.1.9.6.1.0"; # Procurve CPU Counter
# Nokia CPU$nokia_cpu = "1.3.6.1.4.1.94.1.21.1.7.1.0"; # Nokia CPU % usage
# Bluecoat Appliance$bluecoat_cpu = "1.3.6.1.4.1.3417.2.4.1.1.1.4.1"; # Bluecoat %cpu usage.
# Fortigate CPU$fortigate_cpu = ".1.3.6.1.4.1.12356.1.8.0"; # Fortigate CPU % usage
# Linkproof Appliance$linkproof_cpu= "1.3.6.1.4.1.89.35.1.55.0"; # CPU RE (Routing Engine Tasks)
# 1.3.6.1.4.1.89.35.1.53.0 : Ressource utilisation (%) Considers network utilization and internal CPU utilization
# 1.3.6.1.4.1.89.35.1.54 : CPU only (%)
# 1.3.6.1.4.1.89.35.1.55 : network only (%)
# HP-UX cpu usage (thanks to krizb for the OIDs).$hpux_load_1_min="1.3.6.1.4.1.11.2.3.1.1.3.0";$hpux_load_5_min="1.3.6.1.4.1.11.2.3.1.1.4.0";$hpux_load_15_min="1.3.6.1.4.1.11.2.3.1.1.5.0";
# valid values@valid_types = ("stand","netsc","netsl","as400","cisco","cata","nsc","fg","bc","nokia","hp","lp","hpux");
# CPU OID array%cpu_oid = ("netsc",$ns_cpu_idle,"as400",$as400_cpu,"bc",$bluecoat_cpu,"nokia",$nokia_cpu,"hp",$procurve_cpu,"lp",$linkproof_cpu,"fg",$fortigate_cpu);
# Globals
$o_host = undef; # hostname$o_community = undef; # community$o_port = 161; # port$o_help= undef; # wan't some help ?$o_verb= undef; # verbose mode$o_version= undef; # print version
# check type : stand | netsc | netsl | as400 | cisco | cata | nsc | fg | bc | nokia | hp | lp | hpux$o_check_type= "stand";
# End compatibility$o_warn= undef; # warning level@o_warnL= undef; # warning levels for Linux Load or Cisco CPU$o_crit= undef; # critical level@o_critL= undef; # critical level for Linux Load or Cisco CPU$o_timeout= undef; # Timeout (Default 5)$o_perf= undef; # Output performance data$o_version2= undef; # use snmp v2c
# SNMPv3 specific$o_login= undef; # Login for snmpv3$o_passwd= undef; # Pass for snmpv3$v3protocols=undef; # V3 protocol list.$o_authproto='md5'; # Auth protocol$o_privproto='des'; # Priv protocol$o_privpass= undef; # priv password
# functions
p_version { print "check_snmp_load version : $Version\n"; }
print_usage {"Usage: $0 [-v] -H <host> -C <snmp_community> [-2] | (-l login -x passwd [-X pass -L <authp>,<privp>]) [-p <port>] -w <warn level> -c <crit level> -T=[stand|netsl|netsc|as400|cisco|cata|nsc|fg|bc|nokia|hp|lp|hpux] [-f] [-t <timeout>] [-V]\n";
}
isnnum { # Return true if arg is not a number$num = shift;( $num =~ /^(\d+\.?\d*)|(^\.\d+)$/ ) { return 0 ;}1;
}
help {"\nSNMP Load & CPU Monitor for Nagios version ",$Version,"\n";"GPL licence, (c)2004-2007 Patrick Proy\n\n";_usage();<<EOT;
v, --verboseextra debugging information
h, --helpthis help message
H, --hostname=HOSTor IP address of host to check
C, --community=COMMUNITY NAMEname for the host's SNMP agent (implies v1 protocol)
, --v2csnmp v2c
l, --login=LOGIN ; -x, --passwd=PASSWDand auth password for snmpv3 authenticationno priv password exists, implies AuthNoPriv
X, --privpass=PASSWDpassword for snmpv3 (AuthPriv protocol)
L, --protocols=<authproto>,<privproto>
<authproto> : Authentication protocol (md5|sha : default md5)
<privproto> : Priv protocole (des|aes : default des)
P, --port=PORTport (Default 161)
w, --warn=INTEGER | INT,INT,INT
value check : warning level for cpu in percent (on one minute)
value check : comma separated level for load or cpu for 1min, 5min, 15min
c, --crit=INTEGER | INT,INT,INTlevel for cpu in percent (on one minute)
value check : critical level for cpu in percent (on one minute)
value check : comma separated level for load or cpu for 1min, 5min, 15min
T, --type=stand|netsl|netsc|as400|cisco|bc|nokia|hp|lpcheck :: standard MIBII (works with Windows),handle multiple CPU.: linux load provided by Net SNMP (1,5 & 15 minutes values): cpu usage given by net-snmp (100-idle): as400 CPU usage: Cisco CPU usage: Cisco catalyst CPU usage: NetScreen CPU usage: Fortigate CPU usage: Bluecoat CPU usage: Nokia CPU usage: HP procurve switch CPU usage: Linkproof CPU usage: HP-UX load (1,5 & 15 minutes values)
f, --perfparsecompatible output
t, --timeout=INTEGERfor SNMP in seconds (Default: 5)
V, --versionversion number
}
# For verbose outputverb { my $t=shift; print $t,"\n" if defined($o_verb) ; }
check_options {::Long::Configure ("bundling");(
'v' => \$o_verb, 'verbose' => \$o_verb,
'h' => \$o_help, 'help' => \$o_help,
'H:s' => \$o_host, 'hostname:s' => \$o_host,
'p:i' => \$o_port, 'port:i' => \$o_port,
'C:s' => \$o_community, 'community:s' => \$o_community,
'l:s' => \$o_login, 'login:s' => \$o_login,
'x:s' => \$o_passwd, 'passwd:s' => \$o_passwd,
'X:s' => \$o_privpass, 'privpass:s' => \$o_privpass,
'L:s' => \$v3protocols, 'protocols:s' => \$v3protocols,
't:i' => \$o_timeout, 'timeout:i' => \$o_timeout,
'V' => \$o_version, 'version' => \$o_version,
'2' => \$o_version2, 'v2c' => \$o_version2,
'c:s' => \$o_crit, 'critical:s' => \$o_crit,
'w:s' => \$o_warn, 'warn:s' => \$o_warn,
'f' => \$o_perf, 'perfparse' => \$o_perf,
'T:s' => \$o_check_type, 'type:s' => \$o_check_type
);
# check the -T option$T_option_valid=0;(@valid_types) { if ($_ eq $o_check_type) {$T_option_valid=1} };( $T_option_valid == 0 )
{print "Invalid check type (-T)!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}}
# Basic checks(defined($o_timeout) && (isnnum($o_timeout) || ($o_timeout < 2) || ($o_timeout > 60)))
{ print "Timeout must be >1 and <60 !\n"; print_usage(); exit $ERRORS{"UNKNOWN"}}(!defined($o_timeout)) {$o_timeout=5;}(defined ($o_help) ) { help(); exit $ERRORS{"UNKNOWN"}};(defined($o_version)) { p_version(); exit $ERRORS{"UNKNOWN"}};( ! defined($o_host) ) # check host and filter
{ print_usage(); exit $ERRORS{"UNKNOWN"}}
# check snmp information( !defined($o_community) && (!defined($o_login) || !defined($o_passwd)) )
{ print "Put snmp login info!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}}((defined($o_login) || defined($o_passwd)) && (defined($o_community) || defined($o_version2)) )
{ print "Can't mix snmp v1,2c,3 protocols!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}}(defined ($v3protocols)) {(!defined($o_login)) { print "Put snmp V3 login info with protocols!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}}@v3proto=split(/,/,$v3protocols);((defined ($v3proto[0])) && ($v3proto[0] ne "")) {$o_authproto=$v3proto[0]; } # Auth protocol(defined ($v3proto[1])) {$o_privproto=$v3proto[1]; } # Priv protocol((defined ($v3proto[1])) && (!defined($o_privpass))) {"Put snmp V3 priv login info with priv protocols!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}}
}
# Check warnings and critical(!defined($o_warn) || !defined($o_crit))
{ print "put warning and critical info!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}}
# Get rid of % sign
$o_warn =~ s/\%//g;
$o_crit =~ s/\%//g;
# Check for multiple warning and crit in case of -L(($o_check_type eq "netsl") || ($o_check_type eq "cisco") || ($o_check_type eq "cata") ||
($o_check_type eq "nsc") || ($o_check_type eq "hpux")) {
@o_warnL=split(/,/ , $o_warn);
@o_critL=split(/,/ , $o_crit);(($#o_warnL != 2) || ($#o_critL != 2))
{ print "3 warnings and critical !\n";print_usage(); exit $ERRORS{"UNKNOWN"}}(my $i=0;$i<3;$i++) {( isnnum($o_warnL[$i]) || isnnum($o_critL[$i]))
{ print "Numeric value for warning or critical !\n";print_usage(); exit $ERRORS{"UNKNOWN"}}($o_warnL[$i] > $o_critL[$i])
{ print "warning <= critical ! \n";print_usage(); exit $ERRORS{"UNKNOWN"}}
}
} else {(($o_warn =~ /,/) || ($o_crit =~ /,/)) {
{ print "Multiple warning/critical levels not available for this check\n";print_usage(); exit $ERRORS{"UNKNOWN"}}
}( isnnum($o_warn) || isnnum($o_crit) )
{ print "Numeric value for warning or critical !\n";print_usage(); exit $ERRORS{"UNKNOWN"}}($o_warn > $o_crit)
{ print "warning <= critical ! \n";print_usage(); exit $ERRORS{"UNKNOWN"}}
}
}
########## MAIN #######
_options();
# Check gobal timeout if snmp screws up(defined($TIMEOUT)) {("Alarm at $TIMEOUT + 5");($TIMEOUT+5);
} else {("no global timeout defined : $o_timeout + 10");($o_timeout+10);
}
$SIG{'ALRM'} = sub {"No answer from host\n";$ERRORS{"UNKNOWN"};
};
# Connect to host($session,$error);( defined($o_login) && defined($o_passwd)) {
# SNMPv3 login("SNMPv3 login");(!defined ($o_privpass)) {("SNMPv3 AuthNoPriv login : $o_login, $o_authproto");
($session, $error) = Net::SNMP->session(
hostname => $o_host,
version => '3',
username => $o_login,
authpassword => $o_passwd,
authprotocol => $o_authproto,
timeout => $o_timeout
);
} else {("SNMPv3 AuthPriv login : $o_login, $o_authproto, $o_privproto");
($session, $error) = Net::SNMP->session(
hostname => $o_host,
version => '3',
username => $o_login,
authpassword => $o_passwd,
authprotocol => $o_authproto,
privpassword => $o_privpass,
privprotocol => $o_privproto,
timeout => $o_timeout
);
}
} else {(defined ($o_version2)) {
# SNMPv2 Login("SNMP v2c login");
($session, $error) = Net::SNMP->session(
hostname => $o_host,
version => 2,
community => $o_community,
port => $o_port,
timeout => $o_timeout
);
} else {
# SNMPV1 login("SNMP v1 login");
($session, $error) = Net::SNMP->session(
hostname => $o_host,
community => $o_community,
port => $o_port,
timeout => $o_timeout
);
}
}(!defined($session)) {("ERROR opening session: %s.\n", $error);$ERRORS{"UNKNOWN"};
}
$exit_val=undef;
########### Linux load check ##############
($o_check_type eq "netsl") {
("Checking linux load");
# Get load table$resultat = (Net::SNMP->VERSION < 4) ?
$session->get_table($linload_table)
: $session->get_table(Baseoid => $linload_table);
(!defined($resultat)) {("ERROR: Description table : %s.\n", $session->error);
$session->close;$ERRORS{"UNKNOWN"};
}
$session->close;
@load = undef;@iload = undef;@oid=undef;$exist=0;my $key ( keys %$resultat) {("OID : $key, Desc : $$resultat{$key}");( $key =~ /$linload_name/ ) {
@oid=split (/\./,$key);
$iload[0]= pop(@oid) if ($$resultat{$key} eq "Load-1");
$iload[1]= pop(@oid) if ($$resultat{$key} eq "Load-5");
$iload[2]= pop(@oid) if ($$resultat{$key} eq "Load-15");
$exist=1
}
}
($exist == 0) {"Can't find snmp information on load : UNKNOWN\n";$ERRORS{"UNKNOWN"};
}
(my $i=0;$i<3;$i++) { $load[$i] = $$resultat{$linload_load . "." . $iload[$i]}};
"Load : $load[0] $load[1] $load[2] :";
$exit_val=$ERRORS{"OK"};(my $i=0;$i<3;$i++) {( $load[$i] > $o_critL[$i] ) {" $load[$i] > $o_critL[$i] : CRITICAL";
$exit_val=$ERRORS{"CRITICAL"};
}( $load[$i] > $o_warnL[$i] ) {
# output warn error only if no critical was found($exit_val eq $ERRORS{"OK"}) {" $load[$i] > $o_warnL[$i] : WARNING";
$exit_val=$ERRORS{"WARNING"};
}
}
}" OK" if ($exit_val eq $ERRORS{"OK"});(defined($o_perf)) {" | load_1_min=$load[0];$o_warnL[0];$o_critL[0] ";"load_5_min=$load[1];$o_warnL[1];$o_critL[1] ";"load_15_min=$load[2];$o_warnL[2];$o_critL[2]\n";
} else {"\n";
}$exit_val;
}
############## Cisco CPU check ################
($o_check_type eq "cisco") {@oidlists = ($cisco_cpu_5m, $cisco_cpu_1m, $cisco_cpu_5s);$resultat = (Net::SNMP->VERSION < 4) ?
$session->get_request(@oidlists)
: $session->get_request(-varbindlist => \@oidlists);
(!defined($resultat)) {("ERROR: Description table : %s.\n", $session->error);
$session->close;$ERRORS{"UNKNOWN"};
}
$session->close;
(!defined ($$resultat{$cisco_cpu_5s})) {"No CPU information : UNKNOWN\n";$ERRORS{"UNKNOWN"};
}
@load = undef;
$load[0]=$$resultat{$cisco_cpu_5s};
$load[1]=$$resultat{$cisco_cpu_1m};
$load[2]=$$resultat{$cisco_cpu_5m};
"CPU : $load[0] $load[1] $load[2] :";
$exit_val=$ERRORS{"OK"};(my $i=0;$i<3;$i++) {( $load[$i] > $o_critL[$i] ) {" $load[$i] > $o_critL[$i] : CRITICAL";
$exit_val=$ERRORS{"CRITICAL"};
}( $load[$i] > $o_warnL[$i] ) {
# output warn error only if no critical was found($exit_val eq $ERRORS{"OK"}) {" $load[$i] > $o_warnL[$i] : WARNING";
$exit_val=$ERRORS{"WARNING"};
}
}
}" OK" if ($exit_val eq $ERRORS{"OK"});(defined($o_perf)) {" | load_5_sec=$load[0]%;$o_warnL[0];$o_critL[0] ";"load_1_min=$load[1]%;$o_warnL[1];$o_critL[1] ";"load_5_min=$load[2]%;$o_warnL[2];$o_critL[2]\n";
} else {"\n";
}
$exit_val;
}
############## Cisco Catalyst CPU check ################
($o_check_type eq "cata") {@oidlists = ($ciscocata_cpu_5m, $ciscocata_cpu_1m, $ciscocata_cpu_5s);$resultat = (Net::SNMP->VERSION < 4) ?
$session->get_request(@oidlists)
: $session->get_request(-varbindlist => \@oidlists);
(!defined($resultat)) {("ERROR: Description table : %s.\n", $session->error);
$session->close;$ERRORS{"UNKNOWN"};
}
$session->close;
(!defined ($$resultat{$ciscocata_cpu_5s})) {"No CPU information : UNKNOWN\n";$ERRORS{"UNKNOWN"};
}
@load = undef;
$load[0]=$$resultat{$ciscocata_cpu_5s};
$load[1]=$$resultat{$ciscocata_cpu_1m};
$load[2]=$$resultat{$ciscocata_cpu_5m};
"CPU : $load[0] $load[1] $load[2] :";
$exit_val=$ERRORS{"OK"};(my $i=0;$i<3;$i++) {( $load[$i] > $o_critL[$i] ) {" $load[$i] > $o_critL[$i] : CRITICAL";
$exit_val=$ERRORS{"CRITICAL"};
}( $load[$i] > $o_warnL[$i] ) {
# output warn error only if no critical was found($exit_val eq $ERRORS{"OK"}) {" $load[$i] > $o_warnL[$i] : WARNING";
$exit_val=$ERRORS{"WARNING"};
}
}
}" OK" if ($exit_val eq $ERRORS{"OK"});(defined($o_perf)) {" | load_5_sec=$load[0]%;$o_warnL[0];$o_critL[0] ";"load_1_min=$load[1]%;$o_warnL[1];$o_critL[1] ";"load_5_min=$load[2]%;$o_warnL[2];$o_critL[2]\n";
} else {"\n";
}
$exit_val;
}
############## Netscreen CPU check ################
($o_check_type eq "nsc") {@oidlists = ($nsc_cpu_5m, $nsc_cpu_1m, $nsc_cpu_5s);$resultat = (Net::SNMP->VERSION < 4) ?
$session->get_request(@oidlists)
: $session->get_request(-varbindlist => \@oidlists);(!defined($resultat)) {("ERROR: Description table : %s.\n", $session->error);
$session->close;$ERRORS{"UNKNOWN"};
}
$session->close;
(!defined ($$resultat{$nsc_cpu_5s})) {"No CPU information : UNKNOWN\n";$ERRORS{"UNKNOWN"};
}
@load = undef;
$load[0]=$$resultat{$nsc_cpu_5s};
$load[1]=$$resultat{$nsc_cpu_1m};
$load[2]=$$resultat{$nsc_cpu_5m};
"CPU : $load[0] $load[1] $load[2] :";
$exit_val=$ERRORS{"OK"};(my $i=0;$i<3;$i++) {( $load[$i] > $o_critL[$i] ) {" $load[$i] > $o_critL[$i] : CRITICAL";
$exit_val=$ERRORS{"CRITICAL"};
}( $load[$i] > $o_warnL[$i] ) {
# output warn error only if no critical was found($exit_val eq $ERRORS{"OK"}) {" $load[$i] > $o_warnL[$i] : WARNING";
$exit_val=$ERRORS{"WARNING"};
}
}
}" OK" if ($exit_val eq $ERRORS{"OK"});(defined($o_perf)) {" | cpu_5_sec=$load[0]%;$o_warnL[0];$o_critL[0] ";"cpu_1_min=$load[1]%;$o_warnL[1];$o_critL[1] ";"cpu_5_min=$load[2]%;$o_warnL[2];$o_critL[2]\n";
} else {"\n";
}
$exit_val;
}
################## CPU for : AS/400 , Netsnmp, HP, Bluecoat, linkproof, fortigate ###########( $o_check_type =~ /netsc|as400|bc|nokia|^hp$|lp|fg/ ) {
# Get load table@oidlist = $cpu_oid{$o_check_type};("Checking OID : @oidlist");$resultat = (Net::SNMP->VERSION < 4) ?
$session->get_request(@oidlist)
: $session->get_request(-varbindlist => \@oidlist);(!defined($resultat)) {("ERROR: Description table : %s.\n", $session->error);
$session->close;$ERRORS{"UNKNOWN"};
}
$session->close;
(!defined ($$resultat{$cpu_oid{$o_check_type}})) {"No CPU information : UNKNOWN\n";$ERRORS{"UNKNOWN"};
}
$load=$$resultat{$cpu_oid{$o_check_type}};("OID returned $load");
# for AS400, divide by 100($o_check_type eq "as400") {$load /= 100; };
# for Net-snmp : oid returned idle time so load = 100-idle.($o_check_type eq "netsc") {$load = 100 - $load; };
("CPU used %.1f%% (",$load);
$exit_val=$ERRORS{"OK"};($load > $o_crit) {">$o_crit) : CRITICAL";
$exit_val=$ERRORS{"CRITICAL"};
} else {($load > $o_warn) {">$o_warn) : WARNING";
$exit_val=$ERRORS{"WARNING"};
}
}"<$o_warn) : OK" if ($exit_val eq $ERRORS{"OK"});
(defined($o_perf)) ?" | cpu_prct_used=$load%;$o_warn;$o_crit\n"
: print "\n";$exit_val;
}
##### Checking hpux load($o_check_type eq "hpux") {
("Checking hpux load");
@oidlists = ($hpux_load_1_min, $hpux_load_5_min, $hpux_load_15_min);$resultat = (Net::SNMP->VERSION < 4) ?
$session->get_request(@oidlists)
: $session->get_request(-varbindlist => \@oidlists);
(!defined($resultat)) {("ERROR: Load table : %s.\n", $session->error);
$session->close;$ERRORS{"UNKNOWN"};
}
$session->close;
(!defined ($$resultat{$hpux_load_1_min})) {"No Load information : UNKNOWN\n";$ERRORS{"UNKNOWN"};
}
@load = undef;
$load[0]=$$resultat{$hpux_load_1_min}/100;
$load[1]=$$resultat{$hpux_load_5_min}/100;
$load[2]=$$resultat{$hpux_load_15_min}/100;
"Load : $load[0] $load[1] $load[2] :";
$exit_val=$ERRORS{"OK"};(my $i=0;$i<3;$i++) {( $load[$i] > $o_critL[$i] ) {" $load[$i] > $o_critL[$i] : CRITICAL";
$exit_val=$ERRORS{"CRITICAL"};
}( $load[$i] > $o_warnL[$i] ) {
# output warn error only if no critical was found($exit_val eq $ERRORS{"OK"}) {" $load[$i] > $o_warnL[$i] : WARNING";
$exit_val=$ERRORS{"WARNING"};
}
}
}" OK" if ($exit_val eq $ERRORS{"OK"});(defined($o_perf)) {" | load_1_min=$load[0]%;$o_warnL[0];$o_critL[0] ";"load_5_min=$load[1]%;$o_warnL[1];$o_critL[1] ";"load_15_min=$load[2]%;$o_warnL[2];$o_critL[2]\n";
} else {"\n";
}
$exit_val;
}
########## Standard cpu usage check ############
# Get desctiption table$resultat = (Net::SNMP->VERSION < 4) ?
$session->get_table($base_proc)
: $session->get_table(Baseoid => $base_proc);
(!defined($resultat)) {("ERROR: Description table : %s.\n", $session->error);
$session->close;$ERRORS{"UNKNOWN"};
}
$session->close;
($cpu_used,$ncpu)=(0,0);my $key ( keys %$resultat) {("OID : $key, Desc : $$resultat{$key}");( $key =~ /$proc_load/) {
$cpu_used += $$resultat{$key};
$ncpu++;
}
}
($ncpu==0) {"Can't find CPU usage information : UNKNOWN\n";$ERRORS{"UNKNOWN"};
}
$cpu_used /= $ncpu;"$ncpu CPU, ", $ncpu==1 ? "load" : "average load";(" %.1f%%",$cpu_used);
$exit_val=$ERRORS{"OK"};
($cpu_used > $o_crit) {" > $o_crit% : CRITICAL";
$exit_val=$ERRORS{"CRITICAL"};
} else {($cpu_used > $o_warn) {" > $o_warn% : WARNING";
$exit_val=$ERRORS{"WARNING"};
}
}" < $o_warn% : OK" if ($exit_val eq $ERRORS{"OK"});
(defined($o_perf)) ?" | cpu_prct_used=$cpu_used%;$o_warn;$o_crit\n"
: print "\n";$exit_val;
/usr/lib/nagios/plugins/check_snmp_mem.pl
#!/usr/bin/perl -w
# nagios: -epn
############################## check_snmp_mem ##############
#
# Help : ./check_snmp_mem.pl -h
#
strict;Net::SNMP;Getopt::Long;
# Nagios specific
lib "/usr/lib/nagios/plugins";utils qw(%ERRORS $TIMEOUT);
#my $TIMEOUT = 15;
#my %ERRORS=('OK'=>0,'WARNING'=>1,'CRITICAL'=>2,'UNKNOWN'=>3,'DEPENDENT'=>4);
# SNMP Datas
# Net-snmp memory
$nets_ram_free = "1.3.6.1.4.1.2021.4.6.0"; # Real memory free$nets_ram_total = "1.3.6.1.4.1.2021.4.5.0"; # Real memory total$nets_ram_cache = "1.3.6.1.4.1.2021.4.15.0"; # Real memory cached$nets_swap_free = "1.3.6.1.4.1.2021.4.4.0"; # swap memory free$nets_swap_total = "1.3.6.1.4.1.2021.4.3.0"; # Swap memory total@nets_oids = ($nets_ram_free,$nets_ram_total,$nets_swap_free,$nets_swap_total,$nets_ram_cache);
# Cisco
$cisco_mem_pool = "1.3.6.1.4.1.9.9.48.1.1.1"; # Cisco memory pool$cisco_index = "1.3.6.1.4.1.9.9.48.1.1.1.2"; # memory pool name and index$cisco_valid = "1.3.6.1.4.1.9.9.48.1.1.1.4"; # Valid memory if 1$cisco_used = "1.3.6.1.4.1.9.9.48.1.1.1.5"; # Used memory$cisco_free = "1.3.6.1.4.1.9.9.48.1.1.1.6"; # Free memory
# .1 : type, .2 : name, .3 : alternate, .4 : valid, .5 : used, .6 : free, .7 : max free
# HP Procurve
$hp_mem_pool = "1.3.6.1.4.1.11.2.14.11.5.1.1.2.2.1.1"; # HP memory pool$hp_mem_index = "1.3.6.1.4.1.11.2.14.11.5.1.1.2.2.1.1.1"; # memory slot index$hp_mem_total = "1.3.6.1.4.1.11.2.14.11.5.1.1.2.2.1.1.5"; # Total Bytes$hp_mem_free = "1.3.6.1.4.1.11.2.14.11.5.1.1.2.2.1.1.6"; # Free Bytes$hp_mem_free_seg = "1.3.6.1.4.1.11.2.14.11.5.1.1.2.2.1.1.3"; # Free segments
# AS/400
# Windows NT/2K/(XP?)
# check_snmp_storage.pl -C <community> -H <hostIP> -m "^Virtual Memory$" -w <warn %> -c <crit %>
# Globals
$Version='1.1';
$o_host = undef; # hostname$o_community = undef; # community$o_port = 161; # port$o_help= undef; # wan't some help ?$o_verb= undef; # verbose mode$o_version= undef; # print version$o_netsnmp= 1; # Check with netsnmp (default)$o_cisco= undef; # Check cisco router mem$o_hp= undef; # Check hp procurve mem$o_warn= undef; # warning level option$o_warnR= undef; # warning level for Real memory$o_warnS= undef; # warning levels for swap$o_crit= undef; # Critical level option$o_critR= undef; # critical level for Real memory$o_critS= undef; # critical level for swap$o_perf= undef; # Performance data option$o_cache= undef; # Include cached memory as used memory$o_timeout= undef; # Timeout (Default 5)$o_version2= undef; # use snmp v2c
# SNMPv3 specific$o_login= undef; # Login for snmpv3$o_passwd= undef; # Pass for snmpv3$v3protocols=undef; # V3 protocol list.$o_authproto='md5'; # Auth protocol$o_privproto='des'; # Priv protocol$o_privpass= undef; # priv password
# functions
p_version { print "check_snmp_mem version : $Version\n"; }
print_usage {"Usage: $0 [-v] -H <host> -C <snmp_community> [-2] | (-l login -x passwd [-X pass -L <authp>,<privp>]) [-p <port>] -w <warn level> -c <crit level> [-I|-N|-E] [-f] [-m] [-t <timeout>] [-V]\n";
}
isnnum { # Return true if arg is not a number$num = shift;( $num =~ /^(\d+\.?\d*)|(^\.\d+)$/ ) { return 0 ;}1;
}
round ($$) {"%.$_[1]f", $_[0];
}
help {"\nSNMP Memory Monitor for Nagios version ",$Version,"\n";"(c)2004-2006 to my cat Ratoune - Author: Patrick Proy\n\n";_usage();<<EOT;
v, --verboseextra debugging information (including interface list on the system)
h, --helpthis help message
H, --hostname=HOSTor IP address of host to check
C, --community=COMMUNITY NAMEname for the host's SNMP agent (implies SNMP v1 or v2c with option)
, --v2csnmp v2c
l, --login=LOGIN ; -x, --passwd=PASSWDand auth password for snmpv3 authenticationno priv password exists, implies AuthNoPriv
X, --privpass=PASSWDpassword for snmpv3 (AuthPriv protocol)
L, --protocols=<authproto>,<privproto>
<authproto> : Authentication protocol (md5|sha : default md5)
<privproto> : Priv protocole (des|aes : default des)
P, --port=PORTport (Default 161)
w, --warn=INTEGER | INT,INTlevel for memory in percent (0 for no checks)(-N switch) : comma separated level for Real Memory and Swap
I switch : warning level
c, --crit=INTEGER | INT,INTlevel for memory in percent (0 for no checks)(-N switch) : comma separated level for Real Memory and Swap
I switch : critical level
N, --netsnmp (default)linux memory & swap provided by Net SNMP
m, --memcachecached memory in used memory (only with Net-SNMP)
I, --ciscocisco memory (sum of all memory pools)
E, --hpHP proccurve memory
f, --perfdatadata output
t, --timeout=INTEGERfor SNMP in seconds (Default: 5)
V, --versionversion number
}
# For verbose outputverb { my $t=shift; print $t,"\n" if defined($o_verb) ; }
# Get the alarm signal (just in case snmp timout screws up)
$SIG{'ALRM'} = sub {("ERROR: Alarm signal (Nagios time-out)\n");$ERRORS{"UNKNOWN"};
};
check_options {::Long::Configure ("bundling");(
'v' => \$o_verb, 'verbose' => \$o_verb,
'h' => \$o_help, 'help' => \$o_help,
'H:s' => \$o_host, 'hostname:s' => \$o_host,
'p:i' => \$o_port, 'port:i' => \$o_port,
'C:s' => \$o_community, 'community:s' => \$o_community,
'l:s' => \$o_login, 'login:s' => \$o_login,
'x:s' => \$o_passwd, 'passwd:s' => \$o_passwd,
'X:s' => \$o_privpass, 'privpass:s' => \$o_privpass,
'L:s' => \$v3protocols, 'protocols:s' => \$v3protocols,
't:i' => \$o_timeout, 'timeout:i' => \$o_timeout,
'V' => \$o_version, 'version' => \$o_version,
'I' => \$o_cisco, 'cisco' => \$o_cisco,
'N' => \$o_netsnmp, 'netsnmp' => \$o_netsnmp,
'E' => \$o_hp, 'hp' => \$o_hp,
'2' => \$o_version2, 'v2c' => \$o_version2,
'c:s' => \$o_crit, 'critical:s' => \$o_crit,
'w:s' => \$o_warn, 'warn:s' => \$o_warn,
'm' => \$o_cache, 'memcache' => \$o_cache,
'f' => \$o_perf, 'perfdata' => \$o_perf
);(defined ($o_help) ) { help(); exit $ERRORS{"UNKNOWN"}};(defined($o_version)) { p_version(); exit $ERRORS{"UNKNOWN"}};( ! defined($o_host) ) # check host and filter
{ print "No host defined!\n";print_usage(); exit $ERRORS{"UNKNOWN"}}
# check snmp information( !defined($o_community) && (!defined($o_login) || !defined($o_passwd)) )
{ print "Put snmp login info!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}}((defined($o_login) || defined($o_passwd)) && (defined($o_community) || defined($o_version2)) )
{ print "Can't mix snmp v1,2c,3 protocols!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}}(defined ($v3protocols)) {(!defined($o_login)) { print "Put snmp V3 login info with protocols!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}}@v3proto=split(/,/,$v3protocols);((defined ($v3proto[0])) && ($v3proto[0] ne "")) {$o_authproto=$v3proto[0]; } # Auth protocol(defined ($v3proto[1])) {$o_privproto=$v3proto[1]; } # Priv protocol((defined ($v3proto[1])) && (!defined($o_privpass))) {"Put snmp V3 priv login info with priv protocols!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}}
}(defined($o_timeout) && (isnnum($o_timeout) || ($o_timeout < 2) || ($o_timeout > 60)))
{ print "Timeout must be >1 and <60 !\n"; print_usage(); exit $ERRORS{"UNKNOWN"}}(!defined($o_timeout)) {$o_timeout=5;}
#Check Warning and crit are present( ! defined($o_warn) || ! defined($o_crit))
{ print "Put warning and critical values!\n"; print_usage(); exit $ERRORS{"UNKNOWN"}}
# Get rid of % sign
$o_warn =~ s/\%//g;
$o_crit =~ s/\%//g;
# if -N or -E switch , undef $o_netsnmp(defined($o_cisco) || defined($o_hp) ) {
$o_netsnmp=undef;( isnnum($o_warn) || isnnum($o_crit))
{ print "Numeric value for warning or critical !\n";print_usage(); exit $ERRORS{"UNKNOWN"} }( ($o_crit != 0) && ($o_warn > $o_crit) )
{ print "warning <= critical ! \n";print_usage(); exit $ERRORS{"UNKNOWN"}}
}(defined($o_netsnmp)) {@o_warnL=split(/,/ , $o_warn);@o_critL=split(/,/ , $o_crit);(($#o_warnL != 1) || ($#o_critL != 1))
{ print "2 warnings and critical !\n";print_usage(); exit $ERRORS{"UNKNOWN"}}(my $i=0;$i<2;$i++) {( isnnum($o_warnL[$i]) || isnnum($o_critL[$i]))
{ print "Numeric value for warning or critical !\n";print_usage(); exit $ERRORS{"UNKNOWN"} }(($o_critL[$i]!= 0) && ($o_warnL[$i] > $o_critL[$i]))
{ print "warning <= critical ! \n";print_usage(); exit $ERRORS{"UNKNOWN"}}( $o_critL[$i] > 100)
{ print "critical percent must be < 100 !\n";print_usage(); exit $ERRORS{"UNKNOWN"}}
}
$o_warnR=$o_warnL[0];$o_warnS=$o_warnL[1];
$o_critR=$o_critL[0];$o_critS=$o_critL[1];
}
}
########## MAIN #######
_options();
# Check gobal timeout if snmp screws up(defined($TIMEOUT)) {("Alarm at $TIMEOUT");($TIMEOUT);
} else {("no timeout defined : $o_timeout + 10");($o_timeout+10);
}
# Connect to host($session,$error);( defined($o_login) && defined($o_passwd)) {
# SNMPv3 login(!defined ($o_privpass)) {("SNMPv3 AuthNoPriv login : $o_login, $o_authproto");
($session, $error) = Net::SNMP->session(
hostname => $o_host,
version => '3',
username => $o_login,
authpassword => $o_passwd,
authprotocol => $o_authproto,
timeout => $o_timeout
);
} else {("SNMPv3 AuthPriv login : $o_login, $o_authproto, $o_privproto");
($session, $error) = Net::SNMP->session(
hostname => $o_host,
version => '3',
username => $o_login,
authpassword => $o_passwd,
authprotocol => $o_authproto,
privpassword => $o_privpass,
privprotocol => $o_privproto,
timeout => $o_timeout
);
}
} else {(defined ($o_version2)) {
# SNMPv2 Login("SNMP v2c login");
($session, $error) = Net::SNMP->session(
hostname => $o_host,
version => 2,
community => $o_community,
port => $o_port,
timeout => $o_timeout
);
} else {
# SNMPV1 login("SNMP v1 login");
($session, $error) = Net::SNMP->session(
hostname => $o_host,
community => $o_community,
port => $o_port,
timeout => $o_timeout
);
}
}(!defined($session)) {("ERROR opening session: %s.\n", $error);$ERRORS{"UNKNOWN"};
}
# Global variable$resultat=undef;
########### Cisco memory check ############(defined ($o_cisco)) {
# Get Cisco memory table
$resultat = (Net::SNMP->VERSION < 4) ?
$session->get_table($cisco_mem_pool)
:$session->get_table(Baseoid => $cisco_mem_pool);
(!defined($resultat)) {("ERROR: Description table : %s.\n", $session->error);
$session->close;$ERRORS{"UNKNOWN"};
}(@oid,@index)=(undef,undef);$nindex=0;my $key ( keys %$resultat) {("OID : $key, Desc : $$resultat{$key}");( $key =~ /$cisco_index/ ) {
@oid=split (/\./,$key);
$index[$nindex++] = pop(@oid);
}
}
# Check if at least 1 memory pool exists($nindex == 0) {("ERROR: No memory pools found");
$session->close;$ERRORS{"UNKNOWN"};
}
# Test every memory pool($c_output,$prct_free)=(undef,undef);($warn_s,$crit_s)=(0,0);($used,$free)=(0,0);(@index) {
$c_output .="," if defined ($c_output);( $$resultat{$cisco_valid . "." . $_} == 1 ) {
$used += $$resultat{$cisco_used . "." . $_};
$free += $$resultat{$cisco_free . "." . $_};
$prct_free=round($$resultat{$cisco_used . "." . $_}*100/($$resultat{$cisco_free . "." . $_}+$$resultat{$cisco_used . "." . $_}) ,0);
$c_output .= $$resultat{$cisco_index . "." . $_} . ":" . $prct_free . "%";(($o_crit!=0)&&($o_crit <= $prct_free)) {
$crit_s =1;
} elsif (($o_warn!=0)&&($o_warn <= $prct_free)) {
$warn_s=1;
}
} else {
$c_output .= $$resultat{$cisco_index . "." . $_} . ": INVALID";
$crit_s =1;
}
}$total=$used+$free;
$prct_free=round($used*100/($total),0);("Total used : $used, free: $free, output : $c_output");$c_status="OK";
$c_output .=" : " . $prct_free ."% : ";($crit_s == 1 ) {
$c_output .= " > " . $o_crit ;
$c_status="CRITICAL";
} else {($warn_s == 1 ) {
$c_output.=" > " . $o_warn;
$c_status="WARNING";
}
}
$c_output .= " ; ".$c_status;(defined ($o_perf)) {
$c_output .= " | ram_used=" . $used.";";
$c_output .= ($o_warn ==0)? ";" : round($o_warn * $total/100,0).";";
$c_output .= ($o_crit ==0)? ";" : round($o_crit * $total/100,0).";";
$c_output .= "0;" . $total ;
}
$session->close;"$c_output \n";$ERRORS{$c_status};
}
########### HP Procurve memory check ############(defined ($o_hp)) {
# Get hp memory table
$resultat = (Net::SNMP->VERSION < 4) ?
$session->get_table($hp_mem_pool)
:$session->get_table(Baseoid => $hp_mem_pool);
(!defined($resultat)) {("ERROR: Description table : %s.\n", $session->error);
$session->close;$ERRORS{"UNKNOWN"};
}(@oid,@index)=(undef,undef);$nindex=0;my $key ( keys %$resultat) {("OID : $key, Desc : $$resultat{$key}");( $key =~ /$hp_mem_index/ ) {
@oid=split (/\./,$key);
$index[$nindex++] = pop(@oid);
}
}
# Check if at least 1 memory slots exists($nindex == 0) {("ERROR: No memory slots found");
$session->close;$ERRORS{"UNKNOWN"};
}
# Consolidate the datas($total,$free)=(0,0);($c_output,$prct_free)=(undef,undef);(@index) {
$c_output .="," if defined ($c_output);
$total += $$resultat{$hp_mem_total . "." . $_};
$free += $$resultat{$hp_mem_free . "." . $_};
$c_output .= "Slot " . $$resultat{$hp_mem_index . "." . $_} . ":"
.round(
- ($$resultat{$hp_mem_free . "." . $_} *100 /
$$resultat{$hp_mem_total . "." . $_}) ,0)
. "%";
}$used = $total - $free;
$prct_free=round($used*100/($total),0);("Used : $used, Free: $free, Output : $c_output");$c_status="OK";
$c_output .=" : " . $prct_free ."% : ";(($o_crit!=0)&&($o_crit <= $prct_free)) {
$c_output .= " > " . $o_crit ;
$c_status="CRITICAL";
} else {(($o_warn!=0)&&($o_warn <= $prct_free)) {
$c_output.=" > " . $o_warn;
$c_status="WARNING";
}
}
$c_output .= " ; ".$c_status;(defined ($o_perf)) {
$c_output .= " | ram_used=" . $used.";";
$c_output .= ($o_warn ==0)? ";" : round($o_warn * $total/100,0).";";
$c_output .= ($o_crit ==0)? ";" : round($o_crit * $total/100,0).";";
$c_output .= "0;" . $total ;
}
$session->close;"$c_output \n";$ERRORS{$c_status};
}
########### Net snmp memory check ############(defined ($o_netsnmp)) {
# Get NetSNMP memory values
$resultat = (Net::SNMP->VERSION < 4) ?
$session->get_request(@nets_oids)
:$session->get_request(-varbindlist => \@nets_oids);(!defined($resultat)) {("ERROR: netsnmp : %s.\n", $session->error);
$session->close;$ERRORS{"UNKNOWN"};
}
($realused,$swapused)=(undef,undef);
$realused= defined($o_cache) ?
($$resultat{$nets_ram_total}-$$resultat{$nets_ram_free})/$$resultat{$nets_ram_total}
:
($$resultat{$nets_ram_total}-($$resultat{$nets_ram_free}+$$resultat{$nets_ram_cache}))/$$resultat{$nets_ram_total};
($$resultat{$nets_ram_total} == 0) { $realused = 0; }
$swapused= ($$resultat{$nets_swap_total} == 0) ? 0 :
($$resultat{$nets_swap_total}-$$resultat{$nets_swap_free})/$$resultat{$nets_swap_total};
$realused=round($realused*100,0);
$swapused=round($swapused*100,0);($o_cache) ?("Ram : $$resultat{$nets_ram_free} / $$resultat{$nets_ram_total} : $realused")
:("Ram : $$resultat{$nets_ram_free} ($$resultat{$nets_ram_cache} cached) / $$resultat{$nets_ram_total} : $realused");("Swap : $$resultat{$nets_swap_free} / $$resultat{$nets_swap_total} : $swapused");
$n_status="OK";$n_output="Ram : " . $realused . "%, Swap : " . $swapused . "% :";((($o_critR!=0)&&($o_critR <= $realused)) || (($o_critS!=0)&&($o_critS <= $swapused))) {
$n_output .= " > " . $o_critR . ", " . $o_critS;
$n_status="CRITICAL";
} else {((($o_warnR!=0)&&($o_warnR <= $realused)) || (($o_warnS!=0)&&($o_warnS <= $swapused))) {
$n_output.=" > " . $o_warnR . ", " . $o_warnS;
$n_status="WARNING";
}
}
$n_output .= " ; ".$n_status;(defined ($o_perf)) {(defined ($o_cache)) {
$n_output .= " | ram_used=" . ($$resultat{$nets_ram_total}-$$resultat{$nets_ram_free}).";";
}{
$n_output .= " | ram_used=" . ($$resultat{$nets_ram_total}-$$resultat{$nets_ram_free}-$$resultat{$nets_ram_cache}).";";
}
$n_output .= ($o_warnR ==0)? ";" : round($o_warnR * $$resultat{$nets_ram_total}/100,0).";";
$n_output .= ($o_critR ==0)? ";" : round($o_critR * $$resultat{$nets_ram_total}/100,0).";";
$n_output .= "0;" . $$resultat{$nets_ram_total}. " ";
$n_output .= "swap_used=" . ($$resultat{$nets_swap_total}-$$resultat{$nets_swap_free}).";";
$n_output .= ($o_warnS ==0)? ";" : round($o_warnS * $$resultat{$nets_swap_total}/100,0).";";
$n_output .= ($o_critS ==0)? ";" : round($o_critS * $$resultat{$nets_swap_total}/100,0).";";
$n_output .= "0;" . $$resultat{$nets_swap_total};
}
$session->close;"$n_output \n";$ERRORS{$n_status};
}
Приложение К
Конфигурация протокола SNMP на удаленных хостах
# sec.name source community
#com2sec paranoid default publicsec readonly default public
#com2sec readwrite default private
####
# Second, map the security names into group names:
# sec.model sec.nameMyROSystem v1 paranoidMyROSystem v2c paranoidMyROSystem usm paranoidMyROGroup v1 readonlyMyROGroup v2c readonlyMyROGroup usm readonlyMyRWGroup v1 readwriteMyRWGroup v2c readwriteMyRWGroup usm readwrite
####
# Third, create a view for us to let the groups have rights to:
# incl/excl subtree maskall included .1 80system included .iso.org.dod.internet.mgmt.mib-2.system
####
# Finally, grant the 2 groups access to the 1 view with different
# write permissions:
# context sec.model sec.level match read write notifMyROSystem "" any noauth exact system none noneMyROGroup "" any noauth exact all none noneMyRWGroup "" any noauth exact all all none
Приложение Л
Конфигурация агента ядра сетевого мониторинга на удаленных хостах
/etc/nagios/nrpe.cfg
# PID FILE
# The name of the file in which the NRPE daemon should write it's process ID
# number. The file is only written if the NRPE daemon is started by the root
# user and is running in standalone mode.
_file=/var/run/nrpe.pid
# PORT NUMBER
# Port number we should wait for connections on.
# NOTE: This must be a non-priviledged port (i.e. > 1024).
# NOTE: This option is ignored if NRPE is running under either inetd or xinetd
_port=5666
# SERVER ADDRESS
# Address that nrpe should bind to in case there are more than one interface
# and you do not want nrpe to bind on all interfaces.
# NOTE: This option is ignored if NRPE is running under either inetd or xinetd
_address=192.168.10.158
# NRPE USER
# This determines the effective user that the NRPE daemon should run as.
# You can either supply a username or a UID.
#
# NOTE: This option is ignored if NRPE is running under either inetd or xinetd
_user=nagios
# NRPE GROUP
# This determines the effective group that the NRPE daemon should run as.
# You can either supply a group name or a GID.
#
# NOTE: This option is ignored if NRPE is running under either inetd or xinetd
_group=nagios
# ALLOWED HOST ADDRESSES
# This is an optional comma-delimited list of IP address or hostnames
# that are allowed to talk to the NRPE daemon.
#
# Note: The daemon only does rudimentary checking of the client's IP
# address. I would highly recommend adding entries in your /etc/hosts.allow
# file to allow only the specified host to connect to the port
# you are running this daemon on.
#
# NOTE: This option is ignored if NRPE is running under either inetd or xinetd_hosts=127.0.0.1,192.168.10.2
# COMMAND ARGUMENT PROCESSING
# This option determines whether or not the NRPE daemon will allow clients
# to specify arguments to commands that are executed. This option only works
# if the daemon was configured with the --enable-command-args configure script
# option.
#
# *** ENABLING THIS OPTION IS A SECURITY RISK! ***
# Read the SECURITY file for information on some of the security implications
# of enabling this variable.
#
# Values: 0=do not allow arguments, 1=allow command arguments
_blame_nrpe=0
# COMMAND PREFIX
# This option allows you to prefix all commands with a user-defined string.
# A space is automatically added between the specified prefix string and the
# command line from the command definition.
#
# *** THIS EXAMPLE MAY POSE A POTENTIAL SECURITY RISK, SO USE WITH CAUTION! ***
# Usage scenario:
# Execute restricted commmands using sudo. For this to work, you need to add
# the nagios user to your /etc/sudoers. An example entry for alllowing
# execution of the plugins from might be:
#
# nagios ALL=(ALL) NOPASSWD: /usr/lib/nagios/plugins/
#
# This lets the nagios user run all commands in that directory (and only them)
# without asking for a password. If you do this, make sure you don't give
# random users write access to that directory or its contents!
# command_prefix=/usr/bin/sudo
# DEBUGGING OPTION
# This option determines whether or not debugging messages are logged to the
# syslog facility.
# Values: 0=debugging off, 1=debugging on
=0
# COMMAND TIMEOUT
# This specifies the maximum number of seconds that the NRPE daemon will
# allow plugins to finish executing before killing them off.
_timeout=60
# WEEK RANDOM SEED OPTION
# This directive allows you to use SSL even if your system does not have
# a /dev/random or /dev/urandom (on purpose or because the necessary patches
# were not applied). The random number generator will be seeded from a file
# which is either a file pointed to by the environment valiable $RANDFILE
# or $HOME/.rnd. If neither exists, the pseudo random number generator will
# be initialized and a warning will be issued.
# Values: 0=only seed from /dev/[u]random, 1=also seed from weak randomness
#allow_weak_random_seed=1
# INCLUDE CONFIG FILE
# This directive allows you to include definitions from an external config file.
#include=<somefile.cfg>
# INCLUDE CONFIG DIRECTORY
# This directive allows you to include definitions from config files (with a
# .cfg extension) in one or more directories (with recursion).
#include_dir=<somedirectory>
#include_dir=<someotherdirectory>
# COMMAND DEFINITIONS
# Command definitions that this daemon will run. Definitions
# are in the following format:
#
# command[<command_name>]=<command_line>
#
# When the daemon receives a request to return the results of <command_name>
# it will execute the command specified by the <command_line> argument.
#
# Unlike Nagios, the command line cannot contain macros - it must be
# typed exactly as it should be executed.
#
# Note: Any plugins that are used in the command lines must reside
# on the machine that this daemon is running on! The examples below
# assume that you have plugins installed in a /usr/local/nagios/libexec
# directory. Also note that you will have to modify the definitions below
# to match the argument format the plugins expect. Remember, these are
# examples only!
# The following examples use hardcoded command arguments...
[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10[check_load]=/usr/lib/nagios/plugins/check_load -w 15,15,15 -c 30,25,20[check_disk1]=/usr/lib/nagios/plugins/check_disk -w 20 -c 10 -p /dev/hda1[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 17000 -c 18000 -s Z[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 17000 -c 20000
# The following examples allow user-supplied arguments and can
# only be used if the NRPE daemon was compiled with support for
# command arguments *AND* the dont_blame_nrpe directive in this
# config file is set to '1'...
#command[check_users]=/usr/lib/nagios/plugins/check_users -w $ARG1$ -c $ARG2$
#command[check_load]=/usr/lib/nagios/plugins/check_load -w $ARG1$ -c $ARG2$
#command[check_disk]=/usr/lib/nagios/plugins/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
#command[check_procs]=/usr/lib/nagios/plugins/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$
#
# local configuration:
# if you'd prefer, you can instead place directives here=/etc/nagios/nrpe_local.cfg
Приложение М
Пример конфигурационного файла MRTG
/etc/mrtg/shaper/mrtg.cfg
# Created by
# /usr/bin/cfgmaker public@192.168.10.1
### Global Config Options
# for UNIX
# WorkDir: /home/http/mrtg
# for Debian: /var/www/mrtg/shaper
# or for NT
# WorkDir: c:\mrtgdata
### Global Defaults
# to get bits instead of bytes and graphs growing to the right[_]: growright, bits
: no
######################################################################
# System: shaper
# Description: Linux shaper 2.6.31-bfs311 #1 SMP Fri Dec 4 10:23:03 YEKT 2009 x86_64
# Contact: Root <root@localhost> (configure /etc/snmp/snmpd.local.conf)
# Location: Unknown (configure /etc/snmp/snmpd.local.conf)
######################################################################
### Interface 1 >> Descr: 'lo' | Name: 'lo' | Ip: '127.0.0.1' | Eth: '' ###
### The following interface is commented out because:
### * it is a Software Loopback interface
#
# Target[192.168.10.1_1]: 1:public@192.168.10.1:
# SetEnv[192.168.10.1_1]: MRTG_INT_IP="127.0.0.1" MRTG_INT_DESCR="lo"
# MaxBytes[192.168.10.1_1]: 1250000
# Title[192.168.10.1_1]: Traffic Analysis for 1 -- shaper
# PageTop[192.168.10.1_1]: <h1>Traffic Analysis for 1 -- shaper</h1>
# <div id="sysdetails">
# <table>
# <tr>
# <td>System:</td>
# <td>shaper in Unknown (configure /etc/snmp/snmpd.local.conf)</td>
# </tr>
# <tr>
# <td>Maintainer:</td>
# <td>Root <root@localhost> (configure /etc/snmp/snmpd.local.conf)</td>
# </tr>
# <tr>
# <td>Description:</td>
# <td>lo </td>
# </tr>
# <tr>
# <td>ifType:</td>
# <td>softwareLoopback (24)</td>
# </tr>
# <tr>
# <td>ifName:</td>
# <td>lo</td>
# </tr>
# <tr>
# <td>Max Speed:</td>
# <td>1250.0 kBytes/s</td>
# </tr>
# <tr>
# <td>Ip:</td>
# <td>127.0.0.1 (localhost)</td>
# </tr>
# </table>
# </div>
### Interface 2 >> Descr: 'eth2' | Name: 'eth2' | Ip: '' | Eth: '30-78-30-30-32-33-35-34-32-35-34-33-30-66' ###
### The following interface is commented out because:
### * it is administratively DOWN
### * it is operationally DOWN
#
# Target[192.168.10.1_2]: 2:public@192.168.10.1:
# SetEnv[192.168.10.1_2]: MRTG_INT_IP="" MRTG_INT_DESCR="eth2"
# MaxBytes[192.168.10.1_2]: 1250000
# Title[192.168.10.1_2]: Traffic Analysis for 2 -- shaper
# PageTop[192.168.10.1_2]: <h1>Traffic Analysis for 2 -- shaper</h1>
# <div id="sysdetails">
# <table>
# <tr>
# <td>System:</td>
# <td>shaper in Unknown (configure /etc/snmp/snmpd.local.conf)</td>
# </tr>
# <tr>
# <td>Maintainer:</td>
# <td>Root <root@localhost> (configure /etc/snmp/snmpd.local.conf)</td>
# </tr>
# <tr>
# <td>Description:</td>
# <td>eth2 </td>
# </tr>
# <tr>
# <td>ifType:</td>
# <td>ethernetCsmacd (6)</td>
# </tr>
# <tr>
# <td>ifName:</td>
# <td>eth2</td>
# </tr>
# <tr>
# <td>Max Speed:</td>
# <td>1250.0 kBytes/s</td>
# </tr>
# </table>
# </div>
### Interface 3 >> Descr: 'eth0' | Name: 'eth0' | Ip: '192.168.10.1' | Eth: '30-78-30-30-31-62-32-31-32-65-37-62-65-36' ###
[192.168.10.1_3]: 3:public@192.168.10.1:[192.168.10.1_3]: MRTG_INT_IP="192.168.10.1" MRTG_INT_DESCR="eth0"[192.168.10.1_3]: 125000000[192.168.10.1_3]: Traffic Analysis for 3 -- shaper[192.168.10.1_3]: <h1>Traffic Analysis for 3 -- shaper</h1>
<div id="sysdetails">
<table>
<tr>
<td>System:</td>
<td>shaper in Unknown (configure /etc/snmp/snmpd.local.conf)</td>
</tr>
<tr>
<td>Maintainer:</td>
<td>Root <root@localhost> (configure /etc/snmp/snmpd.local.conf)</td>
</tr>
<tr>
<td>Description:</td>
<td>eth0 </td>
</tr>
<tr>
<td>ifType:</td>
<td>ethernetCsmacd (6)</td>
</tr>
<tr>
<td>ifName:</td>
<td>eth0</td>
</tr>
<tr>
<td>Max Speed:</td>
<td>1250.0 kBytes/s</td>
</tr>
<tr>
<td>Ip:</td>
<td>192.168.10.1 (shaper)</td>
</tr>
</table>
</div>
### Interface 4 >> Descr: 'eth1' | Name: 'eth1' | Ip: '91.192.168.250' | Eth: '30-78-30-30-31-62-32-31-32-65-37-62-63-38' ###
[192.168.10.1_4]: 4:public@192.168.10.1:[192.168.10.1_4]: MRTG_INT_IP="91.192.168.250" MRTG_INT_DESCR="eth1"[192.168.10.1_4]: 125000000[192.168.10.1_4]: Traffic Analysis for 4 -- shaper[192.168.10.1_4]: <h1>Traffic Analysis for 4 -- shaper</h1>
<div id="sysdetails">
<table>
<tr>
<td>System:</td>
<td>shaper in Unknown (configure /etc/snmp/snmpd.local.conf)</td>
</tr>
<tr>
<td>Maintainer:</td>
<td>Root <root@localhost> (configure /etc/snmp/snmpd.local.conf)</td>
</tr>
<tr>
<td>Description:</td>
<td>eth1 </td>
</tr>
<tr>
<td>ifType:</td>
<td>ethernetCsmacd (6)</td>
</tr>
<tr>
<td>ifName:</td>
<td>eth1</td>
</tr>
<tr>
<td>Max Speed:</td>
<td>1250.0 kBytes/s</td>
</tr>
<tr>
<td>Ip:</td>
<td>91.192.168.250 (shaper.vpcit.ru)</td>
</tr>
</table>
</div>
Приложение Н
Рис. Н.1 - Пример представления графиков загрузки интерфейсов посредством MRTG
Приложение О
Параметры crontab
/etc/cron.d/mrtg
-55/5 * * * * root if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg/bgp/mrtg.cfg ]; then env LANG=C /usr/bin/mrtg /etc/mrtg/bgp/mrtg.cfg >> /var/log/mrtg/mrtg.log 2>&1; fi
0-55/5 * * * * root if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg/AT-9924/mrtg.cfg ]; then env LANG=C /usr/bin/mrtg /etc/mrtg/AT-9924/mrtg.cfg >> /var/log/mrtg/mrtg.log 2>&1; fi
-55/5 * * * * root if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg/DES-3627G/mrtg.cfg ]; then env LANG=C /usr/bin/mrtg /etc/mrtg/DES-3627G/mrtg.cfg >> /var/log/mrtg/mrtg.log 2>&1; fi
-55/5 * * * * root if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg/Rapier_24i/mrtg.cfg ]; then env LANG=C /usr/bin/mrtg /etc/mrtg/Rapier_24i/mrtg.cfg >> /var/log/mrtg/mrtg.log 2>&1; fi
-55/5 * * * * root if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg/host_mail/mrtg.cfg ]; then env LANG=C /usr/bin/mrtg /etc/mrtg/host_mail/mrtg.cfg >> /var/log/mrtg/mrtg.log 2>&1; fi
-55/5 * * * * root if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg/monitoring/mrtg.cfg ]; then env LANG=C /usr/bin/mrtg /etc/mrtg/monitoring/mrtg.cfg >> /var/log/mrtg/mrtg.log 2>&1; fi
-55/5 * * * * root if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg/urrab_39a/mrtg.cfg ]; then env LANG=C /usr/bin/mrtg /etc/mrtg/urrab_39a/mrtg.cfg >> /var/log/mrtg/mrtg.log 2>&1; fi
-55/5 * * * * root if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg/len_58a/mrtg.cfg ]; then env LANG=C /usr/bin/mrtg /etc/mrtg/len_58a/mrtg.cfg >> /var/log/mrtg/mrtg.log 2>&1; fi
-55/5 * * * * root if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg/krivous_36b/mrtg.cfg ]; then env LANG=C /usr/bin/mrtg /etc/mrtg/krivous_36b/mrtg.cfg >> /var/log/mrtg/mrtg.log 2>&1; fi
-55/5 * * * * root if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg/shaper/mrtg.cfg ]; then env LANG=C /usr/bin/mrtg /etc/mrtg/shaper/mrtg.cfg >> /var/log/mrtg/mrtg.log 2>&1; fi
-55/5 * * * * root if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg/for/for.cfg ]; then env LANG=C /usr/bin/mrtg /etc/mrtg/for/for.cfg >> /var/log/mrtg/mrtg.log 2>&1; fi
Приложение П
Таблица П.1 - Подробное сравнение технических особенностей различных сборщиков системных журналов
Параметр/Служба | syslogd | syslog-ng OSE | syslog-ng PE |
Получение журналов от | |||
UNIX domain socket (stream & dgram) | Да | Да | Да |
UDP | Да | Да | Да |
UDP использующий IETF-syslog стандартный протокол | - | Да | Да |
TCP | - | Да | Да |
TCP использующий IETF-syslog стандартный протокол | - | Да | Да |
UDP6 | Зависит от ОС | Да | Да |
TCP6 | - | Да | Да |
TLS-шифрованные каналы | - | Да | Да |
TLS использующий IETF-syslog стандартный протокол | - | Да | Да |
Именованные каналы | - | Да | Да |
Файл | - | Да | Да |
Стандартный вывод (stdout) приложения | - | Да | Да |
Устройство протоколирования ядра на Linux, Solaris, BSD | klogd | Да | Да |
Файл со звездочками в имени или пути | - | - | Да |
IBM System i журанл аудита (QAUDJRN) & журнал оператора терминала (QSYSOPR) (через отдельное приложение агента) | - | - | Да |
Windows EventLog /файлы журналов (через отделное агентское приложение) | - | - | Да |
Отправка системных журналов к | |||
UNIX domain sockets (stream & dgram) | - | Да | Да |
UDP | Да | Да | Да |
UDP использующий IETF-syslog стандартный протокол | - | Да | Да |
TCP | - | Да | Да |
TCP использующий IETF-syslog стандартный протокол | - | Да | Да |
UDP6 | depends on the OS | Да | Да |
TCP6 | - | Да | Да |
Именованый канал | Да | Да | Да |
Файл | Да | Да | Да |
Шифрованый, сжатый, с метками времени и проиндексированный двоичный файл | - | - | Да |
SQL база данных (MySQL, Microsoft SQL (MSSQL), Oracle, PostgreSQL, SQLite) | - | Да | Да |
Стандартный ввод любой указанной пользователем программы | - | Да | Да |
Пользовательский tty | Да | Да | Да |
Поддержка встроенного TLS шифрования при использовании TCP, TCP6, или IETF-syslog протокола | - | Да | Да |
Производительность | |||
Принятие 75000 сообщений в секунда (измерено с 150-байтовыми сообщениями на серверной платформе низшего уровня) | - | Да | Да |
Форматы сообщений | |||
Поддержка сырых, не формата syslog сообщений | - | Да | Да |
Поддержка RFC3164 формата сообщений (BSD) | Да | Да | Да |
Поддержка IETF-syslog формата сообщений | - | Да | Да |
Поддержка расширенных RFC3339 (ISO 8601) временных меток | - | Да | Да |
Поддержка некоторых нестандартных формтаов временных меток (Cisco PIX, LinkSys, и др.) | - | Да | Да |
Поддержка микросекундного определения времени (точность настраивается пользователем) | - | Да | Да |
Поддержка информации о временных зонах | - | Да | Да |
Поддержка определения неверных имен хостов (позволяет принимать сообщения от приложений, которые отправляют syslog сообщения в неправильном формате) | - | Да | Да |
Поддержка сцепленного имени хоста, котороая позволяет определить путь прохождения сообщения через релеи. | - | Да | Да |
Обработка сообщений/фильтрация | |||
Поддержка разрешения имен через DNS | Да | Да | Да |
Поддержка разрешения имен через файл (локальная карта IP->host) | - | Да | Да |
Кэширование DNS запросов для предотвращения перегрузки DNS серверов и повышения производительности | - | Да | Да |
Поддержка нормализации имен хостов (принудительное приведение имен в нижний регистр) | - | Да | Да |
Сообщения могут назначаться нескольким независимым адресатам (файл, sql, несколько удаленных серверов, и др.) одновременно | Да | Да | Да |
Одна фильтрующая операция может направлять сообщения по нескольким адресатам | - | Да | Да |
Сегментирования текстовых сообщений в пары имя=значение с использованием парсеров. | - | Да | Да |
Использования результатов парсинга как макросов | - | Да | Да |
Определение значений по умолчанию для макросов | - | Да | Да |
Замена выбранных частей сообщения | - | Да | Да |
Установка значения пар имя=значение | - | Да | Да |
Поддержка преобразования временных меток между временными зонами | - | Да | Да |
Поддержка контролируемых потоков для путей журналов событий: принятие сообщений со входа приостанавливается, пока адресат заполнен, пока адресам не сможет принимать сообщения. | - | Да | Да |
Поддержка сложных фильтров с использованием булевой алгебры с операторами И/ИЛИ/НЕ и их выражений | - | Да | Да |
Поддержка многократно используемых фильтров: возможно единственное определение фильтра и его последующее использование в нескольких путях журналов | - | Да | Да |
Повторное использование реузльтатов фильтрации, парсинга и перезаписи для создания встроенных путей журналов | - | Да | Да |
Поддержка комбинированных фильтров: фильтры могут быть объединены с использованием булевых операторов | - | Да | Да |
Поддержка фильтрации по содержимому с использованием регулярных выражений POSIX | - | Да | Да |
Фильтрация по syslog facility и priority | Да | Да | Да |
Фильтрация по имени хоста | - | Да | Да |
Фильтрация по имени приложения | - | Да | Да |
Фильтрация по содержимому сообщения | - | Да | Да |
Фильтрация по IP адресу источника | - | Да | Да |
Фильтрация по любым SD метаданным при использовании IETF-syslog протокола | - | Да | Да |
Поддержка отклонения сообщений на основе фильтра | Да | Да | Да |
Поддержка ограничения потока сообщений, отправляемого получателю | - | Да | Да |
Поддержка сортировка сообщений по разным адресатам, все неотфильтрованный сообщения собираются в резервном адресате | - | Да | Да |
Сбор статистика по адресатам, источникам и глобальным параметрам | - | Да | Да |
Стастистика может быть запрошена в любой момент посредствам сокетов unix-domain | - | Да | Да |
Возможности | |||
Автоматическое создание директорий, основанное на содержимом сообщений. | - | Да | Да |
Автоматическое создание таблиц, колонок и индексов в SQL базах данных, основываясь на содержимом сообщений | - | Да | Да |
Изменяемый формат сообщений с использованием шаблонов и макросов | - | Да | Да |
Сегментирование и изменение содержимого сообщений | - | Да | Да |
Поддержка автоматической ротации журналов добавлением временных меток к лог-файлу и именам таблиц в базе данных | - | Да | Да |
Перезапуск программ-адресатов, если они завершают работу | - | Да | Да |
Перезапуск программ-источников, если они завершают работу | - | Да | Да |
Поддержка буферизации сообщений на жестком диске для предотвращения потери сообщений в случае недоступности адресата | - | - | Да |
Содержимое дискового буфера остается даже между перезапусками syslog-ng | - | - | Да |
Поддержка аутентификации, X.509 при использовании TLS | - | Да | Да |
Поддержка сетевого сжатия при использовании TLS | - | Да | Да |
Подержка файлов журналов размером более 2GB | Да | Да | Да |
Поддержка IP спуфинга при перенаправлении сообщений с использованием UDP | - | Да | Да |
Многопоточность при исопльзовании SQL адресатов | - | Да | Да |
Поддержка IPv6 | Зависит от ОС | Да | Да |
Поддержка и получение сообщений от мультивещательных адресов | - | Да | Да |
Временные метки могут включать доли секунды | - | Да | Да |
Может работать в режиме клиента, релея или сервера | Да | Да | Да |
Другие возможности | |||
Переносимость: поддерживает широкий спектр UNIX платформ (Linux, BSDs, Solaris, HP-UX, AIX) | Да | Да | Да |
Живое и готовое помочь комьюнити проекта посредством списка рассылки | - | Да | Да |
Профессионально составленная документация | Да | Да | Да |
Коммерческая поддержка | Только от некоторых поставщиков ОС | Да | Да |
Проверено в боевых условиях (более 10 лет существования и использования) | Да | Да | Да |
Приложение Р
Фильтры и правила модуля сбора системных журналов
/etc/syslog-ng/syslog-ng.conf
# Configuration file for syslog-ng under Debian
#
# attempts at reproducing default syslog behavior
# the standard syslog levels are (in descending order of priority):
# emerg alert crit err warning notice info debug
# the aliases "error", "panic", and "warn" are deprecated
# the "none" priority found in the original syslogd configuration is
# only used in internal messages created by syslogd
######
# options
{
# disable the chained hostname format in logs
# (default is enabled)_hostnames(0);
# the time to wait before a died connection is re-established
# (default is 60)_reopen(10);
# the time to wait before an idle destination file is closed
# (default is 60)_reap(360);
# the number of lines buffered before written to file
# you might want to increase this if your disk isn't catching with
# all the log messages you get or if you want less disk activity
# (say on a laptop)
# (default is 0)
#sync(0);
# the number of lines fitting in the output queue_fifo_size(2048);
# enable or disable directory creation for destination files_dirs(yes);
# default owner, group, and permissions for log files
# (defaults are 0, 0, 0600)
#owner(root);(adm);(0640);
# default owner, group, and permissions for created directories
# (defaults are 0, 0, 0700)
#dir_owner(root);
#dir_group(root);_perm(0755);
# enable or disable DNS usage
# syslog-ng blocks on DNS queries, so enabling DNS may lead to
# a Denial of Service attack
# (default is yes)_dns(persist_only);
_cache_hosts(/etc/hosts);
# maximum length of message in bytes
# this is only limited by the program listening on the /dev/log Unix
# socket, glibc can handle arbitrary length log messages, but -- for
# example -- syslogd accepts only 1024 bytes
# (default is 2048)
#log_msg_size(2048);
#Disable statistic log messages._freq(0);
# Some program send log messages through a private implementation.
# and sometimes that implementation is bad. If this happen syslog-ng
# may recognise the program name as hostname. Whit this option
# we tell the syslog-ng that if a hostname match this regexp than that
# is not a real hostname._hostname("^gconfd$");
#_sleep(20);
};
######
# sources
# all known message sourcess_all {
# message generated by Syslog-NG();
# standard Linux log source (this is the default place for the syslog()
# function to send logs to)stream("/dev/log");
# messages from the kernel("/proc/kmsg" log_prefix("kernel: "));
# use the following line if you want to receive remote UDP logging messages
# (this is equivalent to the "-r" syslogd flag)();
};
######
# destinations
# some standard log filesdf_auth { file("/var/log/$HOST/auth.log"); };df_syslog { file("/var/log/$HOST/syslog"); };df_cron { file("/var/log/$HOST/cron.log"); };df_daemon { file("/var/log/$HOST/daemon.log"); };df_kern { file("/var/log/$HOST/kern.log"); };df_lpr { file("/var/log/$HOST/lpr.log"); };df_mail { file("/var/log/$HOST/mail.log"); };df_user { file("/var/log/$HOST/user.log"); };df_uucp { file("/var/log/$HOST/uucp.log"); };df_radius { file("/var/log/$HOST/radius.log"); };
# these files are meant for the mail system log files
# and provide re-usable destinations for {mail,cron,...}.info,
# {mail,cron,...}.notice, etc.df_facility_dot_info { file("/var/log/$HOST/$FACILITY.info"); };df_facility_dot_notice { file("/var/log/$HOST/$FACILITY.notice"); };df_facility_dot_warn { file("/var/log/$HOST/$FACILITY.warn"); };df_facility_dot_err { file("/var/log/$HOST/$FACILITY.err"); };df_facility_dot_crit { file("/var/log/$HOST/$FACILITY.crit"); };
# these files are meant for the news system, and are kept separated
# because they should be owned by "news" instead of "root"df_news_dot_notice { file("/var/log/$HOST/news/news.notice" owner("news")); };df_news_dot_err { file("/var/log/$HOST/news/news.err" owner("news")); };df_news_dot_crit { file("/var/log/$HOST/news/news.crit" owner("news")); };
# some more classical and useful files found in standard syslog configurationsdf_debug { file("/var/log/$HOST/debug"); };df_messages { file("/var/log/$HOST/messages"); };
# pipes
# a console to view log messages under Xdp_xconsole { pipe("/dev/xconsole"); };
# consoles
# this will send messages to everyone logged indu_all { usertty("*"); };
######
# filters
# all messages from the auth and authpriv facilitiesf_auth { facility(auth, authpriv); };
# all messages except from the auth and authpriv facilitiesf_syslog { not facility(auth, authpriv, mail, local7, local1); };
# respectively: messages from the cron, daemon, kern, lpr, mail, news, user,
# and uucp facilitiesf_cron { facility(cron); };f_daemon { facility(daemon); };f_kern { facility(kern); };f_lpr { facility(lpr); };f_mail { facility(mail); };f_news { facility(news); };f_user { facility(user); };f_uucp { facility(uucp); };
# some filters to select messages of priority greater or equal to info, warn,
# and err
# (equivalents of syslogd's *.info, *.warn, and *.err)f_at_least_info { level(info..emerg); };f_at_least_notice { level(notice..emerg); };f_at_least_warn { level(warn..emerg); };f_at_least_err { level(err..emerg); };f_at_least_crit { level(crit..emerg); };
# all messages of priority debug not coming from the auth, authpriv, news, and
# mail facilitiesf_debug { level(debug) and not facility(auth, authpriv, news, mail); };
# all messages of info, notice, or warn priority not coming form the auth,
# authpriv, cron, daemon, mail, and news facilitiesf_messages {(info,notice,warn)not facility(auth,authpriv,cron,daemon,mail,news) and facility(local7);
};
# messages with priority emergf_emerg { level(emerg); };
# complex filter for messages usually sent to the xconsolef_xconsole {(daemon,mail)level(debug,info,notice,warn)(facility(news)level(crit,err,notice));
};
# filter for radiusf_radius {(local1);
};
######
# logs
# order matters if you use "flags(final);" to mark the end of processing in a
# "log" statement
# these rules provide the same behavior as the commented original syslogd rules
# auth,authpriv.* /var/log/auth.log{(s_all);(f_auth);(df_auth);
};
# *.*;auth,authpriv.none -/var/log/syslog{(s_all);(f_syslog);(df_syslog);
};
# cron.* /var/log/cron.log{(s_all);(f_cron);(df_cron);
};
# daemon.* -/var/log/daemon.log{(s_all);(f_daemon);(df_daemon);
};
# kern.* -/var/log/kern.log{(s_all);(f_kern);(df_kern);
};
# lpr.* -/var/log/lpr.log{(s_all);(f_lpr);(df_lpr);
};
# mail.* -/var/log/mail.log{(s_all);(f_mail);(df_mail);
};
# user.* -/var/log/user.log{(s_all);(f_user);(df_user);
};
# uucp.* /var/log/uucp.log{(s_all);(f_uucp);(df_uucp);
};
# mail.info -/var/log/mail.info
#log {
# source(s_all);
# filter(f_mail);
# filter(f_at_least_info);
# destination(df_facility_dot_info);
#};
# mail.warn -/var/log/mail.warn
#log {
# source(s_all);
# filter(f_mail);
# filter(f_at_least_warn);
# destination(df_facility_dot_warn);
#};
# mail.err /var/log/mail.err{(s_all);(f_mail);(f_at_least_err);(df_facility_dot_err);
};
# news.crit /var/log/news/news.crit{(s_all);(f_news);(f_at_least_crit);(df_news_dot_crit);
};
# news.err /var/log/news/news.err{(s_all);(f_news);(f_at_least_err);(df_news_dot_err);
};
# news.notice /var/log/news/news.notice{(s_all);(f_news);(f_at_least_notice);(df_news_dot_notice);
};
# *.=debug;\
# auth,authpriv.none;\
# news.none;mail.none -/var/log/debug{(s_all);(f_debug);(df_debug);
};
# *.=info;*.=notice;*.=warn;\
# auth,authpriv.none;\
# cron,daemon.none;\
# mail,news.none -/var/log/messages{(s_all);(f_messages);(df_messages);
};
# *.emerg *{(s_all);(f_emerg);(du_all);
};
# daemon.*;mail.*;\
# news.crit;news.err;news.notice;\
# *.=debug;*.=info;\
# *.=notice;*.=warn |/dev/xconsole{(s_all);(f_xconsole);(dp_xconsole);
};
# radius log{(s_all);(f_radius);
destination(df_radius);
};
На удаленных хостах необходимо обновить конфигурацию следующим образом:
/etc/syslog.conf
# /etc/syslog.conf Configuration file for syslogd.
#
# For more information see syslog.conf(5)
# manpage.
#
# First some standard logfiles. Log by facility.
#
,authpriv.* @log_host
*.*;auth,authpriv.none @log_host
# |/var/log/syslog.fifo
#cron.* @log_host.* @log_host.* @log_host.* @log_host.* @log_host.* @log_host.* @log_host
#
# Logging for the mail system. Split it up so that
# it is easy to write scripts to parse these files.
#.info @log_host.warn @log_host.err @log_host
# Logging for INN news system
#.crit @log_host.err @log_host.notice @log_host
#
# Some `catch-all' logfiles.
#
*.=debug;\,authpriv.none;\.none;mail.none @log_host
*.=info;*.=notice;*.=warn;\,authpriv.none;\,daemon.none;\,news.none @log_host
#
# Emergencies are sent to everybody logged in.
#
*.emerg *
#
# I like to have messages displayed on the console, but only on a virtual
# console I usually leave idle.
#
#daemon,mail.*;\
# news.=crit;news.=err;news.=notice;\
# *.=debug;*.=info;\
# *.=notice;*.=warn /dev/tty8
# The named pipe /dev/xconsole is for the `xconsole' utility. To use it,
# you must invoke `xconsole' with the `-file' option:
#
# $ xconsole -file /dev/xconsole [...]
#
# NOTE: adjust the list below, or you'll go crazy if you have a reasonably
# busy site..
#.*;mail.*;\.crit;news.err;news.notice;\
*.=debug;*.=info;\
*.=notice;*.=warn |/dev/xconsole
# local7.debug /var/log/dhcpd.log
Приложение С
Скрипт инициализации пакетного фильтра
/root/boot/firewall
#!/bin/bash
#
# local variables
="/sbin/iptables"
# just head
## clear all rules
$I -F INPUT
$I -F OUTPUT
$I -F FORWARD
$I -F POSTROUTING -t mangle
$I -F INPUT -t filter
## set default policy to drop all packets
$I -P INPUT DROP
$I -P OUTPUT DROP
$I -P FORWARD DROP
## allow tcp, udp packets for already established tcp, udp connections
## plus tcp, udp packets creating new tcp, udp connections
$I -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
$I -A INPUT -p udp -m state --state ESTABLISHED,RELATED -j ACCEPT
$I -A OUTPUT -p tcp -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$I -A OUTPUT -p udp -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
## allow loopback, for applications using UNIX sockets
$I -A INPUT -i lo -j ACCEPT
$I -A OUTPUT -o lo -j ACCEPT
# Services
## allow to connect via ssh and others wants to connect my PC via ssh
$I -A INPUT -p tcp --dport 22 -j ACCEPT -s <source>
<…>
## I want to show web face of nagios and mrtg
$I -A INPUT -p tcp --dport http -j ACCEPT -s <source>
<…>
## Here goes OCS Inventory needs access
$I -A INPUT -p tcp --dport http -j ACCEPT -i eth0.92
## allow icmp
$I -A INPUT -p icmp -j ACCEPT
$I -A OUTPUT -p icmp -j ACCEPT
## system logging
$I -A INPUT -p udp --dport 514 -j ACCEPT -s <source>
<…>
Дата добавления: 2019-09-13; просмотров: 142; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!