Назад | Перейти на главную страницу

Как проверить, работает ли служба (которая прослушивает данный порт)?

Хорошо, допустим, у меня есть установка Nagios, которая отслеживает различные службы с помощью так называемых nagios-плагинов.

Что было бы лучше всего для моего плагина nagios (вероятно, написанного на python), чтобы определить, работает ли данная служба в порядке?

Конкретная рассматриваемая служба - это сервер сокетов Python, который прослушивает какой-либо порт. Поэтому я буду следить за тем, чтобы nagios часто проверял эту службу, и если она перестает отвечать / умирает, мне следует перезапустить ее. Что мне делать, чтобы узнать, жив ли сокет-сервер? В конце концов, как мне проверить, отвечает ли он.

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

Любые идеи приветствуются!

Сохраняя стандартные плагины Nagios, которые есть, скажем, в репозитории Ubuntu, вы можете использовать check_tcp плагин для отправки строки, а затем проверьте, возвращает ли он ожидаемый ответ:

Usage:check_tcp -H host -p port [-w <warning time>] [-c <critical time>] [-s <send string>]
[-e <expect string>] [-q <quit string>][-m <maximum bytes>] [-d <delay>]
[-t <timeout seconds>] [-r <refuse state>] [-M <mismatch state>] [-v] [-4|-6] [-j]
[-D <days to cert expiry>] [-S <use SSL>] [-E]

Поскольку вы можете изменить свой сервис, вы можете сделать что-то вроде «Ты в порядке?» и ищите «Я в порядке». Это зависит от того, насколько вы хотите проверить, работает ли служба.

Вы также можете использовать check_procs чтобы узнать, есть ли там процесс обслуживания. Это может быть вместе с проверкой check_tcp или как альтернатива. Опять же, это зависит от того, что вы делаете и сколько на самом деле хотите сделать. Если вы хотите принять активное участие, вы можете написать настраиваемую проверку Nagios, которая будет делать всевозможные вещи для проверки функциональности службы и возврата настраиваемых сообщений о состоянии на сервер Nagios.

Вы можете использовать скрипт python, как вы предлагали проверить, вот тот, который я написал, который просто проверяет 1 порт. https://github.com/jonzobrist/Bash-Admin-Scripts/blob/master/tcpcheck.py

Вот немного другая версия, которая работает намного быстрее и проверяет один и тот же порт указанное вами количество раз. Он поразит локальный сервер 1500 раз менее чем за полсекунды.

https://github.com/jonzobrist/Bash-Admin-Scripts/blob/master/tcpcheck-bulk.py

Если вы ищете локальный сценарий оболочки, pgrep processname работает хорошо, в Bash что-то вроде этого должно дать вам то, что вы хотите.

PROC_PID=$(pgrep processname)
if [ "${PROC_PID}" ]
 then
  echo "Process is running"
 else
  echo "Process is not running"
fi

Вы можете сделать что-то подобное с lsof -i: ПОРТ Для https / tcp 443 будет выглядеть так:

    PORT_LISTEN=$(lsof -i :443 | grep LISTEN)
if [ "${PORT_LISTEN}" ]
 then
  echo "Port is listening ${PORT_LISTEN}"
 else
  echo "Nothing is listening on 443"
fi

Есть несколько способов убедиться, что служба работает.

  1. Вы можете начать с проверки, существует ли имя процесса в ps -ef вывод.
  2. Вы можете проверить порт прослушивания на выходе netstat -lnp | grep your_port.
  3. Вы можете попробовать подключиться к порту с помощью функции Python.
  4. После этого вы можете попытаться запросить какую-либо услугу и проверить возвращенный результат. Это связано с сервисом. Например, вы можете запросить существующую страницу для службы HTTP и так далее. Это также позволит вам измерить время отклика.