close

Вход

Забыли?

вход по аккаунту

Бочаров Сергей Сергеевич. Разработка системы мониторинга состояния оборудования информационного центра

код для вставки
2
2
2
2
2
Содержание
Введение ........................................................................................................................... 6
Глава 1 Описание и анализ предметной области ......................................................... 9
1.1 Назначение и функции систем мониторинга состояния оборудования
информационного центра ............................................................................................... 9
1.2 Анализ существующих систем мониторинга состояния оборудования
информационного центра ............................................................................................. 12
1.3 Сравнительный анализ систем мониторинга состояния оборудования
информационного центра ............................................................................................. 23
1.4
Выбор
инструментальной
среды
разработки
и
языка
программирования ........................................................................................................ 25
1.4.1. Выбор языка программирования ....................................................................... 25
1.4.2. Выбор СУБД ........................................................................................................ 26
Глава
2
Разработка
системы
мониторинга
состояния
оборудования
информационного центра ............................................................................................. 29
2.1 Основные задачи и требования к системе мониторинга состояния оборудования
информационного центра ............................................................................................. 29
2.2
Моделирование
системы
мониторинга
состояния
оборудования
информационного центра ............................................................................................. 30
2.2.1 Диаграмма вариантов использования системы мониторинга состояния
оборудования информационного центра .................................................................... 34
2.2.2 Диаграмма классов системы мониторинга состояния оборудования
информационного центра ............................................................................................. 35
2.3 Разработка моделей БД системы мониторинга состояния оборудования
информационного центра ............................................................................................. 37
2.4 Создание БД системы мониторинга состояния оборудования информационного
центра ............................................................................................................................. 40
2.5 Практическая реализация системы мониторинга состояния оборудования
информационного центра ............................................................................................. 41
4
2.5.1 Модуль сбора информации системы мониторинга состояния оборудования
информационного центра ............................................................................................. 41
2.5.2 Графический интерфейс системы мониторинга состояния
оборудования
информационного центра ............................................................................................. 52
2.6 Результаты внедрения системы мониторинга состояния оборудования
информационного центра организации ЗАО «ЕНДС» .............................................. 57
Заключение .................................................................................................................... 60
Список литературы ....................................................................................................... 62
Приложения ................................................................................................................... 64
5
Введение
В настоящее время, информационные системы охватили всю деятельности
человека. Для того, чтобы обеспечить бесперебойную работу информационных
систем применяются системы мониторинга состояния оборудования. Системы
мониторинга состояния оборудования информационного центра необходимы, для
оповещения системных администраторов о поломках и проблемах раньше или
одновременно с пользователями. Многим компаниям для поддержания своей
деятельности необходимо иметь большое количество серверов и рабочих станций.
Развивающееся количество информационных центров и различных организаций по
всему миру обеспечивает актуальность задачи контроля, предотвращения поломок
и оповещения о них, уменьшении времени на устранение неисправностей,
хранение информации о состоянии оборудования.
Мониторинг
состояния
оборудования
информационного
центра
—
подразумевает диагностику оборудования во время его работы, обнаружение
неполадок и оповещении о них администраторов, а также слежения за изменениями
аппаратной и программной части машин.
Объектом исследования – являются системы компонентов, определяющих
состояние оборудования информационного центра, предметом исследования –
являются
программные
способы
мониторинга
состояния
оборудования
информационного центра.
Цель работы – разработка системы мониторинга состояния оборудования
информационного
центра,
в
частности
рабочих
станций
(персональных
компьютеров) центра.
Решаемые задачи для достижения указанной цели:
-
провести анализ предметной области и сформулировать требования
к разрабатываемой информационной системе;
-
провести обзор современных методов контроля за состоянием
оборудованием существующих систем;
6
-
выбрать
оборудования
средства
реализации
информационного
центра
системы
и
мониторинга
разработать
ее
состояния
программное
обеспечение и структуру базы данных;
-
провести проектирование разрабатываемой системы с использованием
диаграмм, разработать модель системы;
-
разработать алгоритмы сбора информации о состоянии оборудования в
локальной сети предприятия;
-
описать работы системы мониторинга;
-
провести оценку эффективности функционирования разработанной
системы.
Практическая значимость работы объясняется отсутствием возможности
слежения за некоторыми важными показателями состояния оборудования с
помощью стандартных средств мониторинга, или же высокой трудоёмкостью
таких методов. Систему необходимо построить так, чтобы она была простой в
использовании, применимой в сравнительно небольших ЛВС, имеющих
топологию Ethernet (с количеством узлов локальной сети до 50 и количеством узлов
сетевого оборудования до 20) и не требующей большого количества ресурсов.
Использование системы позволит повысить эффективность работы системных
администраторов, а также поможет им принять адекватное и правильное решение
в той или иной конкретной ситуации. Система мониторинга состояния
оборудования информационного центра, создание которой рассматривается в
данном проекте, позволит выполнять поставленные задачи.
Структура работы носит традиционный характер. Работа состоит из
введения, 2-х глав, заключения, списка литературы.
Введение раскрывает актуальность темы исследования, описывает объект и
предмет исследования, цель и поставленные задачи исследования.
В первой части рассматриваются основные существующие информационные
решения для мониторинга, выявляются их положительные и отрицательные
стороны. Выбор языка программирования, на котором будь написана система
7
мониторинга состояния оборудования информационного центра и выбор системы
управления базой данных (СУБД).
Во
второй
части работы
описываются методы
создания
системы
мониторинга состояния оборудования информационного центра, рассматривается
практическая реализация важнейших частей системы: базовые алгоритмы
слежения за состоянием оборудования информационного центра, использование
сторонних
библиотек.
Описаны
механизмы
и
последствия
внедрения
разработанной системы мониторинга.
В заключении описаны основные полученные результатах.
Список литературы содержит источники, используемые при написании
работы.
8
1 Описание и анализ предметной области
1.1 Назначение и функции систем мониторинга состояния
оборудования информационного центра
В разработке информационных систем, программного обеспечения и при
создании любого другого проекта, необходимо четко понимать, какая задача перед
нами поставлена. Одной из главных задач при разработке систем мониторинга
состояния оборудования информационного центра является предоставление самой
важной и последней информации для ее анализа, успешного обнаружения
появившейся
неисправности
и
ее
оперативная
ликвидация.
Постоянный
мониторинг локальной сети и всех ее узлов помогает избежать простоев в работе
предприятия или организации, поддерживать все сервисы в работоспособном
состоянии и выполнять необходимые требования к качеству предоставляемых
услуг, а также подготовить план модернизации сети.
Не так давно, функции системы мониторинга состояния оборудования
выполняли администраторы, а данные о состоянии систем, проводимых работах
над ними или же модернизация ее в целом, собиралась так же этими специалистами
и сбор данных происходил не в специализированных программах (по причине их
отсутствия), в худшем случае информация никак не накапливалась и не
обрабатывалась. Все дынные о системе были привязаны к практическому опыту
работы в данной сфере у конкретного специалиста и пропадала при его уходе.
В современное время имеется множество систем для мониторинга состояния
оборудования, есть как полу- автоматизированные системы, так и полностью
автоматизированные. Они имеют функции для анализа состояния систем в сети и
сбора информации, что в последствии может пригодиться для составления плана
модернизации сети.
Имеются довольно необычные разновидности мониторинга, например, от
лица конечного пользователя, когда в заданные промежутки времени циклически
эмулируются его действия. Обычно это робот, планировщик заданий, запускающий
9
специальный, заранее определённый скрипт-сценарий, а затем рапортующий об
успехе выполнения действий или о возникших в процессе ошибках.
Для содержания и обработки полученных данных чаще всего принимается в
обращение конфигурационная база данных под различными СУБД: информация об
объектах мониторинга представлена, как набор конфигурационных единиц.
Каждое сетевое устройство — это своего рода единица, все это хранится в единой
базе данных. Такое представление помогает в последствии интегрировать систему
мониторинга с визуальными представлениями: диаграммами, графиками и др.
Так как технологии не стоят на месте, с течением времени постоянно
появляются и новые возможности систем мониторинга, из-за этого их структура
сильно видоизменяется.
Например, одна из тонкостей возникла при появлении и большом
распространении виртуализации: если ранее была необходимость отслеживать
состояние только физических серверов, то теперь на каждом из них может быть
ещё несколько виртуальных.
Системы мониторинга на столько обширны, что при необходимости можно
настраивать даже стандартные сервисные операции. В пример можно привести
архивацию файлов в выбранной категории диска, при его заполнении на
определенный процент пространства.
При разработке и последующем внедрении систем мониторинга состояния
оборудования в первую очередь требуется определиться с объектами, за которыми
будет осуществлено наблюдение, а также события и показатели, которые могут
принести значительный ущерб организации. События и показатели, собственно и
определяют количество оповещений при поломке, частоту сканирования и прочие
параметры, и последствия. Для больших инфраструктур, вроде дата-центров, перед
финальным внедрением обычно разворачивают тестовую площадку, где можно
оценить целесообразность сделанных решений и определений параметров
пороговых значений.
Внедрение подобных решений особенно важно при использовании
сервисного подхода к деятельности ИТ-подразделений, когда все процессы
10
пересматриваются с точки зрения предоставляемых подразделением ИТ-сервисов.
Каждый бизнес-сервис корпоративной системы по возможности интерпретируется
как ИТ-сервис, задается определенный уровень качества его предоставления. Далее
он описывается в системе мониторинга как набор взаимосвязанных компонентов
ИТ-инфраструктуры.
В итоге формируется Соглашение об уровне качества сервисов (Service Level
Agreement, SLA). Согласно SLA система осуществляет сбор и хранение
информации о качестве предоставления ИТ-сервисов. На базе накопленной
информации формируются отчеты за определенный период времени. Анализ
отчетной информации помогает осуществлять:
- пересмотр уровня предоставления ИТ-сервисов;
- реорганизацию деятельности ИТ-подразделения;
- модернизацию ИТ-инфраструктуры.
Системы мониторинга могут быть ориентированы на потребителей разного
уровня. Для больших систем обычно используется огромное количество
разнообразных функций, для маленьких обычно достаточно общего анализа узлов
и отправки оповещений. Среди основных функций мониторингов можно выделить
следующие:
- Слежение. Основная функция, включающая в себя периодический сбор
показателей с узлов оборудования, сервисов и т.п.
- Хранение информации. Дополнение к слежению. Осуществляется сбор
информации по основным показателям каждого объекта мониторинга, для
хранения обычно используются базы данных.
-
Построение отчётов. Осуществляется как на основе текущих данных
слежения,
так
и
по
долговременно
хранимой
информации.
Например,
долговременный мониторинг нагрузки на сервер может предупредить, что
потребляемые ресурсы всё время увеличиваются, значит необходимо увеличить
доступные средства или перенести часть задач на другой сервер, выбор которого
тоже можно осуществить на основе долговременного отчёта.
11
- Визуализация. Отчёты в визуальном представлении: в виде графиков,
всплывающих подсказок, диаграмм. Помогают лёгкому восприятию информации,
а также возможен выбор для визуализации нескольких, самых важных
индикаторов, тогда как в отчётах будут представлены все показатели.
Поиск узких мест. На основе аналитических данных мониторинга
-
возможно узнать, в какое именно месте инфраструктуры наиболее сильно снижает
общие показатели производительности.
-
Автоматизация сценариев. Функция освобождает администраторов от
рутинных задач.
Благодаря
наличию
средств
для
реализации
всех
этих
функций
администратору больше не нужно проверять вручную состояние каждой
составляющей системы, проблемы решаются и поломки устраняются более
оперативно, диагностика осуществляется многомерно и точно, а также можно
планировать расширение инфраструктуры. [1]
Использование систем мониторинга и управления позволяет:
- оптимизировать использование информационных ресурсов;
- повысить качество ИТ-сервисов и скорость устранения сбоев в работе
оборудования и программного обеспечения, минимизировать время простоя
сервисов;
- обеспечить надежность, безопасность и согласованное функционирование
всех компонентов ИТ-инфраструктуры;
- облегчить модернизацию ИТ-инфраструктуры;
- в несколько раз повысить эффективность работы ИТ-подразделения.
1.2 Анализ существующих систем мониторинга состояния оборудования
информационного центра
Одной из самых распространенных систем является Microsoft SCOM.
System Center Operations Manager – система сквозного мониторинга от
Microsoft, в том числе активного слежения за состоянием сетей (наблюдение за
любыми сетевыми устройствами, поддерживающими SNMP, вплоть до уровня
портов, а также обнаружение виртуальных локальных сетей и коммутаторов в
12
таких сетях). В последних версиях появилась возможность слежения не только за
системами, под управлением операционных систем семейства Windows, но и за
гетерогенными средами, включающими UNIX и Linux. System Center Operations
Manager предназначен главным образом для организаций с числом машин более
500 и числом серверов более 30. Для меньших организаций существует продукт
System Center Essentials, включающий в себя часть функционала продуктов System
Center
Operations
Manager
и
System
Center
Configuration
Manager,
но
предназначенный для малых и средних предприятий. Сам продукт, начиная с
версии 2012 года, является сервисом высокой доступности, благодаря отсутствию
серверов управления. В пуле с несколькими серверами нагрузка балансируется и
обеспечивается доступность. На каждом сервере работает служба конфигурации,
причём хранение данных реализовано не в памяти или XML-файлах, а в базе
данных.
Microsoft также предоставляет возможность интеграции продукта с System
Center Service Manager, благодаря чему появляется возможность автоматического
создания инцидентов на основе оповещений SCOM.
Что касается тонкого слежения за виртуальными средами, есть средства для
интеграции с пакетом System Center Virtual Machine Manager, который будет
передавать System Center Operations Manager информацию о виртуальных
машинах, службах, частных облаках и узлах.
Основные преимущества:
- исключительная производительность и работоспособность приложений
для программных сред Microsoft;
- обеспечивает сквозное управление службами для сервисов вашего центра
обработки данных;
- способствует улучшению эффективности и управления средами центров
обработки данных;
- унифицированный контроль в рамках частных и общедоступных облачных
сервисов.
- поддержка Windows PowerShell 2.0 с набором новых командлетов.
Одно из главных достоинств System Center Operations Manager – продвинутая
визуализация всего огромного собранного набора данных, в основном в виде
13
графиков и диаграмм, причём визуализация доступна не только в специальной
консоли программы, но и через веб-интерфейс. Элементы представления же можно
подвергать тонкой настройке, пример интерфейса на рисунке 1.
Версия 2012 поддерживает расширенное наблюдение за смешанными
средами, а именно за машинами под управлением Unix и Linux (так называемых
«систем *nix: агент *nix поддерживает HP-UX 11i версии 2 или 3 на базе PA-RISC
и IA64, Sun Solaris 9 на базе SPARC и 10 на базе SPARC и 32-разрядной платформы,
Red Hat Enterprise Linux 4, 5 и 6 на 32- и 64-разрядных платформах, Novell SuSE
Linux Enterprise Server 9 на 32-разрядной платформе, 10 SP1 и 11 на 32- и 64разрядных платформах, а также IBM AIX 5.3, 6.1 и 7.1 на базе POWER. Для
мониторинга используются 2 ключа: sudo (для конфигурирования стандартной
учётной записи с нужным уровнем доступа) и SSH (для безопасного обслуживания
агента). [2]
Рисунок 1 – Настройка визуального представления панели SCOM
Итак, можно сказать, что System Center Operations Manager - это мониторинг
высокой доступности с упрощённой инфраструктурой, использующийся в
14
организациях с большим парком машин под управлением различных семейств
операционных систем, включающий множество разнообразных средств слежения,
в том числе за сетевым оборудованием, а также расширенные средства
представления собранной информации.
Однако у данной системы есть ряд недостатков с точки зрения решения
конкретной технической задачи:
- система мониторинга охватывает множество общих показателей системы,
но непригодна для слежения за специфическими параметрами;
- до сих пор работа с операционными системами вне семейства Windows
нестабильна;
- необходимость установки сервиса агента;
- невероятная громоздкость и трудоёмкость настройки продукта «под себя»:
система дольше подходит для мониторинга общего состояния и сбора основных
сведений о большой структуре (например, множество клиентских и серверных
машин в домене).
Последний
недостаток
обуславливает
отказ
от
этой
системы
как
специфического мониторинга проекта. Необходимо разворачивать глобальный
сервис, устанавливать агентское программное обеспечение на все отслеживаемые
машины, и настраивать множество параметров – отменять показатели, собираемые
по умолчанию. Система относится к продуктам для контролирования общего
состояния большой ИТ-структуры без слежения за конкретными специфическими
показателями, а значит совершенно не подходит под поставленные проектом цели.
Также существенный недостаток системы состоит в высокой стоимости
данного программного продукта.
Zabbix.
Zabbix – свободно распространяемая система для комплексного мониторинга
сетевого оборудования, серверов и сервисов. Состоит из четырёх частей:
- сервер мониторинга (ядро) выполняет периодический опрос и получение
данных, обрабатывает их, анализирует, также осуществляет запуск скриптов для
рассылки оповещений. Может удаленно проверять сетевые сервисы, является
хранилищем, в котором хранятся все конфигурационные, статистические и
15
оперативные данные. Не может располагаться на сервере под управлением
операционной системы семейства Windows, а также OpenBSD.
- прокси собирает данные о производительности и доступности от имени
Zabbix сервера. Все собранные данные заносятся в буфер на локальном уровне и
передаются Zabbix серверу, к которому принадлежит проксисервер.
-
агент специальный демон, который запускается на отслеживаемых
объектах и предоставляет данные серверу, осуществляя контроль локальных
ресурсов и приложений (таких как жесткие диски, память, статистика процессора
и т. д.) на сетевых системах, т.е. эти системы должны работать с запущенным
Zabbix агентом Zabbix агенты являются чрезвычайно эффективными из-за
использования встроенных системных вызовов для сбора информации о
статистике. Zabbix-агенты поддерживаются не только на *nix операционных
системах, но и на AIX и Windows. Поддерживаемые платформы указаны в таблице
1.
Рисунок 2 - Веб-интерфейс мониторинга Zabbix
- веб-интерфейс средство визуального представления Zabbix, реализован
на PHP, для запуска требует наличия веб-сервера, представлен на рисунке
2.
Zabbix поддерживает платформы, указанные в таблице 1.
16
Таблица 1 - Поддерживаемые платформы
Платформа
ZABBIX-сервер
ZABBIX-агент
AIX
+
+
FreeBSD
+
+
HP-UX
+
+
Linux
+
+
Mac OS X
+
+
Novell Netware
-
+
Open BSD
+
+
SCO Open Server
+
+
Solaris
+
+
Tru64/OSF
+
+
-
+
Windows NT 4.0,
Windows 2000, Windows
2003, Windows XP,
Windows Vista
С помощью Zabbix можно осуществлять распределённый мониторинг до
10 000 узлов, где конфигурация младших узлов контролируется старшими в
иерархии. Также продукт включает централизованный мониторинг лог-файлов,
возможность создавать карты сетей (вручную по шаблону), выполнение запросов в
различные базы данных, генерацию отчётов и тенденций, выполнение сценариев
на основе мониторинга, поддержку интеллектуального интерфейса управления
платформами (IPMI).
Zabbix предоставляет гибкие возможности по настройке условий-триггеров,
которые включаются при авариях и неполадках, и система начинает моргать
лампочками (на самом деле красными квадратиками), оповещая администратора о
17
возможной поломке. Также, при включении триггера, веб-интерфейс даже
начинает попискивать на манер будильника, Zabbix достаточно самостоятелен и
сможет отправить уведомление на почту, в jabber или sms с помощью gsm-модема,
или даже попытаться самостоятельно поднять упавший сервис, выполнив заранее
определенные действия, которые запускаются при срабатывании определенных
триггеров.
Для отображения логической структуры сети можно вручную создавать
карты сети (пример которой представлен на рисунке 3), отображающие именно
расположение узлов сети и связей между ними, причём текущее состояние узлов
будет отображаться на карте. [3]
Рисунок 3 - Карты сетей в Zabbix
Автоматическое обнаружение:
- автоматическое обнаружение по диапазону IP-адресов, доступным
сервисам и SNMP проверка;
- автоматический мониторинг обнаруженных устройств;
- автоматическое удаление отсутствующих хостов;
- распределение по группам и шаблонам в зависимости от возвращаемого
результата.
18
Zabbix имеет внушительным арсеналом фунций. Они делают работу с
помощью этой программы, поразительно удобной и простой. Наблюдение за сетью
становится элементарным, так же в нем есть прекрасная вфунция сравнимая с
«автопилотом», ведь она позволяет без участия специалистов, совершать
имитацию их действий.
В итоге мы получаем наиболее подходящую для наших целей систему,
которую также можно использовать в качестве «скелета» к своим собственным
скриптам мониторинга. Однако в очередной раз стоит отметить громоздкость
сервиса, отсутствие полной документированности возможностей проекта, а также
необходимость установки агентского программного обеспечения на все машины.
В
качестве
дополнительного
минуса
стоит
отметить
сложность
делегирования прав – машина с сервисом зачастую управляется операционной
системой семейства *nix, что делает трудоёмким взаимодействие с доменными
пользователями и правами из Active Directory (Windows системы).
Nagios.
Nagios (первоначально Netsaint) – свободно распространяемая программа для
мониторинга систем и сетей. Изначально разработана для операционных систем на
базе Linux, сейчас одинаково хорошо работает также и под Sun Solaris, FreeBSD,
AIX и HPUX.
С помощью этой программы доступны комплексное наблюдение за всей ИТинфраструктурой, выявление проблем сразу после их возникновения, возможность
делиться полученным при наблюдении данными с заинтересованными лицами,
мониторинг безопасности системы, и, как следствие, сокращение времени простоя
и коммерческих потерь.
Возможности:
- мониторинг сетевых служб (SMTP, POP3, HTTP, NNTP, ICMP, SNMP);
- мониторинг состояния хостов (загрузка процессора, использование диска,
системные логи) в большинстве сетевых операционных систем;
- поддержка удаленного мониторинга через шифрованные туннели SSH
или SSL;
- возможность построение карт сетей (пример на рисунке 4);
19
- простая архитектура модулей расширений (плагинов) позволяет, используя
любой язык программирования по выбору (Shell, C++, Perl, Python, PHP, C# и
другие), легко разрабатывать свои собственные способы проверки служб;
- параллельная проверка служб;
- возможность определять иерархии хостов сети с помощью «родительских»
хостов, позволяет обнаруживать и различать хосты, которые вышли из строя, и те,
которые недоступны;
Рисунок 4 - Карта сети в Nagios
- отправка оповещений в случае возникновения проблем со службой или
хостом (с помощью почты, пейджера, смс, или любым другим способом,
определенным пользователем через модуль системы);
- возможность определять обработчики событий, произошедших со
службами или хостами для про-активного разрешения проблем;
- автоматическая ротация лог-файлов;
- возможность организации совместной работы нескольких систем
мониторинга с целью повышения надёжности и создания распределенной системы
мониторинга;
20
Отказом от использования системы послужили следующие причины:
- «общий» характер мониторинга показателей;
- проблема взаимодействия с серверами под управлением Windows;
- «сетевая» направленность мониторинга;
- и дополнительной причиной стало отсутствие опыта с данным
программным продуктом в компании. [4]
Cacti.
Cacti - бесплатное приложение мониторинга, позволяющее собирать
статические данные за определённые временные интервалы и отображать их в
графическом виде при помощи RRDtool утилиты, предназначенной для работы с
круговыми базами данных (Round Robin Database), которые используются для
хранения информации об изменении одной или нескольких величин за
определенный промежуток времени.
Стандартные шаблоны сбора включают статистику по загрузке процессора,
выделению
оперативной
памяти,
количеству
запущенных
процессов,
использованию входящего/исходящего трафика.
Cacti написан в инфраструктуре Apache-PHP-MySql, позволяет настраивать
сбор
и
отображение
данных
мониторинга
на
основе
веб-интерфейса,
представленного на рисунке 5, с юзер-френдли организацией. Есть возможность
дописывания собственных агентов сбора данных.
Интерфейс отображения статистики, собранной с устройств, представлен в
виде дерева, структура которого задается самим пользователем. Как правило,
графики группируют по определенным критериям, причем один и тот же график
может присутствовать в разных ветвях дерева. Есть вариант просмотра заранее
составленного набора графиков, и есть режим предпросмотра. Каждый из графиков
можно рассмотреть отдельно, при этом он будет представлен за последние день,
неделю, месяц и год.
Возможно самому выбрать временной промежуток, за который будет
сгенерирован график. [5]
21
Рисунок 5 - Интерфейс Cacti
Возможно самому выбрать временной промежуток, за который будет
сгенерирован график. [5]
Достоинства Cacti:
- высокая скорость развертывания при минимальном дополнительном
кодировании;
- простота и удобство интерфейса просмотра диаграмм и их настройки.
Недостатки Cacti:
- довольно быстрое нарастание количества однотипных настроек в случае
большого числа сред и серверов;
- ограниченная производительность «неродных» JMX решений для Cacti;
- отсутствие возможности инвентаризации.
Логика работы системы основана на обслуживании ряда устройств (Devices
— в терминологии Cacti). Каждое устройство — это хост, к которому есть доступ
по сети, то есть оно характеризуется IP-адресом или DNS-именем. С устройством
ассоциированы хранилища данных (Data Sources). Каждое такое хранилище
обслуживает один график (Graph), причем на этом графике может рисоваться
несколько переменных — хранилище для них всех будет одно. Хранилище
22
создается на основе шаблона данных (Data Template), который задает соответствие
входных величин (полученных из SNMPзапросов или из скриптов) полям в базе
данных и устанавливает дополнительные параметры хранения этих величин. Сами
же входные величины получаются из методов сбора данных (Data Input Methods)
или запросов (Data Queries). Первые предназначены для величин, количество
которых заранее известно (например, количество процессов — это всегда одно
целое число), а вторые — наоборот (например, статистика с сетевых интерфейсов,
число которых может быть различным). График генерируется из круговой базы
данных (хранилища) каждый раз заново, когда загружается страничка. Алгоритм и
параметры его создания задаются шаблоном графика (Graph Template). Шаблоны
хостов (Host Templates) упрощают работу с однотипными устройствами и
позволяют привязать определенные шаблоны графиков и запросы к данному типу
хоста.
Например, для маршрутизаторов Cisco — один набор графиков, а для UNIXсерверов — другой.
Cacti позволяет завести несколько пользователей и разграничить их права как
на просмотр статистики, так и на управление системой. Логика разделения доступа
позволяет для каждого пользователя установить общую политику («Запретить» или
«Разрешить»), а затем сделать из нее исключения.
В итоге Cacti позволяет рисовать графики только основных показателей
производительности, тогда как попытки мониторинга нестандартных показателей
сильно снижают производительность продукта. Также проекту очень часто
необходима инвентаризация (перераспределение ресурсов и планирование
модернизации), а в данном пакете она отсутствует.
1.3 Сравнительный анализ систем мониторинга состояния
оборудования информационного центра
По ряду критериев проведен анализ систем мониторинга состояния
оборудования информационного центра. Критерии выбирались из самых
необходимых по значимости для системы: диаграммы (K1), отчёты (K2),
логическая группировка (K3), события (K4), прогнозирования событий (K5),
автоматическое обнаружение (K6), агент (K7), протокол SNMP (K8), Syslog (K9),
23
внешние скрипты (K10), плагины (K11), сложность создания плагинов (K12),
триггеры (K13), инвентаризация (K14), карты (K15). [6]
Таблицы 2, 3, 4 показывают функционал рассмотренных систем.
Таблица 2 – Функционал систем мониторинга по критериям K1-K5
Название
Диаграммы, K1
Отчёты
LA, K2
Логическая События,
групK4
пировка, K3
Прогнозирование
событий, K5
Cacti
+
+
+
+
+
Nagios
+
Через
плагин
+
+
-
Zabbix
+
+
+
+
+
Таблица 3 - Функционал систем мониторинга по критериям K6-K10
Название Автоматическое Агент,
обнаружение,
K7
K6
SNMP, K8
Syslog, K9
Внешние
скрипты,
K10
Cacti
Через плагин
-
+
Через плагин
+
Nagios
Через плагин
+
Через плагин
Через плагин
+
Zabbix
+
+
+
+
+
Таблица 4 - Функционал систем мониторинга по критериям K11-K15
Название
Плагины,
K11
Сложность
создания
плагинов,
K12
Триггеры
Инвентаризация,
K14
Карты, K15
Cacti
+
Средний
+
-
Через плагин
(Weathermap)
Nagios
+
Лёгкий
+
Через плагин
Динамические и
настраиваемые
Zabbix
+
Лёгкий
+
Через плагин
+
/ Тревоги.
K13
24
Рассмотрев данные системы, выявляется, что они предоставляют одинаковые
минимальные базовые функционалы: мониторинг сети, группировка устройств,
автоматическое обнаружение, гибкое конфигурирование, визуализация данных и
доступ через интерфейс, события и реакция на них в виде оповещений и
выполнения команд, возможность расширения существующей функциональности
через плагины, хранения конфигурации и истории мониторинга в БД, создание карт
сети и управление доступом. Но одним из больших минусов является сложность
систем, для работы с которыми нужен опытный специалист. Разрабатываемая же
система мониторинга состояния оборудования информационного центра имеет
одно из требований – это доступный интерфейс, для не опытных пользователей.
1.4 Выбор инструментальной среды разработки и языка
программирования
1.4.1. Выбор языка программирования
В качестве возможных языков программирования были рассмотрены php, С#,
Java. Все представленные языки являются объектно-ориентированными. В основе
концепции объектно-ориентированного программирования лежит понятие объекта
— некой сущности, которая объединяет в себе поля (данные) и методы
(выполняемые объектом действия).
В современных ОО языках используются механизмы:
1. Наследование. Создание нового класса объектов путём добавления новых
элементов (методов). Некоторые ОО языки позволяют выполнять множественное
наследование, то есть объединять в одном классе возможности нескольких других
классов.
2. Инкапсуляция. Сокрытие деталей реализации, которое позволяет вносить
изменения в части программы безболезненно для других её частей, что
существенно упрощает сопровождение и модификацию ПО.
3.
Полиморфизм.
При
полиморфизме
некоторые
части
(методы)
родительского класса заменяются новыми, реализующими специфические для
данного потомка действия. Таким образом, интерфейс классов остаётся прежним,
25
а реализация методов с одинаковым названием и набором параметров различается.
В ООП обычно применяется полиморфизм подтипов (называемый при этом просто
«полиморфизмом»), нередко в форме позднего связывания. [6]
Любой из языков имеет возможность работы с базами данных. Кроме того,
любой из языков позволяет развернуть приложение как на сервере, так и используя
обычный персональный компьютер.
Был выбран язык C# так как он значительно облегчает создание как
клиентской части приложения, так и серверной части. Все необходимые
компоненты для создания программного продукта имеются в библиотеках IDE
Microsoft Visual Studio. При отсутствии какой-либо библиотеки, ее можно
спокойно найти в той же самой IDE, т.к. они в свободном доступе для скачивания
и установки. Так же вся документация имеется на официальном сайте разработчика
языка.
1.4.2. Выбор системы управления базой данных
Благодаря тому, что в проектируемом продукте должны сохраняться
некоторые данные, возникает проблема с подбором подходящей системы
управления базой данных (СУБД). Из действующих СУБД, которые можно
приобрести бесплатно, выделим:
 SQL Server Compact Edition;
 Microsoft SQL Server;
 IBM DB2 Express-C;
 MYSQL;
 Firebird.
SQL Server Compact Edition –
Продукт от компании Microsoft. Имеет
ограничение на максимальный размер файла базы данных – 4 ГБ. Доступ к одному
файлу базы данных с разных компьютеров не поддерживается, но доступ с разных
процессов одного компьютера возможен. Несмотря на то, что основная хранимая
информация текст – объем базы может вырасти на много больше чем 4 ГБ. Кроме
того, доступ с разных устройств к файлу базы данных просто необходим.
26
Microsoft SQL Server – Ещё один продукт от компании Microsoft. Основной
используемый язык запросов – Transact-SQL, создан совместно Microsoft и Sybase.
Transact-SQL является реализацией стандарта ANSI/ISO по структурированному
языку запросов (SQL) с расширениями. Практически отсутствует ограничение
размера файла базы данных, как и количество подключаемых машин.
IBM DB2 Express-C – бесплатный дистрибутив из семейства систем
управления реляционными базами данных, выпускаемых корпорацией IBM.
Ограничения DB2 Express-C:
 платформы: Linux (x86, x86-64, POWER), Windows (x86, x86-64), Solaris
(x86-64), Mac OS X (x86-64);
 один экземпляр СУБД использует не более двух процессорных ядер,
независимо от того, сколько процессорных ядер имеется на сервере;
 один экземпляр СУБД использует не более 2 Гбайт оперативной памяти.
Это верно для версии 9. Но уже в DB2 Express-C 10-й версии, максимальный объем
памяти удвоен и составляет 4 ГБ.
Общее число процессоров и памяти в операционной системе может быть
любым, но ресурсы сверх указанных ограничений не будут применяться СУБД. Это
осуществляется на автомате.
MySQL – свободная реляционная система управления базами данных.
Исполнение и техническую поддержку MySQL выполняет бизнес-корпорация
Oracle. MySQL может быть решением как для малых, так и для средних
приложений. Зачастую MySQL применяется как сервер, к которому обращаются
локальные или удалённые пользователи, тем не менее в дистрибутив входит
библиотека внутреннего сервера, позволяющая включать MySQL в автономные
программы.
Гибкость СУБД MySQL обеспечивается поддержкой большого количества
типов
таблиц:
клиенты
могут
выбрать
как
таблицы
типа
MyISAM,
поддерживающие полнотекстовый поиск, так и таблицы InnoDB, поддерживающие
транзакции на уровне отдельных записей. Более того, СУБД MySQL поставляется
со специальным типом таблиц EXAMPLE, представляющим принципы создания
27
новых типов таблиц. Благодаря открытой архитектуре и GPL-лицензированию, в
СУБД MySQL очень часто разрабатываются и добавляются новые типы таблиц.
Firebird (FirebirdSQL) – компактная, кроссплатформенная, свободная система
управления базами данных (СУБД), работающая на Linux, Microsoft Windows и
разнообразных Unix платформах.
В качестве преимуществ Firebird можно отметить многоверсионную
архитектуру (параллельная обработка оперативных и аналитических запросов:
читающие пользователи не блокируют пишущих), компактность (дистрибутив
5Mb), высокую эффективность и мощную языковую поддержку для хранимых
процедур и триггеров.
Данные, которые будет использовать разрабатываемое приложение должны
быть доступны с любого рабочего места, т.к. продуктом будет пользоваться не один
специалист. Так же следует сказать, что база должна быть бесплатная,
следовательно, продукт от Microsoft не подходит. Среди выше перечисленных
больше подходит MySQL, эта СУБД и будет использоваться в разработке.
28
2 Разработка системы мониторинга состояния оборудования
информационного центра
2.1 Основные задачи и требования к системе мониторинга состояния
оборудования информационного центра
Основной задачей является разработать систему мониторинга состояния
оборудования информационного центра, позволяющую производить слежение за
маршрутизаторами, так и рабочими станциями (персональными компьютерами
операторов центра). Так же для достижения минимальных затрат необходимо
ориентироваться на внедрение протоколов и систем, находящихся в открытом
доступе, с максимальным использованием готовых наработок из фонда свободного
программного обеспечения.
Система должна удовлетворять следующим требованиям:
- минимальные требования к аппаратным ресурсам;
- открытые исходные коды всех составляющих комплекса;
- расширяемость и масштабируемость системы;
- стандартные средства предоставления диагностической информации;
- наличие подробной документации на все используемые программные
продукты;
- способность работать с оборудованием различных производителей;
- доступный интерфейс, для не опытных пользователей.
Свойства мониторинга зависят от множества факторов, таких как:
конфигурации сети, действующих в ней сервисов и служб, конфигурации
установленного ПО и его возможностей.
Самыми простейшими и необходимыми элементами мониторинга являются:
- проверка физической доступности оборудования;
- проверка состояния запущенных служб и сервисов;
- проверка параметров, специфичных для сервисов и служб конкретного
окружения;
29
- сбор информации о рабочей станции (персональном компьютере
оператора).
2.2 Моделирование системы мониторинга состояния оборудования
информационного центра
При
моделировании
информационного
центра,
системы
мониторинга состояния
будем
использовать
оборудования
функциональный
метод
декомпозиции. Данный метод на позволяет выделять все необходимые ветви
системы, для создания которой собственно и разрабатывается модель.
Алгоритм системы мониторинга состояния оборудования можно разделить
на следующие составные части:
1.
Подсистема сбора данных
- данная подсистема отвечает за
первоначальную и свою очередь самую важную работу системы, она отсылает
запрос на клиентские рабочие станции, сервера и другое оборудование, с целью
получить ответ на запрос, тем самым получая информацию о состоянии системы,
чтобы в последствии передать соответствующую информацию администратору и
сориентировать его понимание ситуации как в целом, так и в частном, при аварии
2.
Подсистема хранения -
данная система, несет ответственность за
хранение, архивацию всех действий в системе вызывающих сбои, очередных
проверок или же проверок инициатором которой является сам администратор.
Подсистема на прямую связана с базой данных.
3.
Подсистема
анализа
данных
–
подсистема
необходимая
для
постоянного просмотра данных, собранных подсистемой хранения. Это нужно, для
того, чтобы выявить уязвимости в системе и предотвратить из-за них в следующий
раз поломку, которая может негативно сказаться на работе системы в целом.
4.
Подсистема
оповещения
–
подсистема
сигнализирующую
администратору о каких-либо неисправностях, поломках или же просто
некорректной работе устройства, за которым ведется постоянное наблюдение.
5.
Подсистема вывода - отвечает за представление информации о работе
системы и результатов проверок в виде, удобном для восприятия пользователем.
30
Для взаимодействия
с конечным пользователем, безусловно, необходим
интерфейс, предоставляющий удобную навигацию между различными объектами
мониторинга. Данная подсистема позволяет администратору визуально наблюдать
за всей накопленной информацией о системе, о устройства, находящихся и сам
мониторинг всех устройств по системе в целом.
Рассмотренные подсистемы необходимы для оперативного мониторинга
состояния
оборудования,
так
же
осуществляющего
оценку
текущей
работоспособности и немедленную реакцию на разнообразные внештатные
ситуации работы систем.
На рисунке 6 приведена возможная архитектура системы, удовлетворяющей
этим требованиям.
Рисунок 6 ‒ Архитектура системы мониторинга
Фактически можно говорить о том, что типовые особенности, наложенные на
конкретную архитектуру, выражают требования к функциональной модели
разрабатываемой системы. По методологии IDEF0 для программного комплекса
31
мониторинга разработана функциональная модель, определяющая структуру и
связи подсистем системы мониторинга. Функциональная модель процесса
мониторинга, построенная согласно данному стандарту, приведена на рисунках 7 и
8.
Рисунок 7 ‒ Контекстная диаграмма верхнего уровня
Представленная функциональная модель состоит из двух диаграмм:
родительской диаграммы (А0) и диаграммы, представляющей ее декомпозицию.
Основной функциональный блок, который определяет систему в качестве
единого модуля, детализируется на другой диаграмме с помощью шести блоков,
соединенных интерфейсными дугами. Эти блоки представляют основные
подфункции исходной функции. Данная декомпозиция выявляет полный набор
подфункций, каждая из которых представлена как блок, границы которого
определены интерфейсными дугами.
В процессе декомпозиции, функциональный блок, представленный на
родительской диаграмме, был подвергнут детализации на второй диаграмме.
32
Рисунок 8 ‒ Дочерняя диаграмма
Получившаяся диаграмма второго уровня содержит функциональные блоки,
отображающие главные подфункции функционального блока родительской
диаграммы и является дочерней. Декомпозиция была произведена в соответствии
с шестью основными модулями, которые должны быть включены в подсистему
мониторинга. Таким образом, блок, представленный на родительской диаграмме,
был разбит на следующие функциональные блоки:
– обработка события (А1);
– сбор информации об этом событии (А2);
– сохранение собранной информации (А3);
– анализ сохраненной информации (А4);
– распространение проанализированной информации (А5);
– отобразить распространенную информацию (А6).
33
Управление будет воздействовать на все шесть функциональных блоков,
представленных на диаграмме, декомпозирующей родительскую диаграмму. [8]
Для более подробного понимания постороения системы мониторинга
состояния
оборудования
информационного
центра, считаю
необходимым
построение диаграмм вариантов использования и классов.
2.2.1 Диаграмма вариантов использования системы мониторинга
состояния оборудования информационного центра
Программный продукт будет находиться на персональном компьютере
администратора сети. При запуске системы администратором, программа
автоматически
начинает
получать
данные
внутренней
локальной
необходимых для наблюдения за всеми ее узлами.
Рисунок 9 – Диаграмма вариантов использования
34
сети
На рисунке 9 представлена диаграмма вариантов использования системы.
Администратору предоставляется на выбор шесть действий:
1. Просмотр состояния активности рабочих станций.
2. Добавление рабочей станции.
3. Просмотр записей.
4. Просмотр списка операторов.
5. Отправить ping до узла. Далее выбираем какой именно узел наст
интересует.
6. Просмотр списка рабочих станций.
Запрос информации с рабочих станций производится 2 раза в сутки. Первый
раз производится в начале рабочего дня, для понимая состояния техники на начало
смены оператора и второй раз сбор информации происходит перед окончанием
смены оператора, чтобы исключить возможность поломки оборудования самим
оператором и недопущения остановки в работе организации.
2.2.2 Диаграмма классов системы мониторинга состояния
оборудования информационного центра
Для того, чтобы более конкретно определить работу системы мониторинга,
нам
потребуется
графическое
представление
статической
структуры
декларативных элементов системы (классов, типов и т. п.). Для этого
воспользуемся диаграммой классов создаваемой системы мониторинга состояния
оборудования информационного центра. Диаграмма классов представлена на
рисунке 10.
Диаграмма классов содержит такие классы, как: «Сервер программный»,
«Канал»,
«Серверы»,
«Компьютеры»,
«Орг.
Техника
Сетевая»,
«Маршрутизаторы», «Отображение состояний», «Интерфейс сервера», «БД».
Класс «Канал» отвечает за передачу запросов, так же имеет собственный
атрибут состояния, который позволяет фиксировать работоспособность канала
связи.
35
Рисунок 10 – Диаграмма классов
Все необходимые данные, получаем через класс «Сервер программный». К
классам «Маршрутизаторы», «Орг. Техника Сетевая», «Компьютеры», «Серверы»
отправляются запросы через класс «Канал», так же через него приходят обратно и
ответы на запросы.
После чего происходит действие в классе «Сервер программный»,
определяющее какой класс будет задействован далее, это может быть простой
просмотр информации о системе, тогда задействуются классы «Отображение
36
состояния» и «Интерфейс сервера» для визуального просмотра интересующих нас
данных. Или же может происходить автоматическая проверка в системе с
последующей записью в базу данных, тогда класс «Сервер программный»
обращается к классу «БД» для записи полученной информации в базу данных. [16]
2.3 Разработка моделей БД системы мониторинга состояния
оборудования информационного центра
Для нормального функционирования программного продукта необходима
качественно
построенная
база
данных.
При
построении
базы
данных
использовался программный продукт Navicat Premium.
Navicat Premium – это одна из самых популярных и интерпритированных
графических программ, связанных с разработкой и контролем баз данных MySQL,
PostgreSQL и Oracle, имеющая наглядный интерфейс. Данная программа получает
постоянные обновления своего софта, что позволяет использовать актуальные
версии MySQL, PostgreSQL и Oracle. В утелите доступен не плохой
пользовательский интрефейс, что несомненно позволяет порадовать клиента
легким созданием, организацией и обменом информацией безопасным и простым
способом. Одним из важных преимущест, служит подключение к локальным и
удаленным серверам MySQL, PostgreSQL и Oracle, при все иметь возможность
использовать ряд инструментов таких как администрирование баз данных,
функции импорта и экспорта, и конечно же, создание резервных копий и пересылки
данных. Поддерживает несколько соединений для локальных и удалённых MySQL,
PostgreSQL и Oracle серверов. Сервер не обязательно должен работать только на
какой-то одной платформе, будет достаточно любой из платформ: Linux, Unix, Mac
OS X и Windows.
В
ходе
ряда
проведенных
тестов
было
выявлено
повышение
производительности системы при уменьшении объема используемой таблицы. В
следствии этого было принято решение разделить хранимые данные на несколько
таблиц, в результате чего образовалась модель «сущность-связь».
37
Для создания модели «сущность-связь», необходимо определить какие
сущности будут входить в ее состав:
 пользователи – хранит информацию о пользователях (имя, фамилия и
т.д.);
 записи – хранят все считанные данные рабочих станций;
 рабочие станции – хранит информацию для контроля за оборудованием;
Рисунок 11 – Логическая модель базы данных
После определения сущностей, необходимо задать для каждой атрибуты.
Сущность «пользователи» содержит: idПользователя для системы и его данные –
имя, фамилия, отчество, дата закрепления за рабочей станцией. Сущность «Записи»
содержит: отсылку к рабочей станции, каждая запись имеет: дату последней
проверки, информация о видео карте, жестком диске, сетевом интерфейсе,
38
процессоре, оперативной памяти, установленного программного обеспечения с
датой установки, информацию о системе, все диски системы. Сущность «рабочие
станции» включает: Id рабочей станции, Id пользователя, ip – адрес станции, mac –
адрес станции.
После того как определены все сущности и атрибуты, стоит определить связи
между сущностями и атрибуты объединяющие их:
 «Рабочие станции» Записи (IdРабочей станции);
 «Рабочие станции» Пользователи (IdПользователя).
Логическая модель, представленная на рисунке 11, приведена к третьей
нормальной форме, т.е. она содержит в любом достигнутом значении только одно
значение для каждого из атрибутов, каждый не ключевой атрибут неприводимо
зависит
от
ее
потенциального
ключа,
и
отсутствуют
транзитивные
функциональные зависимости не ключевых атрибутов от ключевых.
Рисунок 12 – Физическая модель базы данных
Теперь, чтобы создать базу данных на основе логической модели,
необходимо ее преобразовать в физическую, для этого упростим названия
некоторых атрибутов.
В физической модели, показанной на рисунке 12, у названия атрибутов и
сущностей не может быть пробела, вместо него был использован знак
39
подчеркивания, так же надо определить заранее тип данных у атрибутов, например,
у всех атрибутов, начинающихся с «id_» тип данных int.
2.4 Создание БД системы мониторинга состояния оборудования
информационного центра
В СУБД MYSQL с помощью SQL запросов была создана база данных
db_monitor и уже в базе таблицы из физической модели данных.
Создание таблицы «записи»:
DROP TABLE IF EXISTS `Записи`;
CREATE TABLE `Записи` (
`idЗаписи` int(255) NOT NULL,
`idРабочей станции` int(255) DEFAULT NULL,
`Дата последней проверки` datetime DEFAULT NULL ON UPDATE
CURRENT_TIMESTAMP,
`Информация о системе` varchar(255) DEFAULT NULL,
`Информация о дисках системы` varchar(255) DEFAULT NULL,
`Информация о жестком диске` varchar(255) DEFAULT NULL,
`Информация о сетевом интерфейсе` varchar(255) DEFAULT NULL,
`Информация о прцессоре` varchar(255) DEFAULT NULL,
`Информация о оперативной памяти` varchar(255) DEFAULT NULL,
`Информация о видео карте` varchar(255) DEFAULT NULL,
`Информация о о установленном ПО` varchar(255) DEFAULT NULL,
PRIMARY KEY (`idЗаписи`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SET FOREIGN_KEY_CHECKS=1;
Создание таблицы «рабочие станции»:
DROP TABLE IF EXISTS `Рабочие станции`;
CREATE TABLE `Рабочие станции` (
`idРабочей станции` int(255) NOT NULL,
40
`idПользователя` int(255) DEFAULT NULL,
`MAC-адресс станции` varchar(255) DEFAULT NULL,
`IP-адресс станции` varchar(255) DEFAULT NULL,
PRIMARY KEY (`idРабочей станции`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SET FOREIGN_KEY_CHECKS=1;
Создание таблицы «пользователи»:
DROP TABLE IF EXISTS `Пользователи`;
CREATE TABLE `Пользователи` (
`idПользователя` int(255) NOT NULL,
`Имя` varchar(255) DEFAULT NULL,
`Фамилия` varchar(255) DEFAULT NULL,
`Отчество` varchar(255) DEFAULT NULL,
`Дата закрепления за раб. станцией` datetime DEFAULT NULL ON
UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`idПользователя`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SET FOREIGN_KEY_CHECKS=1;
Данное определение таблиц и представлений помогает нам конкретизировать
работу системы мониторинга состояния оборудования информационного центра.
2.5 Практическая реализация системы мониторинга состояния
оборудования информационного центра
2.5.1 Модуль сбора информации системы мониторинга состояния
оборудования информационного центра
Первым этапом разработки является написание модуля сбора информации с
компьютеров на языке C# в IDE Microsoft Visual Studio.
41
Сбор информации происходит с помощью инструмента WMI. WMI –
является очень мощным инструментом и может предоставлять информацию о
системе, причем неважно локальной или удаленной. WMI запросы, как правило,
открыты в сети, если у вас есть привилегии необходимые для запроса. И хотя в
WMI удаленные запросы просты, но их удобство заключается еще и в другой
причине: WQL.
Рисунок 13 – Блок-схема работы сборщика информации.
WQL позволяет составлять запросы WMI с использованием SQL-подобного
языка запросов. Если знать названия доступных полей, то можно получить
информацию очень легко. Получение списка логических дисков из системы
достигается использованием следующего запроса:
Select * from Win32_LogicalDisk
42
Однако, лучшим будет вариантом уточнить поиск с помощью конкретных
«полей» в запросе. Следующий запрос вернет свободное место, размер и имя всех
фиксированных дисков:
Select FreeSpace,Size,Name from Win32_LogicalDisk where DriveType=3
Как видно, построение простых запросов WMI очень похоже на запросы в
базы данных.
Для большей наглядности работы сборщика информации составим блоксхему, она предоставлена на рисунке 13.
Для
получения
необходимой
информации
в
методе
создаётся
ManagementObjectSearcher, который извлекает коллекцию управляющих объектов
в соответствии с заданным запросом. Этот класс является одной из наиболее часто
используемых исходных точек входа для извлечения сведений об управлении.
Например, его можно использовать для перечисления всех дисководов, сетевых
адаптеров, процессов и прочих управляющих объектов в системе, либо для запроса
всех работающих сетевых подключений, приостановленных служб и т. д. После
создания экземпляр этого класса принимает в качестве исходных данных запрос
WMI,
представленный
объектом
queryObj
или
его
производными,
представляющим пространство имен WMI, в котором должен быть выполнен
запрос. Экземпляр может также принять дополнительные параметры. При вызове
метода Get() для этого объекта ManagementObjectSearcher выполняет данный
запрос в заданной области и возвращает данные управляющих объектов, которые
удовлетворяют запросу. Следующим кодом, показанном на листинге 1 ниже,
выводится список всех активных процессов в системе.
public static void Main(string[] args)
{
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("root\\CIMV2",
"Select Name, CommandLine From Win32_Process");
43
foreach (ManagementObject instance in searcher.Get())
{
Console.WriteLine("{0}", instance["Name"]);
}
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
Листинг 1 - Вывод списка активных процессов в системе
На листинге 2 показан вывод всего установленного программного
обеспечения, с датой установки.
public static void Main(string[] args)
{
ManagementObjectSearcher searcher_soft =
new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_Product");
foreach (ManagementObject queryObj in searcher_soft.Get())
{
Console.WriteLine("<soft> Caption: {0} ; InstallDate:
{1}</soft>",
queryObj["Caption"], queryObj["InstallDate"]);
}
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
Листинг 2 – Вывод установленного ПО
44
Помимо сбора информации по установленному программному обеспечению
и активных процессов, необходимо знать о запущенных службах, их описании и
состоянии. Листинг 3 показывается вывод информации о службах.
public static void Main(string[] args)
{
ManagementObjectSearcher searcher3 =
new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_Service");
foreach (ManagementObject queryObj in searcher3.Get())
{
Console.WriteLine("-----------------------------------");
Console.WriteLine("Win32_Service instance");
Console.WriteLine("-----------------------------------");
Console.WriteLine("Caption: {0}", queryObj["Caption"]);
Console.WriteLine("Description: {0}", queryObj["Description"]);
Console.WriteLine("DisplayName:
{0}",
queryObj["DisplayName"]);
Console.WriteLine("Name: {0}", queryObj["Name"]);
Console.WriteLine("PathName: {0}", queryObj["PathName"]);
Console.WriteLine("Started: {0}", queryObj["Started"]);
}
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
Листинг 3 – Вывод информации о службах
45
Для вывода общей информации о операционной системе (версия, номер
сервис пака, кол-во свободной памяти и т.д.) используем код указанный на
листинге 4.
public static void Main(string[] args)
{
ManagementObjectSearcher searcher5 =
new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_OperatingSystem");
foreach (ManagementObject queryObj in searcher5.Get())
{
Console.WriteLine("-----------------------------------");
Console.WriteLine("Win32_OperatingSystem instance");
Console.WriteLine("-----------------------------------");
Console.WriteLine("BuildNumber: {0}", queryObj["BuildNumber"]);
Console.WriteLine("Caption: {0}", queryObj["Caption"]);
Console.WriteLine("FreePhysicalMemory:
{0}",
queryObj["FreePhysicalMemory"]);
Console.WriteLine("FreeVirtualMemory:
{0}",
queryObj["FreeVirtualMemory"]);
Console.WriteLine("Name: {0}", queryObj["Name"]);
Console.WriteLine("OSType: {0}", queryObj["OSType"]);
Console.WriteLine("RegisteredUser:
{0}",
queryObj["RegisteredUser"]);
Console.WriteLine("SerialNumber: {0}", queryObj["SerialNumber"]);
Console.WriteLine("ServicePackMajorVersion:
{0}",
queryObj["ServicePackMajorVersion"]);
Console.WriteLine("ServicePackMinorVersion:
queryObj["ServicePackMinorVersion"]);
46
{0}",
Console.WriteLine("Status: {0}", queryObj["Status"]);
Console.WriteLine("SystemDevice:
{0}",
queryObj["SystemDevice"]);
Console.WriteLine("SystemDirectory:
{0}",
queryObj["SystemDirectory"]);
Console.WriteLine("SystemDrive: {0}", queryObj["SystemDrive"]);
Console.WriteLine("Version: {0}", queryObj["Version"]);
Console.WriteLine("WindowsDirectory:
{0}",
queryObj["WindowsDirectory"]);
}
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
Листинг 4 – Вывод общей информации о ОС
Информация о всех имеющихся дисках системы (их название, тип файловой
системы, свободное место и тип диска) выводится с помощью кода,
представленного на листинге 5.
public static void Main(string[] args)
{
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_Volume");
foreach (ManagementObject queryObj in searcher.Get())
{
Console.WriteLine("-----------------------------------");
47
Console.WriteLine("Win32_Volume instance");
Console.WriteLine("-----------------------------------");
Console.WriteLine("Capacity: {0}", queryObj["Capacity"]);
Console.WriteLine("Caption: {0}", queryObj["Caption"]);
Console.WriteLine("DriveLetter: {0}", queryObj["DriveLetter"]);
Console.WriteLine("DriveType: {0}", queryObj["DriveType"]);
Console.WriteLine("FileSystem: {0}", queryObj["FileSystem"]);
Console.WriteLine("FreeSpace: {0}", queryObj["FreeSpace"]);
}
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true); }
Листинг 5 – Вывод информации о дисках в системе.
В работе мониторинга необходимо получать так же списки интерфейсов с
основными настройками каждой рабочей станции, в листинге 6 показан код
позволяющий это сделать.
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_NetworkAdapterConfiguration");
foreach (ManagementObject queryObj in searcher.Get())
{
Console.WriteLine("---------
Win32_NetworkAdapterConfiguration
instance --------------");
Console.WriteLine("Caption: {0}", queryObj["Caption"]);
if(queryObj["DefaultIPGateway"] == null)
Console.WriteLine("DefaultIPGateway:
queryObj["DefaultIPGateway"]);
48
{0}",
else
{
String[]
arrDefaultIPGateway
=
(String[])(queryObj["DefaultIPGateway"]);
foreach (String arrValue in arrDefaultIPGateway)
{
Console.WriteLine("DefaultIPGateway: {0}", arrValue);
}
}
if(queryObj["DNSServerSearchOrder"] == null)
Console.WriteLine("DNSServerSearchOrder:
{0}",
queryObj["DNSServerSearchOrder"]);
else
{
String[]
arrDNSServerSearchOrder
(String[])(queryObj["DNSServerSearchOrder"]);
foreach (String arrValue in arrDNSServerSearchOrder)
{
Console.WriteLine("DNSServerSearchOrder: {0}", arrValue);
}
}
if(queryObj["IPAddress"] == null)
Console.WriteLine("IPAddress: {0}", queryObj["IPAddress"]);
else
{
String[] arrIPAddress = (String[])(queryObj["IPAddress"]);
foreach (String arrValue in arrIPAddress)
{
49
=
Console.WriteLine("IPAddress: {0}", arrValue);
}
}
if(queryObj["IPSubnet"] == null)
Console.WriteLine("IPSubnet: {0}", queryObj["IPSubnet"]);
else
{
String[] arrIPSubnet = (String[])(queryObj["IPSubnet"]);
foreach (String arrValue in arrIPSubnet)
{
Console.WriteLine("IPSubnet: {0}", arrValue);
}
}
Console.WriteLine("MACAddress: {0}", queryObj["MACAddress"]);
Console.WriteLine("ServiceName: {0}", queryObj["ServiceName"]);
}
Листинг 6 – Вывод списков интерфейсов и их настроек.
Результатом работы данного кода будет вывод информации о имеющихся
интерфейсах и их настройках. Пример вывода показан ниже на листинге 7.
----------------------------------Win32_NetworkAdapterConfiguration instance
----------------------------------Caption: [00000011] D-Link DGE-528T Gigabit Ethernet Adapter
DefaultIPGateway: 192.168.0.1
DNSServerSearchOrder: 192.168.0.2
DNSServerSearchOrder: 192.168.0.3
IPAddress: 192.168.0.100
50
IPSubnet: 255.255.255.0
MACAddress: 00:27:1A:3A:BC:F7
ServiceName: RTL8167
Листинг 7 – Пример вывода информации о имеющихся сетевых интерфейсах и
их настроек.
Информацию по комплектующим можно получить похожим способом, как
и о интерфейсах. Говоря комплектующие подразумеваются следующие пункты:
- видеокарта;
- процессор;
- оперативная память;
- жесткие диски.
ManagementObjectSearcher searcher11 =
new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_VideoController");
foreach (ManagementObject queryObj in searcher11.Get())
{
Console.WriteLine("----------- Win32_VideoController instance -----------");
Console.WriteLine("AdapterRAM: {0}", queryObj["AdapterRAM"]);
Console.WriteLine("Caption: {0}", queryObj["Caption"]);
Console.WriteLine("Description: {0}", queryObj["Description"]);
Console.WriteLine("VideoProcessor: {0}", queryObj["VideoProcessor"]);
}
Листинг 8 – Запрос информации о видеокарте.
----------- Win32_VideoController instance ----------AdapterRAM: 536870912
Caption: NVIDIA GeForce 9500 GT
Description: NVIDIA GeForce 9500 GT
51
VideoProcessor: GeForce 9500 GT
Листинг 9 –Пример полученных данных.
На листинге 8 показан код с запросом информации о видеокарте, на
листинге 9 пример полученных данных, другие пункты выводятся аналогично,
меняя искомые ключевые параметры.
2.5.2 Графический интерфейс системы мониторинга состояния
оборудования информационного центра
При создании системы мониторинга, необходимо использовать механизм
взаимодействия пользователя и программой, отвечающей за мониторинг. При этом
формируется набор форм, окон, меню, активных кнопок и т.д. Так как перед
пользователем стоит задача обработки данных, предполагается использование
интерфейсов. Главной задачей интерфейса эффективно
работать
с
информацией,
дать возможность пользователю
даже
если
не
является
высококвалифицированным специалистом в области ИТ.
В совокупности данные инструменты образуют интерфейс программы —
внешний вид отдельных ее элементов и видов на экране компьютера. Поскольку в
различных программах используется много однотипных ситуаций и вариантов
взаимодействия
пользователей
с
программами,
возникает
потребность
стандартизировать их интерфейсы.
Графический интерфейс пользователя — это графическая среда организации
взаимодействия пользователя с вычислительной системой, предполагающая
стандартное использование основных элементов диалога пользователя с ЭВМ.
Для создания графического интерфейса на языке C# в IDE Microsoft Visual
Studio предусмотрен отвечающий за это модуль Windows Forms.
Windows Forms — интерфейс программирования приложений (API),
отвечающий за графический интерфейс пользователя и являющийся частью
Microsoft .NET Framework. Данный интерфейс упрощает доступ к элементам
интерфейса Microsoft Windows за счет создания обёртки для существующего Win32
API в управляемом коде. Причём управляемый код — классы, реализующие API
52
для Windows Forms, не зависят от языка разработки. То есть программист
одинаково может использовать Windows Forms как при написании ПО на C#, С++,
так и на VB.Net, J# и др. [20]
Пользовательский интерфейс на серверной стороне (компьютер системного
администратора) показан на рисунке 11.
Рисунок 14 – Пользовательский интерфейс на серверной стороне
На рисунке 14 показан основной функционал системы мониторинга
состояния оборудования информационного центра.
Карта рабочих станций показывает состояние узлов (рабочих станций) на
данный момент, т.е. активно или же неактивно устройство, за которым ведется
наблюдения. Карта сама по себе - это упрощенная схема работы локальной сети,
представленная в доступной визуализации даже не опытному пользователю.
Пк-1, Пк-2, Пк-n – узлы в системе, за которыми ведется наблюдение, рядом
указан закрепленный за данной рабочей станцией оператор, записанный в базе
53
данных. Красным обозначается узел в данный момент который не является
активным, зеленым обозначаются активные узлы.
Кнопка «Список рабочих станций» выводит в отдельное окно весь список
рабочих станций в системе, окно показано на рисунке 15, использующихся или же
в данный момент находящихся на хранении. Список выводится в виде таблицы.
Таблица заполняется из базы данных.
Рисунок 15 – Окно вывода списка рабочих станций
Кнопка «Список операторов» выводит всех операторов, относящихся к какойлибо деятельности на закрепленных за ними рабочих станциях. Вывод окна показан
на рисунке 16.
Кнопка «Записи» выводит в отдельном окне список всех инцидентов, сбоев,
ошибок в ходе работы рабочих станций. Так же происходит ежедневная проверка
всех активных станций, в период рабочего дня оператора и все показатели
записываются в базу данных и выводится так же в списке записей, при этом если
на момент проверки узел не активен, так же информация о неработоспособном
состоянии записывается в базу данных.
54
Рисунок 16 – Вывод окна со списком операторов
Кнопка «Добавить рабочую станцию» позволяет расширить список рабочих
станций в системе, форма заполнения показана на рисунке 17.
Данная функция требуется, когда появляются физически новые рабочие
станции и за ними необходимо наблюдение и учет. Функция значительно упростит
работу системного администратора, т.к. не будет необходимости заходить в базу
данных, разбираться с ней и записывать уже непосредственно в нее все
необходимы данные о рабочей станции и о возможно закрепленном за ним
оператором.
Кнопка «Ping» выполняет работу по установлению связи с рабочей станций,
по запросу. Интерфейс вывода при нажатии на кнопку «Ping» представлен на
рисунке 18.
55
Рисунок 17 – Форма ввода данных при добавлении новых рабочих станций
Рисунок 18 – Проверка соединения
56
Эта функция не является корневой, она является вспомогательной, тем не
менее очень важна в работе системы мониторинга состояния оборудования
информационного центра. Ping позволяет определить, по каким именно причинам
данный узел не на связи, т.к. может происходить зависание операционной системы,
рабочая станция будет показана красным цветом, тем не менее ping по SNMP
протоколу будет проходить и сразу станет понятно, что произошел сбой именно в
операционной системе.
В системе мониторинга состояния оборудования информационного центра
серверная часть постоянно принимает данные с клиентской части и отсылает их в
базу данных. Клиентская часть находится на каждой рабочей станции. Благодаря
клиентской части и происходит получение информации о состоянии рабочей
станции и ее проверка. Клиентская часть в отличии от серверной не имеет явного
пользовательского интерфейса, т.к. при запуске операционной системы на рабочей
станции происходит автозапуск клиентской части, и работа ее продолжается в
фоновом режиме, не видимом для оператора.
2.6 Результаты внедрения системы мониторинга состояния
оборудования информационного центра организации ЗАО «ЕНДС»
Разработанная система позволяет узнавать о проблемах в инфраструктуре
раньше или одновременно с пользователями. Это, по сути, комплекс быстрой
диагностики, который дает своевременное оповещение о затруднениях в работе
сервисов и оборудования, предоставляет точную информацию, конкретные
сведения о проблеме и её характере. И если сначала информация о показателях
просто собиралась и давала лишь общее представление, после детального анализа
системным администратором которого можно было сделать предположение о
наличии проблемы определённого характера, то теперь специализированная
подстройка мониторинга под нужды проекта даёт возможность сделать точную
оценку максимально быстро вне зависимости от опыта системного администратора
в работе с этим проектом. Мониторинг использует конфигурационную базу
данных.
57
Увеличился уровень автоматизации задач, администраторы освободились от
рутинной работы и смогли сконцентрироваться на более важных задачах. Заметно
минимизировано время простоя. Мониторинг позволяет организации «вести счет»
своей
благополучной
деятельности
по
предоставлению
ключевых
услуг
пользователям и клиентам и посредством этого получать уверенность и
нарабатывать авторитет.
Внедрение данной системы, а также сама разработка её функциональности
происходила по мере возникновения проблем в наблюдаемых проектах, то есть
поэтапно,
поэтому
по
мере
интеграции
систем
не
возникло
никаких
несогласованностей.
Администраторы по истории наблюдаемых показателей, могут отыскать
«бутылочные
способности
горлышки»
системы,
и
системы,
планировать
необходимые
улучшение
модернизации
для
пропускной
соответствия
заявленному уровню обслуживания клиентов. Одновременно можно точно
определить, где модернизация не нужна, что позволяет сэкономить средства. В
силу устройства мониторинга в виде рукописных модулей, позволяет легко и
быстро
изменять
конфигурацию
отслеживания:
в
сторону
увеличения
функциональности за счёт добавления шага конфигурации, и избавляться от
ненужных функций.
Структура модулей, а точнее то, что они полностью разрабатываются
вручную, хоть и с использованием всевозможного общедоступного функционала,
предоставляет возможность сбора сведений совершенно любого характера,
идеально выстраивая мониторинг под нужды заказчика. Это позволяет
моментально определять характер появившейся проблемы, следовательно,
значительно снизить время простоя и моментально определить ответственного за
решение возникшей задачи специалиста.
Соответствие системы мониторинга состояния оборудования задачам
позволяет прослеживать влияние сбоя в наблюдаемом ресурсе на предоставление
сервисов, что предоставляет возможность оптимальным образом устанавливать
58
приоритеты в работах по устранению сбоев и в кратчайшие сроки ликвидировать
их.
59
Заключение
В выпускной квалификационной работе, на основе проведенного обзора и
выполненных разработок, решена актуальная научно-практическая задача,
связанная с созданием моделей, алгоритмов и программных средств системы
мониторинга состояния оборудования информационного центра, в частности
рабочих станций (персональных компьютеров) центра, что позволяет собирать,
хранить и в дальнейшем использовать для проведения анализа состояния
оборудования
информационного
центра,
в
частности
рабочих
станций
(персональных компьютеров) центра.
Основные выводы и результаты диссертационной работы заключаются в
следующем:
1. Предложено решение задачи мониторинга состояния оборудования
информационного
центра,
хранение
истории
изменения
конфигурации
оборудования, а также диагностирования проблем оборудования на ранних
стадиях.
2. Определены основные подходы к решению задачи мониторинга состояния
оборудования информационного центра.
3. Разработаны алгоритмы сбора, хранения, логичного отображения всей
информации об оборудовании, находящемся в пределах контроля системного
администратора информационного центра.
4.
Разработан
алгоритм
оповещения
системного
администратора
информационного центра о возникновении сбоев в работе оборудования, а также о
самовольном вмешательстве пользователей в программную и физическую части
рабочих станций.
5. Разработано программное обеспечение и структура базы данных
информационной системы.
6.
Разработанный
программный
продукт,
поддерживающий
информационную систему мониторинга состояния оборудования внедрен в
практику работы информационного центра частной организации ЗАО «ЕНДС»,
60
показал эффективность, о чем указано в акте о внедрении, который прилагается к
ВКР.
Данная система мониторинга состояния оборудования информационного
центра, в частности рабочих станций (персональных компьютеров) позволила
сократить труд лиц, следящих за состоянием оборудования, что повышает
эффективность работы организации.
Система в дальнейшем будет развиваться и конфигурироваться под нужды
конкретных организаций.
61
Список литературы
1.
Хабрахабр [Электронный ресурс]: Что такое мониторинг в IT – Режим
доступа: http://habrahabr.ru/company/croc/blog/144941/
2.
Manager
Tech Net Magazine [Электронный ресурс]: System Center Operations
2012:
Простота
расширения
возможностей
мониторинга.
–
http://technet.microsoft.com
3.
Zabbix [Электронный ресурс]: What is Zabbix – http://www.zabbix.com
4.
Nagios
[Электронный
ресурс]:
Nagios
Documentation
–
http://www.nagios.org/
5.
Википедия [Электронный ресурс]: Сравнение систем мониторинга сети
– http://ru.wikipedia.org
6.
Википедия [Электронный ресурс]: Объектно-ориентированный язык
программирования
–
https://ru.wikipedia.org/wiki/Объектно-
ориентированный_язык_программирования
7.
Боггс, У. UML и Rational Rose / У. Боггс, М. Боггс. – М.:Лори, 2004.
– 510 с.
8.
Хабрахабр
[Электронный
ресурс]:
Создание
унифицированной
системы IT мониторинга в вашем окружении – Режим доступа: http://habrahabr.ru/.
9.
ITFB [Электронный ресурс]: Мониторинг серверов, сервисов и сайтов
-http://www.itfb.com.ua/monitoring.html
10.
Pingwin
[Электронный
ресурс]:
PWS
ИТ-Мониторинг
-
http://www.pingwinsoft.ru/pages/resheniya/resheniya/pwsitmonitoring
11.
Иванов, Д. Ю. Унифицированный язык моделировния UML: учебное
пособие / Д. Ю. Иванов. – СПб.: Изд-во политехн. ун-та, 2010. – 249 с.
12.
EMC Smarts: интеллектуальный мониторинг ИТ-среды и бизнес-
процессов [Текст] / Комптек: Москва – 3 с
13.
Ломакина
Е.Г.,
Симонов
Ю.Т.
Модели
управления
ИТ-
инфраструктурой предприятия, Самара, 2013 – 187с.
14.
Ларман, Крэг. Применение UML и шаблонов проектирования. 2-е изд.:
Пер. с англ. / Крэг Ларман – М.: Издательский дом «Вильямс», 2004. – 624 с.
62
15.
Леоненков, А.В. Самоучитель UML. / А. В. Леоненков. – СПб.: БХВ-
Петербург, 2001. – 304 с.
16.
Рамбо, Д. UML 2.O. Объектно-ориентированное моделирование и
разработка / Д. Рамбо, М. Блаха. – 2-е изд. изд. – СПб.: Питер, 2007.
– 544 с.
17.
Разу, М.Л. Управление проектом. Основы проектного управления:
Учебник / М.Л. Разу. – М.: КНОРУС, 2007. – 749 с.
18.
Светлов, Н.М. Информационные технологии управления проектами:
учебное пособие / Н. М. Светлов, Г. Н. Светлова. – М.: ФГОУ ВПО РГАУ-МСХА
им. К.А. Тимирязева, 2007. — 144 с.
19.
MySQL [Электронный ресурс]: MySQL Manual – Режим доступа:
http://www.mysql.ru/docs/man/
20.
METANIT.COM [Электронный ресурс]: Сайт о программировании –
Режим доступа: https://metanit.com/sharp/
63
Приложения
64
Приложение А
Код пакета программ
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MonitoringSystem.Server
{
static class Program
{
/// <summary>
/// Главная точка входа для приложения.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using MonitoringSystem.Common;
using WebSocketSharp;
using WebSocketSharp.Server;
namespace MonitoringSystem.Server
{
/// <summary>
/// Обработчик запросов и ответов.
/// </summary>
public class RequestBehavior : WebSocketBehavior
{
public RequestBehavior()
{
EmitOnPing = true;
var pingingThread = new Thread(Ping);
pingingThread.Start();
}
public Action<Message> PollAction { get; set; } = s => { };
/// <summary>
/// Отправка запроса на клиент.
/// </summary>
/// <param name="type"></param>
65
public void SendRequest(string ip, InformationType type)
{
var session = Sessions?.Sessions?
.FirstOrDefault(x => x.Context.CookieCollection["IpAddress"]?.Value == ip);
if (session == null)
return;
var request = new Request
{
InformationType = type
};
Sessions.SendTo(request.ToBytes(), session.ID);
}
public Action<IEnumerable<IWebSocketSession>> RefreshAction { get; set; } = s => { };
/// <summary>
/// Возникает при получении сообщения от клиента.
/// </summary>
/// <param name="e"></param>
protected override void OnMessage(MessageEventArgs e)
{
if (e.IsPing)
{
RefreshAction(Sessions.Sessions);
}
if (!e.IsBinary)
return;
var message = e.RawData.To<Message>();
if (message.Data.Count == 1)
{
var data = message.Data.First();
new Thread(() => new ViewInfoForm
{
Text = [email protected]"{message.IP} - {data.Key}",
Message = data.Value
}.ShowDialog()).Start();
;
}
else
{
PollAction(message);
}
}
public void Ping()
{
while (true)
{
Sessions?.Broadping();
66
Thread.Sleep(10000);
}
}
public void Poll()
{
var request = new Request
{
InformationType = InformationType.All
};
Sessions?.Broadcast(request.ToBytes());
}
/// <summary>
/// Возникает при закрытии подключения клиента.
/// </summary>
/// <param name="e"></param>
protected override void OnClose(CloseEventArgs e)
{
base.OnClose(e);
}
/// <summary>
/// Ошибка обмена данными с клиентом.
/// </summary>
/// <param name="e"></param>
protected override void OnError(ErrorEventArgs e)
{
base.OnError(e);
}
/// <summary>
/// Открытие подключения с клиентом.
/// </summary>
protected override void OnOpen()
{
//var cnt = Context;
}
}
}
using System;
using System.Net;
using MonitoringSystem.Common;
using WebSocketSharp.Server;
namespace MonitoringSystem.Server
{
public class Core : IDisposable
{
private readonly RequestBehavior _requestBehavior;
private readonly WebSocketServer _server;
public Core(RequestBehavior behavior, IPAddress ip = null, int port = 8181)
{
67
ip = ip ?? Utilities.GetLocalIpAddress();
_requestBehavior = behavior;
_server = new WebSocketServer(ip, port);
_server.AddWebSocketService("/Monitoring", () => behavior);
}
public string Address => _server.Address.ToString();
public int Port => _server.Port;
public bool IsListening => _server.IsListening;
public void Dispose()
{
_server.Stop();
}
public void RequestInformation(string ip, InformationType information)
{
_requestBehavior.SendRequest(ip, information);
}
public void Start()
{
_server.Start();
}
public void Stop()
{
_server.Stop();
}
}
using System;
namespace MonitoringSystem.Common
{
[Flags]
public enum InformationType
{
CPU = 1,
Disk = 2,
Drive = 4,
GPU = 8,
Memory = 16,
Network = 32,
Software = 64,
System = 128,
All = 255
}
}
using System;
using System.Collections.Generic;
using ProtoBuf;
namespace MonitoringSystem.Common
{
68
[ProtoContract]
public class Message
{
[ProtoMember(1)] public DateTime DateTime { get; set; }
[ProtoMember(2)]
public Dictionary<InformationType, string> Data { get; set; } = new Dictionary<InformationType, string>();
[ProtoMember(3)]
public string MAC { get; set; }
[ProtoMember(4)]
public string IP { get; set; }
}
}
using System.IO;
using ProtoBuf;
namespace MonitoringSystem.Common
{
public static class ProtoBufConverter
{
public static T To<T>(this Stream stream)
{
return Serializer.Deserialize<T>(stream);
}
public static T To<T>(this byte[] dataBytes)
{
using (var stream = new MemoryStream(dataBytes))
{
return Serializer.Deserialize<T>(stream);
}
}
public static byte[] ToBytes<T>(this T obj)
{
using (var stream = new MemoryStream())
{
Serializer.Serialize(stream, obj);
return stream.ToArray();
}
}
public static void ToStream<T>(this T obj, Stream stream)
{
Serializer.Serialize(stream, obj);
}
}
}
using ProtoBuf;
namespace MonitoringSystem.Common
{
[ProtoContract]
public class Request
69
{
[ProtoMember(1)] public string Data { get; set; }
[ProtoMember(2)] public InformationType InformationType { get; set; }
}
}
using System;
using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Sockets;
namespace MonitoringSystem.Common
{
public static class Utilities
{
/// <summary>
/// Returns local IP Address.
/// </summary>
/// <returns></returns>
public static IPAddress GetLocalIpAddress()
{
var host = Dns.GetHostEntry(Dns.GetHostName());
foreach (var ip in host.AddressList)
if (ip.AddressFamily == AddressFamily.InterNetwork)
return ip;
throw new Exception("No network adapters with an IPv4 address in the system!");
}
/// <summary>
/// Gets the MAC address of the current PC.
/// </summary>
/// <returns></returns>
public static PhysicalAddress GetMacAddress()
{
return (NetworkInterface.GetAllNetworkInterfaces()
.Where(nic =>
(nic.NetworkInterfaceType == NetworkInterfaceType.Ethernet || nic.NetworkInterfaceType ==
NetworkInterfaceType.Wireless80211) &&
nic.OperationalStatus == OperationalStatus.Up)
.Select(nic => nic.GetPhysicalAddress())).FirstOrDefault();
}
}
}
using System;
using System.Threading;
using MonitoringSystem.Common;
using WebSocketSharp;
using WebSocketSharp.Net;
namespace MonitoringSystem.ClientApp
{
public class MonitoringSocket
70
{
private readonly WebSocket _webSocket;
private bool _enabled = true;
private int _timeout = 10000;
public MonitoringSocket(params string[] args)
{
var ip = "192.168.174.3";
var port = "8181";
var path = "/Monitoring";
if (args.Length > 0)
ip = args[0];
if (args.Length > 1)
port = args[1];
if (args.Length > 2)
path = args[2];
var address = $"{ip}:{port}{path}";
_webSocket = new WebSocket($"ws://{address}") {EmitOnPing = true};
_webSocket.SetCookie(new Cookie("IpAddress", Utilities.GetLocalIpAddress().ToString()));
_webSocket.SetCookie(new Cookie("MAC", Utilities.GetMacAddress()?.ToString()));
_webSocket.OnMessage += WebSocketOnMessage;
_webSocket.OnError += WebSocketOnOnError;
_webSocket.OnOpen += WebSocketOnOpen;
}
private void WebSocketOnOpen(object sender, EventArgs e)
{
_timeout = 10 * 1000;
}
public void Start()
{
_webSocket.Connect();
while (_enabled)
{
Thread.Sleep(_timeout);
if (_webSocket.ReadyState != WebSocketState.Closed)
continue;
_webSocket.Close();
_webSocket.Connect();
}
}
public void Stop()
{
_webSocket.Close();
71
_enabled = false;
_timeout = 1000;
}
private void WebSocketOnOnError(object sender, ErrorEventArgs e)
{
_timeout = 20 * 1000;
Thread.Sleep(1000);
_webSocket.Connect();
}
private void WebSocketOnMessage(object sender, MessageEventArgs e)
{
if (e.IsPing)
{
_webSocket.Ping();
}
if (!e.IsBinary)
return;
var request = e.RawData.To<Request>();
var response = new Message
{
IP = Utilities.GetLocalIpAddress()?.ToString(),
MAC = Utilities.GetMacAddress()?.ToString()
};
void AddToResponse(InformationType type)
{
if (request.InformationType.HasFlag(type))
response.Data[type] = SystemInfo.GetInformation(type);
}
AddToResponse(InformationType.CPU);
AddToResponse(InformationType.GPU);
AddToResponse(InformationType.Disk);
AddToResponse(InformationType.Drive);
AddToResponse(InformationType.Memory);
AddToResponse(InformationType.Network);
AddToResponse(InformationType.Software);
AddToResponse(InformationType.System);
_webSocket.Send(response.ToBytes());
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
72
namespace MonitoringSystem.ClientApp
{
static class Program
{
/// <summary>
/// Главная точка входа для приложения.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Management;
using MonitoringSystem.Common;
namespace MonitoringSystem.ClientApp
{
public static class SystemInfo
{
private static IEnumerable<string> GetHardwareInfo(string win32Class, string classItemField)
{
var result = new List<string>();
var searcher = new ManagementObjectSearcher($"SELECT * FROM {win32Class}");
foreach (var o in searcher.Get())
{
var obj = (ManagementObject) o;
var r = obj?[classItemField];
if (r == null)
continue;
result.Add(r.ToString().Trim());
}
return result;
}
private static string GetSoftware()
{
var searcherSoft = new ManagementObjectSearcher("SELECT * FROM Win32_Product");
var result = string.Empty;
foreach (ManagementObject queryObj in searcherSoft.Get())
result += $"{queryObj["Caption"]} ; InstallDate: {queryObj["InstallDate"]}\n";
return result;
}
private static string GetOS()
{
73
var searcher5 =
new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_OperatingSystem");
var result = string.Empty;
foreach (var o in searcher5.Get())
{
var queryObj = (ManagementObject) o;
result += $"BuildNumber: {queryObj["BuildNumber"]}\n";
result += $"Caption: {queryObj["Caption"]}\n";
result += $"FreePhysicalMemory: {queryObj["FreePhysicalMemory"]}\n";
result += $"FreeVirtualMemory: {queryObj["FreeVirtualMemory"]}\n";
result += $"Name: {queryObj["Name"]}\n";
result += $"OSType: {queryObj["OSType"]}\n";
result += $"RegisteredUser: {queryObj["RegisteredUser"]}\n";
result += $"SerialNumber: {queryObj["SerialNumber"]}\n";
result += $"ServicePackMajorVersion: {queryObj["ServicePackMajorVersion"]}\n";
result += $"ServicePackMinorVersion: {queryObj["ServicePackMinorVersion"]}\n";
result += $"Status: {queryObj["Status"]}\n";
result += $"SystemDevice: {queryObj["SystemDevice"]}\n";
result += $"SystemDirectory: {queryObj["SystemDirectory"]}\n";
result += $"SystemDrive: {queryObj["SystemDrive"]}\n";
result += $"Version: {queryObj["Version"]}\n";
result += $"WindowsDirectory: {queryObj["WindowsDirectory"]}\n";
}
return result;
}
private static string GetDrives()
{
var searcher =
new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_Volume");
var result = string.Empty;
foreach (ManagementObject queryObj in searcher.Get())
{
result += $"Capacity: {queryObj["Capacity"]}\n";
result += $"Caption: {queryObj["Caption"]}\n";
result += $"DriveLetter: {queryObj["DriveLetter"]}\n";
result += $"DriveType: {queryObj["DriveType"]}\n";
result += $"FileSystem: {queryObj["FileSystem"]}\n";
result += $"FreeSpace: {queryObj["FreeSpace"]}\n\n";
}
return result;
}
private static string GetMemory()
{
var searcher12 =
new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_PhysicalMemory");
var result = string.Empty;
foreach (ManagementObject queryObj in searcher12.Get())
result +=
74
$"BankLabel:
{queryObj["BankLabel"]}
{Math.Round(Convert.ToDouble(queryObj["Capacity"]) / 1024 /
{queryObj["Speed"]}\n\n";
return result;
}
1024
/
;
1024,
2)}
Capacity:
Gb; Speed:
private static string GetDisks()
{
var searcher13 =
new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_DiskDrive");
var result = string.Empty;
foreach (ManagementObject queryObj in searcher13.Get())
result +=
$"DeviceID: {queryObj["DeviceID"]}; InterfaceType: {queryObj["InterfaceType"]}; Manufacturer:
{queryObj["Manufacturer"]}; Model: {queryObj["Model"]}; SerialNumber: {queryObj["SerialNumber"]}; Size:
{Math.Round(Convert.ToDouble(queryObj["Size"]) / 1024 / 1024 / 1024, 2)} Gb\n\n";
return result;
}
private static string GetInterfaces()
{
var searcher =
new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_NetworkAdapterConfiguration");
var result = string.Empty;
foreach (ManagementObject queryObj in searcher.Get())
{
result += $"Caption: {queryObj["Caption"]}\n";
if (queryObj["DefaultIPGateway"] == null)
{
result += $"DefaultIPGateway: {queryObj["DefaultIPGateway"]}\n";
}
else
{
var arrDefaultIPGateway = (string[]) queryObj["DefaultIPGateway"];
result = arrDefaultIPGateway.Aggregate(result,
(current, arrValue) => current + $"DefaultIPGateway: {arrValue}\n");
}
if (queryObj["DNSServerSearchOrder"] == null)
{
result += $"DNSServerSearchOrder: {queryObj["DNSServerSearchOrder"]}\n";
}
else
{
var arrDNSServerSearchOrder = (string[]) queryObj["DNSServerSearchOrder"];
result = arrDNSServerSearchOrder.Aggregate(result,
(current, arrValue) => current + $"DNSServerSearchOrder: {arrValue}\n");
}
if (queryObj["IPAddress"] == null)
75
{
result += $"IPAddress: {queryObj["IPAddress"]}\n";
}
else
{
var arrIPAddress = (string[]) queryObj["IPAddress"];
result = arrIPAddress.Aggregate(result, (current, arrValue) => current + $"IPAddress: {arrValue}");
}
if (queryObj["IPSubnet"] == null)
{
result += $"IPSubnet: {queryObj["IPSubnet"]}\n";
}
else
{
var arrIPSubnet = (string[]) queryObj["IPSubnet"];
foreach (var arrValue in arrIPSubnet) Console.WriteLine("IPSubnet: {0}", arrValue);
}
result += $"MACAddress: {queryObj["MACAddress"]}\n";
result += $"ServiceName: {queryObj["ServiceName"]}\n\n";
}
return result;
}
public static string GetInformation(InformationType type)
{
switch (type)
{
case InformationType.CPU:
return $"{string.Join("; ", GetHardwareInfo("Win32_Processor", "Name"))}";
case InformationType.Disk:
return GetDisks();
case InformationType.Drive:
return GetDrives();
case InformationType.GPU:
return $"{string.Join("; ", GetHardwareInfo("Win32_VideoController", "Name"))}";
case InformationType.Memory:
return GetMemory();
case InformationType.Network:
return GetInterfaces();
case InformationType.Software:
return GetSoftware();
case InformationType.System:
return GetOS();
default:
throw new ArgumentOutOfRangeException(nameof(type), type, null);
}
76
}
}
}
namespace MonitoringSystem.ClientApp
{
partial class Form1
{
/// <summary>
/// Обязательная переменная конструктора.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Освободить все используемые ресурсы.
/// </summary>
/// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе
ложно.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager
resources
=
System.ComponentModel.ComponentResourceManager(typeof(Form1));
this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components);
this.SuspendLayout();
//
// notifyIcon1
//
this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon")));
this.notifyIcon1.Text = "Monitoring";
this.notifyIcon1.Visible = true;
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(120, 0);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.Name = "Form1";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Form1";
this.WindowState = System.Windows.Forms.FormWindowState.Minimized;
77
new
this.FormClosing
+=
System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.NotifyIcon notifyIcon1;
}
}
78
new
Приложение Б
Акт внедрения результатов ВКР
79
80
1/--страниц
Пожаловаться на содержимое документа