Управлять ИТ без финансового контроля — всё равно что плыть без компаса. В GLPI есть встроенные модули для контрактов, бюджетов, поставщиков и амортизации, интегрированные с активами и заявками. Но на практике ломается не ввод данных, а то, чтобы оповещения срабатывали, а цифры сходились.
Контракты: что регистрировать (и чего обычно не хватает)
В Управление > Контракты каждый контракт должен содержать:
- Идентификацию: номер, тип (поддержка, обслуживание, аренда, лицензия) и привязанного поставщика.
- Срок действия: дату начала и длительность в месяцах. GLPI не хранит дату окончания; она вычисляется из даты начала плюс длительность.
- Предупреждение (notice): в месяцах. Это то, насколько заранее должно прийти оповещение о продлении.
- Продление: никогда, автоматическое или явное.
- Затраты: на вкладке затрат, с периодичностью (ежемесячно, ежегодно), чтобы расход сходился с бюджетом.
- Охватываемые активы: привяжите компьютеры, серверы и прочие элементы, чтобы знать, что останется без покрытия по окончании срока.
Классическая ловушка: зарегистрировать контракт с длительностью 0 (бессрочный). Без длительности нельзя вычислить дату окончания, и оповещение об окончании срока просто никогда не срабатывает.
Как добиться, чтобы оповещения действительно срабатывали
Одновременно должны быть включены три уровня, иначе не уйдёт ни одно письмо:
- Глобальные уведомления включены в Настройки > Уведомления, с настроенным реальным получателем.
- Оповещение включено в самом контракте (окончание контракта и/или предупреждение). Значение по умолчанию берётся из ключа
default_contract_alert. - Автоматическое действие выполняется. Задача
contractотправляет письма, только если cron GLPI действительно вызывается.
В средах клиентов неисправность номер один — остановленный cron. Убедитесь, что GLPI запускается операционной системой, а не только тогда, когда кто-то заходит в интерфейс:
# /etc/cron.d/glpi - dispara as ações automáticas do GLPI a cada minuto
* * * * * www-data /usr/bin/php /var/www/html/glpi/front/cron.php >/dev/null 2>&1
Затем в Настройки > Автоматические действия откройте задачу contract и проверьте: режим CLI/внешний, частоту (по умолчанию ежедневно) и дату последнего запуска. Если режим установлен как «GLPI» (внутренний), задача зависит от того, что кто-то работает в системе в нужное время, а это ненадёжно.
Настроенное оповещение, которое не отправляется повторно
Это деталь, которая проявляется только в сопровождении: GLPI записывает в glpi_alerts каждое уже отправленное уведомление, чтобы не дублировать его. Если письмо не ушло (неверный SMTP, переполненный ящик), а запись создана, GLPI считает, что «уже уведомил», и не отправляет повторно, даже после того как вы исправите SMTP. Чтобы принудительно отправить оповещение по конкретному контракту, удалите отметку оповещения:
-- Descobrir o id do contrato pelo nome
SELECT id, name FROM glpi_contracts WHERE name LIKE '%Suporte Datacenter%';
-- Remover o marcador de alerta já enviado (ex.: contrato 42)
DELETE FROM glpi_alerts
WHERE itemtype = 'Contract' AND items_id = 42;
При следующем запуске cron задача contract заново оценит срок и отправит оповещение. То же касается гарантий, только с itemtype = 'Infocom'.
Быстрая диагностика: истекающие контракты
Прежде чем доверять панели, прямой SELECT в базе подтвердит, что действительно истекает в ближайшие 90 дней, с поставщиком и оставшимися днями:
SELECT c.id,
c.name AS contrato,
s.name AS fornecedor,
c.begin_date,
DATE_ADD(c.begin_date, INTERVAL c.duration MONTH) AS fim,
DATEDIFF(DATE_ADD(c.begin_date, INTERVAL c.duration MONTH),
CURDATE()) AS dias_restantes
FROM glpi_contracts c
LEFT JOIN glpi_contracts_suppliers cs ON cs.contracts_id = c.id
LEFT JOIN glpi_suppliers s ON s.id = cs.suppliers_id
WHERE c.is_deleted = 0
AND c.is_template = 0
AND c.duration > 0
AND DATE_ADD(c.begin_date, INTERVAL c.duration MONTH)
BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 90 DAY)
ORDER BY fim ASC;
Запускайте как запрос только на чтение. Это тот же расчёт, что выполняет интерфейс; полезно для проверки перед массовым продлением.
Бюджеты, связанные с контрактами и закупками
В Управление > Бюджеты задайте сумму, период (год, полугодие или проект) и тип. Момент, который многие упускают: бюджет в GLPI — это ориентир для отслеживания, а не блокировка. Он не мешает проводить расходы сверх лимита; он показывает план против факта, когда вы привязываете к этому бюджету затраты по контрактам и финансовую информацию активов (Infocom). Без этой привязки расход остаётся нулевым, и отчёт вводит в заблуждение.
Амортизация активов
У каждого актива есть вкладка Управление (Infocom) со стоимостью покупки, датой приобретения, гарантией и амортизацией. GLPI автоматически вычисляет балансовую стоимость по типу и сроку. Правильный выбор метода позволяет избежать искажений в TCO:
| Сценарий | Тип (sink_type) | Типичный срок (лет) | Примечание |
|---|---|---|---|
| Ноутбуки и настольные ПК | Линейная | 4–5 | Постоянная потеря; легко проверять. |
| Серверы и СХД | Линейная | 5–7 | Отслеживайте вместе с расширенной гарантией. |
| Оборудование с ускоренной потерей в начале | Дегрессивная | 3–5 | Требует согласованного коэффициента (sink_coeff). |
| Лицензия или актив без существенной остаточной стоимости | Линейная | 1–3 | Согласуйте срок со сроком действия контракта. |
Задайте значения по умолчанию в Настройки > Общие > вкладка Активы, чтобы не заполнять каждый элемент отдельно. Типичная ошибка здесь — оставить пустой дату ввода в эксплуатацию: без неё GLPI не знает, с какого момента начислять амортизацию, и балансовая стоимость навсегда остаётся равной стоимости покупки.
Отчёты и стоимость обслуживания
- Активы по стоимости: сколько вложено по местоположениям или организациям.
- Истекающие контракты: тот же список, что в SELECT выше, теперь на панели.
- Амортизация: балансовая стоимость парка во времени.
- Стоимость обслуживания: сумма контракта, делённая на число заявок, обработанных этим поставщиком, — отличное обоснование для пересмотра условий.
Чек-лист сопровождения NexTool
При сопровождении сред клиентов, прежде чем доверять финансовому учёту в GLPI, мы всегда проверяем одну и ту же последовательность: cron вызывает front/cron.php через операционную систему (а не через браузер); задача contract во внешнем режиме с недавним последним запуском; глобальные уведомления активны, а в оповещении указан реальный получатель; у контрактов нет ошибочной duration = 0; и проверка glpi_alerts, когда клиент говорит, что «перестали приходить письма». Девять из десяти случаев «GLPI не предупреждает об окончании срока» сводятся к одному из этих пяти пунктов, а не к ошибке продукта.
Нужно, чтобы контракты, бюджеты и оповещения GLPI работали от начала до конца? NexTool внедряет и сопровождает эти процессы в средах B2B-клиентов: узнайте о сопровождении NexTool.
Проверено командой NexTool Solutions.