Мониторинг серверов на php

Мониторинг порта сервера на PHP с уведомлением в Телеграм чат Leave a comment

Продолжаем серию материалов об использовании PHP на серверах. Сегодня речь пойдёт о том как можно мониторить порты сервера и сообщать о проблемах в Telegram чат. Для организации мониторинга потребуется:

  1. Наличие учётной записи Telegram
  2. Знание PHP
  3. Сервера которые необходимо мониторить
  4. Созданный бот в Telegram и полученный токен бота
  5. Ubuntu сервер с CRON, на котором будет работать скрипт проверки

Предыстория:

На сегодняшний момент есть масса средств мониторинга серверной инфраструктуры, пожалуй подобных инструментом на столько много и они на столько «круты», что не всегда находится время для изучения этих монстров мониторинга, а иногда просто необходимо быть вкурсе работы своей серверной инфраструктуры.

Идея:

Всё очень просто, надо 1-н раз в минуту при помощи CRON запускать скрипт проверки, который «пропингует» сервера и если какой-то из них не ответил в заданный интервал времени — скрипт сообщит об этом в телеграм чат. Или можно просто «демонизировать» скрипт, тут на вкус и цвет….

Список серверов для мониторинга будет представлять из себя массив с параметрами, из важного здесь адрес и порт куда будет «стучаться» скрипт. Для того что бы в момент падения сервера скрипт не заспамил нас сообщениями, требуется ограничить отправку сообщений не чаще чем раз в N секунд. Время отправки нужно сохранять по каждому серверу.

Для записи времени отправки по каждому серверу будет достаточно сохранять данные в файл, в нашем случае будет использован тип переменной array, значение которой будет сохранено в php файл и значение переменной из этого файла будет присваиваться в момент выполнения скрипта.

Ниже код всего скрипта по мониторингу (пингу) серверов, при помощи php и отправка уведомлений в Телеграм чат:

Немного пояснения по коду (сверху вниз):

  • Подключаем файл с «базой данных», в котором хранится информация об отправка сообщений( что бы можно было ограничить частоту отправлений сообщений)
  • Указываем массив серверов которые необходимо мониторить на предмет работоспособности
  • В цикле пробегаемся по каждому серверу и проверяем его активность при помощи функции
  • В теле цикла у нас задан ИД чата куда слать уведомления
  • И тут же в цикле проверяем, если время предыдущей отправки старше текущего времени, то отправлять сообщение не нужно
  • Отправляем сообщение, если телеграм ответил нам не пустым сообщением, сохраняем информацию о времени отправки в массив нашей файловой бд
  • Записываем нашу бд в файл для последующего использования
  • Всё, скрипт свою работу сделал!

Пояснение к классу:

  • Для работы с Telegram нужен бот, токен бота,и ид чата куда отправлять сообщения (для группового чата ид начинается с знака «-«)
  • Отправка осуществляется через CURL, если телеграм заблокирован — можно использовать настройки PROXY
  • Для отправки сообщения в Telegram необходимо вызвать 1-н метод sendMessage куда передать ИД чата и сообщение

Немного про Telegram:

  • Для того что бы сообщения приходили вам, как пользователю Telegram, достаточно подписаться на этого бота через токен которого вы отправляете сообщения. Для того что бы сообщения приходили в групповой чат, необходимо в групповой чат добавить вашего бота.
  • Если необходимо узнать ИД пользователя Telegram или ИД публичного:
    1. Для личных сообщений бота, просто напишите боту несколько сообщений (от 3 до 7)
    2. Для сообщений в групповой чат, так же напишите в общий чат, каждое сообщение должно упоминать имя вашего бота
    3. Затем воспользуйтесь методом класса getBotUpdate, в ответ получите JSON с сообщениями которые вы отправили боту. В этом JSON найдёте необходимые вам ИД чата или ИД вашего Telegram аккаунта

Стуктура файла БД в виде php файла:

 

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

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