Инвентаризация серверов без отвращения
Хочу поделиться история одного успешного проекта по созданию системы инвентаризации серверов. История будет полезна тем кто хочет наконец то навести порядок в своём серверном хозяйстве и ищет реальные примеры с ответами на вопросы.
Предистория
Наверное не нужно объяснять как важно иметь в оперативном доступе актуальную информацию про подопечный зоопарк техники. Особенно это становится важно когда количество начинает переваливает за сотню. Наверняка все проходят через exel файлик с необходимыми полями. С такой же вероятностью у всех возникало чувство отвращения от этого метода при забивании или модифицировании десятка строк.
Проработав в одном сотовом операторе где количество серверов исчислялось 4-х значными числами и оценив прелести используемой там самописной системы для инвентаризации, я озадачился поиском подобного для моего нового работодателя. Подсказку кинул блог Badoo на хабре.
В одной статье было упоминание про использования связки FusionInventory + GLPI для сбора информации по устанавливаемым серверам. В связи с большим уважением к остальным применяемым в статье технологиям я решил опробовать эту в нашей среде.
Реализация
Поверхностный тюнинг
Суровое наследство GLPI как helpdesk инструмента придётся вырезать залезая в код. Моих навыков в PHP на котором написана система хватает на интуитивное пониманием кода, но несмотря на это можно сделать достаточно много. Сперва рекомендую поправить локализацию для того чтобы элементы инвентаризации назывались не компьютерами, а серверами. Вроде не особо значимый пункт, но помогает в правильном позиционировании продукта внутри компании.
Файл с русской локализации по умолчанию хранится здесь: /usr/share/glpi/locales/ru_RU.php. Сделайте бэкап и смело правьте названия.
Следом рекомендую сменить страницу по умолчанию на список серверов. Это сократит на пару кликов доступ к самой востребованной информации и уберёт лишние вопросы:
При удачной компановке переносами оставшихся полей получаем подобную форму:
Советую создать шаблоны с предварительно заданными полями для уменьшения отвращения от заполнения инвентаризации.
Hint 1: Добавив пару строк в эту же функцию можно получить удобную ссылку на элемент в системе мониторинга nagios в котором есть обратная ссылка в инвентаризацию (см скриншот выше):
Hint 2: Переименовав неиспользуемое нашей командой поле «инвентарный номер» в «адрес консоли» и сменив тип на url получили возможность прямо из списка серверов перейти на SP консоль. Помогает оперативно решать проблемы со сбойным сервером.
Так же дабы не отвлекать наших администраторов лишними элементами рекомендую закомментировать данные вкладки в том же файле (часть из них может быть убрана зарезанием прав через профиль):
Сбор данных
Для того чтобы не вбивать информацию по компонентам воспользовались плагином FusionInventory. Очень хорошая статья по его установке уже есть на хабре. Могу лишь добавить от себя что было изменено в нашем случае.
В настройках плагина FusionInventory отключаем сбор той информации которая вам не нужна.
Hint: результат работы агента можно выгрузить в файл, а потом импортировать в GLPI. Данный механизм создаёт идиальный API для автоматической загрузки любых данных. Мы реализовали на этой возможности импорт данных по виртуальным машинам из нашей фермы VMware.
У плагина FusionInventory для данных задач есть свой инструмент, но он добавляет компоненты к серверу, вместо создания полноценного элементы списка серверов. Что не так удобно. В последней версии вышедшей пару месяцев назад появился выбор, создавать элемент для виртуалок или компонент к ESXi серверу.
Отслеживаем внешние заявки
Так как админов в команде много, они периодически уходят в отпуск или болеют, нужно где то собирать информацию об активных заявках в ТП. Так же полезно знать какие проблемы были с данным сервером (а в нашем случае и со стороджами, свитчами и софтом).
Решение заложено в GLPI — заявки, но в данном случае они подразумевают заявку наружу, а не внутрь ИТ команды. Для упрощения процедуры заявок было сделано аналогичное урезание функционала:
Получаем список открытых или закрытых тикетов:
Дополнение
Собственно на этом всё. Если у читателей появится интерес к дополнениям и тому как мы их используем я напишу отдельную статью про имплементацию данных плагинов, но для понимания как это выглядит кидаю скриншоты:
Кастомные элементы — storages
ИТ сервисы
Стойки
Установка и настройка GLPI и FusionInventory, инвентаризация ИТ инфраструктуры
В этой статье мы рассмотрим пошаговую установку и настройку GLPI. GLPI (Gestionnaire Libre de Parc Informatique — франц.) – это полноценная open-source ITSM система для управления процессами, инвентаризации оборудования и софта, а также для управления заявками и инцидентами. GLPI это большой комбайн, в котором заложено большое количество функционала по управлению ИТ на предприятии. Некоторые из возможностей GLPI:
Установка и настройка стека LAMP в Linux
GLPI это обычное веб приложение с базой данных, поэтому на сервере нужно развернуть LAMP стек (в данной статье GLPI будет установлен на apache, но возможна также установка на nginx).
apt update
apt install mysql-server mysql-client apache2 php php-mysql libapache2-mod-php php-json php-gd php-curl php-mbstring php-cas php-xml php-cli php-imap php-ldap php-xmlrpc php-apcu
Создайте новую mysql базу данных (можно использовать и mariadb) и пользователя для GLPI:
Скачайте и распакуйте дистрибутив GLPI:
wget https://github.com/glpi-project/glpi/releases/download/9.4.5/glpi-9.4.5.tgz
tar xvf glpi-9.4.5.tgz
Скопируйте GLPI в веб директорию:
Создайте файл виртуал хоста:
И вставляем следующую конфигурацию Virtual Host:
a2ensite glpi
service apache2 reload
Проверьте, что виртуалхост активен.
Перед вами должно появится окно веб-установщика GLPI.
Установка GLPI
Сначала нужно выбрать язык интерфейса GLPI и принять лицензионное соглашение. На следующем шаге нажмите Install и убедитесь, чтобы все тесты прошли успешно.
Укажите данные для подключения к базе данных.
Выберите ранее созданную базу данных:
Нажмите Continue и дождитесь импорта данных. База данных может наполняться продолжительное время (несколько минут). Это можно проверить командой show processlist; в mysql.
После этого установка GLPI практически завершена. Зайдите в панель управления (по-умолчанию, логин и пароль – glpi).
Базовая настройка GLPI
Если вы не хотите использовать встроенных пользователей, можно их разом отключить.
Обзор интерфейса GLPI
Пробежимся по интерфейсу GLPI и рассмотрим некоторые из возможностей системы.
Вкладка Assets
Эта вкладка отвечает за инвентаризацию оборудования и софта. В GLPI есть возможность создавать шаблоны. Вы можете создавать различные шаблоны для разных устройств (компьютеров, роутеров, мониторов и т.д). Удобство в том, что при создании новых объектов вам не нужно заново заполнять статические данные (например, расположение или тип объекта).
Механизм шаблонов поддерживается и другими функциями, не только инвентаризацией.
Вкладка Assistance
Вкладка отвечает за управление задачами, инцидентами и проектами. Если вы знакомы с Jira, то здесь такой же принцип.
Вкладка Management
Также относится к инвентаризации – можно вести бюджет, учитывать лицензии, поставщиков и т.д.
Вкладка Tools
Эта вкладка содержит в себе разные инструменты – проекты, напоминания, отчеты и базу знаний (wiki).
Управление базой знаний:
Вкладка Administration
Здесь вы можете управлять пользователями, группами и сущностями GLPI, также есть лог действий пользователей GLPi.
Вкладка Setup
Также отвечает за управление GLPI – настройка пунктов меню, изменение различных форм и полей.
Плагин FusionInventory — автоматическая инвентаризация серверов и компьютеров
Рассмотрим одно из применений GLPI в реальной жизни – обнаружение устройств в сети и автоматическое заполнение инвентаризационных данных по оборудованию и установленным программам.
В GLPI не предусмотрено автоматическое обнаружение, но с этим может помочь плагин FusionInventory.
Установка Fusion Inventory
Теперь во вкладке Administration появился пункт FusionInventory.
Перед установкой агентов на компьютеры и сервера нужно сразу включить нужные модули агентов.
Установка Fusion Agent в Windows
Установить Fusion Agent можно либо через графический интерфейс (инсталлятор), либо через командную строку. Мы будем рассматривать второй вариант, так как он легко масштабируется для разворачивания через групповые политики или SCCM.
fusioninventory-agent_windows-x64_2.5.2.exe /S /acceptlicense /add-firewall-exception /debug=2 /execmode=Service /installtasks=Full /timeout=30 /delaytime=5 /server=»_http://glpi.local/plugins/fusioninventory/» /runnow
Рассмотрим основные параметры уставки
Здесь отображаются все компьютеры, на которые вы установили агенты FusionInventory с модулем Collect Data. Откройте один из компьютеров и посмотрите на собранные данные. Как вы видите, в базе данных GLPI появилась информация об версии и билде Windows с сервера с агентом.
Вся информация заполняется автоматически из данных, которые приходят с агента. Также эта информация сортируется по категориям. Например, при установке агента на обычный ПК, можно получить информацию о периферийных устройствах. На скриншоте ниже информация о мониторах, подключенных к компьютеру где установлен агент.
Также вы видит список установленного на компьютере ПО.
Установка Fusion Agent на Linux
Рассмотрим установку из пакета на Ubuntu Server 18.04. Установите необходимые зависимости
apt install dmidecode hwdata ucf hdparm perl libuniversal-require-perl libwww-perl libparse-edid-perl libproc-daemon-perl libfile-which-perl libhttp-daemon-perl libxml-treepp-perl libyaml-perl libnet-cups-perl libnet-ip-perl libdigest-sha-perl libsocket-getaddrinfo-perl libtext-template-perl libxml-xpath-perl libyaml-tiny-perl libnet-snmp-perl libcrypt-des-perl libnet-nbname-perl libdigest-hmac-perl libfile-copy-recursive-perl libparallel-forkmanager-perl
В конфигурационном файле агента (/etc/fusioninventory/agent.cfg) измените следующие параметры:
systemctl restart fusioninventory-agent
Если всё сделано правильно, вы увидите ваш Ubuntu компьютер/сервер в Assets-> Computers.
Статистика и отчеты в GLPI
В GLPI есть встроенные отчеты.
Но скорее всего вам потребуются отчеты по собственным параметрам. Для этого в GLPI есть плагины:
Пример встроенного отчета из плагина Reports:
GLPI развивается более 15 лет и содержит в себе огромное количество возможностей для управления ИТ инфраструктуры, а сообщество развивает и поддерживает плагины для различных интеграций и функционала. Система имеет огромные возможности модификации своих элементов, поэтому каждая компания настраивает GLPI под себя.
GLPI — автоматизация сбора информации о ПК
После того как мы установили и настроили менеджер IT-инфраструктуры — GLPI, необходимо собрать информацию о ПК сети. Для этого нам понадобится плагин fusioninventory.
Скачиваем плагин с официального сайта Fusioninventory — http://fusioninventory.org:
Распаковываем и помещаем в директорию /plugins, у меня это /var/www/support.it-school.pw/plugins:
Заходим в систему GLPI и переходим в раздел «Настройки» — «Дополнения»
И выполняем установку дополнения:
После включения в главном меню появиться раздел «Дополнения» — «FusionInventory»:
Переходим в раздел «Организация» и указываем ссылку на менеджер IT-инфраструктуры. В нашем случае это http://support.it-school.pw:
Переходим «Дополнения» — «FusionInventory»:
Следующий этап — это установка клиента на ПК в локальной сети.
Для Ubuntu / Debian:
После установки редактируем конфигурационный файл:
Находим строку server = http://server.domain.com/glpi/plugins/fusioninventory
Для Windows:
Скачиваем агента: http://forge.fusioninventory.org/projects/fusioninventory-agent-windows-installer/files. Так как система на ПК оказалась 32-битная, то скачиваем fusioninventory-agent_windows-x86_2.3.17.exe и производим стандартную процедуру установки приложения:
Соглашаемся с лицензионным соглашением:
Выбираем настройки по умолчанию:
Указываем директорию для установки приложения:
Указываем url плагина на сервере. В нашем случае это http://support.it-school.pw/plugins/fusioninventory :
Наблюдаем процедуру копирования файлов:
Завершаем процесс установки:
Переходим в Главное меню и запускаем агента на исполнение:
Переходим в интерфейс менеджера IT-инфраструктуры (GLPI). «Оборудование» — «Компьютеры» и констатируем, что первый ПК у нас уже в системе:
Небольшие полезности для связки GLPI+FusionInventory
Сколько копий было сломано об эту связку — не счесть. Форум обоих продуктов ломится от вопросов. Но вот ответов, как и вопросов, подобным моим, я там не нашел. Ну или по крайней мере внятных ответов на них.
Все дальнейшие телодвижения осуществлялись на следующей конфигурации: виртуальная машина KVM, 1Gb ОЗУ, 10 GB HDD, Debian 7, GLPI 0.85.4, FusionInventory Plugin 1.2
С первым вопросом все оказалось достаточно просто. Все значения хранятся в MySQL, так что оставалось лишь найти все зависимости и проверить, не ломает ли прямая запись в базу какой либо учет внутри GLPI.
По итогу, получился вот такой вот скрипт (Осторожно: Быдлокод!):
Неделя тестов показала, что учет ведется верно, ничего не ломается и скрипт был натравлен на рабочий GLPI. Результатом явиласть вот такая картина:
Странно, что картридж повышенной емкости отпечатал на 100 страниц больше. А я думал, мне только казалось, что меняются они с приблизительно одинаковым интервалом. Но это уже вопросы к тем, кто их заправляет.
Второй же вопрос поставил мою лень в тупик. Либо пересобирать thinstation, что тянет за собой очередные головные боли с rdesktop, freerdp, звуком и модулями, либо максимально кастрировать perl, ибо fusioninventory-agent написан целиком и полностью на нем, и собирать свой модуль.
Собственно, победил второй вариант, так как лишний раз утяжелять сборку не хотелось, а инвентаризация — дело не требующее повседневности, раз в неделю запустил и нормально.
За пару дней неспешного копания агента, были выянены необходимые (ну и собственно штатные) утилиты для инвентаризации железа: lspci, lsusb, fdisk, arch, dmidecode, get-edid, ifconfig, parse-edid и прочие. Вот тут был выявлен первый подводный камень: lspci, fdisk и многие другие утилиты в Thinstation — всего лишь алиасы к busybox и с необходимыми ключами, естественно, не работают.
Вторым подводным камнем было определение архитектуры. Почему-то агент получал значение linux-thread-multi и дальше все стопорилось, поскольку обработка такой архитектуры не предусмотрена. Пришлось ставить костыль в Agent/Task/Inventory/Linux/i386.pm:
Остальные камни были из серии «нужная утилита работает не так, значения не возвращает, поэтому инвентаризировать не будем». Для исправления пришлось заталкивать в сборку lspci, lsusb, fdisk, arch, dmidecode, get-edid, parse-edid и менять в скриптах агента пути к этим утилитам. Странно, но почти все пути были прописаны как абсолютные. Ну да это уже дело разработчиков.
Исполняемый скрипт, запускающий агента, получился вот таким:
Скрипт запускается кроном, два раза в день инвентаризации. День инвентаризации выбирается самостоятельно. У меня — каждый понедельник.
Первая рабочая сборка модуля родилась большой по размеру — 13 мб. Но зато работала. И работала на ура.
В результате «доработки напильником» размер модуля уменьшился до 5.1 мб. Больше выкидывать просто нечего.
Fusioninventory
FusionInventory действует как шлюз и собирает информацию от агентов. Он создаёт и обновляет информацию в GLPI с минимальными усилиями администратора. На данный момент поддерживается такой список устройств:
компьютеры, сетевые устройства, принтеры, виртуальные машины, телефоны на Андроиде.
FusionInventory поддерживает различные механизмы виртуализации.
VMware VCENTER / ESX / ESXi
Virtualbox
Libvirt
Xen
OpenVZ / Virtuozzo
Parallels
LXC
FreeBSD Тюрьмы
HPVM
Vserver
Hyper-V
Вы можете использовать FusionInventory для установки, обновления или удаления программного обеспечения. Вы также можете нажать сценарии администрирования. FusionInventory предназначен, чтобы заботиться о пропускной способности сети.
Wake On LAN Агент может отправить Wake On LAN порядка в своей локальной сети. Используя плагин GLPI, вы можете планировать, когда компьютеры должны пробудиться и из которого агента.
Два из этих задач включены в распределение агента источника, локальной инвентаризации и Wake On LAN. Другие задачи распределены раздельно, за исключением для бинарных распределений, где они собраны вместе.
GLPI является информационным ресурс-менеджером с дополнительным интерфейсом администрирования.
Лицензия:
GPL2


Язык программирования:
Perl
Сайт проекта
Скачать Fusioninventory




























































