Мониторинг времени на сервере с помощью Zabbix

Очередная статья на тему использования современной универсальной системы мониторинга. Расскажу, как с помощью zabbix настроить мониторинг времени на серверах и предупреждать при слишком больших расхождениях. На мой взгляд, полезная метрика, которой почему-то нет в базовых проверках.

Онлайн-курс по устройству компьютерных сетей

На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

В последних версиях Zabbix Server описанный в статье функционал присутствует в стандартных шаблонах для операционных систем. Настраивать вручную мониторинг времени не имеет смысла.

Цели статьи

  1. Рассказать о разных способах мониторинга локального времени на сервере.
  2. Описать выбранный способ.
  3. Предоставить готовый шаблон для zabbix сервера.

Введение

Задача по мониторингу времени на сервере на первый взгляд кажется тривиальной, но с ней не все так просто. Я несколько раз брался за эту задачу и не доводил ее до конца. Сейчас уже не помню всех подробностей, так как поделиться решил финальной версией, которая уже некоторое время у меня функционирует. Основная проблема там в том, что время с агента берется в один момент, а время заббикс сервера берется в другой момент. И когда они сравниваются, может быть большое расхождение именно потому, что бралось время для сравения в разные моменты, а не потому, что время реально расходится.

Сравнение времени идет между временем сервера zabbix и локальным временем на сервере, где установлен агент, с помощью встроенной функции fuzzytime. Я для себя решил, что мне достаточно проверять время раз в минуту. Если расхождение будет более 60 секунд в трех последних проверках, то срабатывает триггер.

Теоретически, к этому триггеру можно прицепить action, который будет что-то исполнять на сервере. К примеру, запуск утилиты ntpdate для синхронизации времени. Но я не стал это настраивать, так как на всех серверах у меня всегда работает служба ntpd или chrony. Так что если время неактуальное, то надо идти на сервер и проверять, что со службой синхронизации времени.

Приступаем к настройке.

Если у вас еще нет своего сервера для мониторинга, то рекомендую материалы на эту тему. Для тех, кто предпочитает систему CentOS:

  1. Установка CentOS 8.
  2. Настройка CentOS 8.
  3. Установка и настройка zabbix сервера.

То же самое на Debian 10, если предпочитаете его:

  1. Установка Debian 10.
  2. Базовая настройка Debian.
  3. Установка и настройка zabbix на debian.

Элемент данных для мониторинга за временем

В финальном варианте я предлагаю следующий элемент данных для мониторинга локального времени на сервере.

Мониторинг времени севрера в zabbix

Это вычисляемый элемент данных. Формула:

fuzzytime(system.localtime,60)

В данном случае фукнция fuzzytime сравнивает время на сервере zabbix с локальным временем наблюдаемого сервера. Если разница больше 60 секунд, функция возвратит 0, если меньше, то 1.

С помощью вычисляемого элемента в базу сразу идет конкретный результат проверки на текущий момент времени, который потом легко использовать в триггере. Не нужно делать каких-то вычислений и сравнений в нем. Я просто беру 3 последних проверки и если они все три вернули значение 0, значит триггер сработает.

Вместо вычисляемого элемента можно было бы сделать обычный с ключом system.localtime, а затем функцию fuzzytime использовать уже в триггере. Но там может получаться большая погрешность, если интервал обновления будет большой (несколько минут), а проверяемая разница небольшая (десятки секунд). Мне не понравилось, как это работало, поэтому переделал на вычисляемое значение сразу в итеме.

Триггер для оповещения о неправильном времени

Вот пример самого триггера для оповещений.

Триггер на большую разницу во времени

Если 3 последние проверки были с ошибкой, то их сумма будет равно 0. После этого шлем уведомление. Как только время будет синхронизировано, триггер сразу же перейдет в нормальное состояние.

Вот готовый шаблон с элементом и триггером zabbix_time.xml.. Проверки работают как на linux, так и windows серверах. Шаблон выгружен с серера версии 4.0.

Важно следить, чтобы на самом сервере мониторинга было всегда правильное время, иначе в мониторинге не будет никакого смысла. Сравнение идет конкретно со временем на сервере zabbix. Нужно это помнить и следить за ним.

Проверка работы

Для проверки работы мониторинга за временем, достаточно на каком-то сервере установить время с отставанием или опережением более чем на 60 секунд. После этого подождать 3 неудачные проверки.

Проверка мониторинга времени

После этого сработает триггер.

Сработавший триггер

Как видно по графику, 3 неверных значения пришли к 14:40, в этот момент сработал триггер. В 14:47 проверка вернула значение 1 и триггер перешл в состояние РЕШЕНО. В это время я сначала остановил ntpd, потом задал неправильное время командой:

# date +%T -s "14:35:13"

Этим я создал отставание на полторы минуты. Подождал несколько минут, потом обратно запустил службу ntpd и дождался, когда она проведет синхронизацию.

Заключение

Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

Такая проверка времени серверов работает нормально и ложных срабатываний почти нет. Если вам нужны более жесткие интервалы проверки, то могут быть трудности. К примеру, если вам надо сделить за временем и предупреждать, когда разница становится 5 секунд. Если сделать, как показано у меня, то будет работать не надежно.

Точно не знаю, с чем это связано. Возможно сетевые задержки, или в работе вычисляемых значений. Тут надо внимательно смотреть в реализацию fuzzytime. Мне это было не нужно. Если кто-то решал подобную задачу, прошу поделиться в комментариях, как это делали вы.

Читайте мои остальные статьи по мониторингу с помощью zabbix.

Углубленный онлайн-курс по MikroTik.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

27 комментариев

  1. Нурлан

    Как мониторить время если часовой пояс отличается на агенте и на сервер?

  2. Добрый день. Не подскажите, скачал Ваш шаблон и установил на своём сервере. Но выдаёт ошибку Cannot evaluate function "fuzzytime(60)": item "192.168.***.***:system.localtime" does not exist. Заранее благодарю!

    • Сейчас нет смысла использовать этот шаблон. Мониторинг времени добавили в стандартные шаблоны zabbix, начиная с версии 4.4, если не ошибаюсь.

  3. Подскажите - как можно в Zabbix настроить мониторинг продолжительности работы запущенной программы в Windows?
    Спасибо.

    • В Zabbix нет подобного функционала. Надо как-то со стороны собирать эти данные и передавать в Zabbix. Например с помощью скрипта powershell следить за работой процесса.

  4. Никита

    Добрый день. Важное уточнение - нужно создать в шаблоне (или чтобы был в узле сети) элемент данных:
    system.localtime
    целое положительное
    1 раз в минуту проверка

    он возвратит данные о времени utc формате.
    иначе, Ваш шаблон не работает и ругается что нет этого элемента

    • Сейчас вообще не имеет смысла это настраивать самому. В последних версиях стандартного шаблона linux есть проверка времени сервера, где установлен агент.

      • Никита

        добрый день!

        Спасибо. понятно. я пока на 4.2 но со старыми шаблонами.
        Не затруднит добавить это замечание в пост?

        • Я тоже долго сидел на серверах, которые регулярно обновлялись. Я даже не знал, что в новых версиях установки шаблоны уже другие. А те, кто обновляются со старых версий новые шаблоны не получают. Статью сейчас подправлю.

  5. Добрый день

    Может быть, не совсем по теме - но есть ли идеи, как реализовать такую проверку, но по сравнению не с временем на zabbix сервере, а с временем на другом хосте(который то же есть в заббикс, и считается эталонным)?

    • Не знаю. Проще всего синхронизировать время заббикс сервера с эталоном а потом уже с ним всех остальных сравнивать. Кстати, в последних версиях zabbix сервера, в дефолтных шаблонах для linux уже есть функционал мониторинга за временем. Так что статья не актуальна. Нет смысла городить свои костыли.

  6. Здравствуйте.

    Конечно не в тему, но у меня вот такой вопрос. Как в письме указать сколько времени проработала машина до отключения?

    • По идее, это не сложно, но я лично не делал. Агент по-умолчанию собирает информацию об аптайме сервера. Нужно создать отдельный тип оповещения для триггера времени. В этом оповещении в шаблон письма добавить значение итема.

  7. Владимир

    По моему если не критично то интервал проверки времени надо увеличить 30 минут или час. А то сервер тратит свои мощности на отписку + служба синхронизации по времени. В винде не спорю там время как угодно может прыгать.

    • Интервалы выбираются на усмотрение. Можно и раз в сутки запускать. Если производительности сервера хватает, я обычно ставлю почаще. Так просто удобнее.

  8. Всё верно.
    В шаблоне Template OS Windows по умолчанию нет элемента данных содержащих параметр system.localtime

    В шаблоне Template OS Windows, нужно по аналогии создать элемент данных Host local time из шаблона Template OS Linux

    • Спасибо за информацию. Я, похоже, просто забыл об этом, так как добавил элемент в шаблон давно, а когда писал статью, не вспомнил об этом, поэтому сам с ошибкой не сталкивался.

  9. Аноним

    Походу он просто при сканировании почему-то не создался сам...

  10. Аноним

    Блин, вот только написал проблему, сразу и решил =Р
    просто создал новый item с параметром key = system.localtime
    теперь всё работает, проверил изменением времени

  11. Аноним

    на win машинках выдает только Cannot evaluate function "fuzzytime(60)": item "hostname:system.localtime" does not exist.

  12. Аноним

    Идентичная проблема.

  13. Аноним

    На клиентах windows получаем ошибку
    Cannot evaluate function "fuzzytime(60)": item "PC-01:system.localtime" does not exist.

    Ничего не нужно дополнительно ставить на win клиенты (например ntp клиенты какие-нибудь)?

    • Вроде нет, я ничего не ставил. Первые тесты как раз на win машинах сделал, подергав их время. Установка агента дефолтная.

    • Аноним

      Добрый день. Получил такую же ошибку на Win-хостах. Причем самое интересное, что в разных офисах, все за zabbox-proxy, одни сервера отдают значение и все работает, а другие нет.

    • Аноним

      Удалось найти решение?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar