Вопрос: Является ли Ping надежным способом проверки наличия сервера?


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

Является ли это надежным способом определения доступности? Я предполагаю, что брандмауэр может фильтровать трафик icmp ... Есть ли другие недостатки? Есть ли более надежный метод?


89
2017-09-19 10:00


Источник




Ответы:


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

В качестве примера я всегда получаю свои балансировки нагрузки, чтобы получить реальный ответ «головы» с наших веб-серверов, вы можете сделать то же самое для небольшого выбора в ящике БД, если захотите, или что бы ни делал ваш фактический сервер. В качестве подсказки вы можете создать «онлайн.txt» (или любое другое имя, которое вы хотите дать) на своих веб-серверах, попросите LB попытаться получить этот файл, и если он не удастся, он удалит сервер из VIP, это хороший способ вручную вывести отдельные серверы из ваших VIP-персон, просто переименовав один файл.

Ping тестирует только способность реагировать на pings, так что это базовая ОС, части IP-стека и физические ссылки - но это все, все остальное может быть опущено, и вы не знаете.

Я знаю, что это упоминается ниже, но это повторяется снова и снова.

Запросы ICMP Echo (ака «Pings») (также ICMP Type 8) встроены в спецификацию стека IP, да, но не обязательны для внедрения или использования. На самом деле существует большое количество интернет-провайдеров, которые отказываются пересылать их и молча отбрасывать эти запросы, поскольку они являются одной из форм сетевой атаки (называемой пинг-флагом).

Как уже упоминалось выше, это обрабатывается ОС (в частности, на уровне сетевого стека), поэтому для ответа на те или иные проблемы зависит конфигурация ОС. Если это отключено (меры предосторожности?), Вы не можете ничего сделать с получением ответов ping с другого конца. Вот почему это ненадежно.


138
2017-09-19 10:10



Что сказал этот человек! Я всегда консультирую клиентов, что лучший способ сказать, действительно ли сервер в настоящее время предлагает услугу X, - это запрос службы X, - MadHatter
Мы фактически создаем «тестовый» RESTful API в наших приложениях просто для этого. Таким образом, мы знаем, что если приложение реагирует на blah / whatever_app / pulse, оно работает, запросы на обслуживание и все необходимые ему инструменты (DB, зависимости и т. Д.), - tsykoduk
Чтобы добавить к MadHatter, часто рекомендуется делать пинг и запрос. Таким образом, вы сразу можете узнать, имеете ли вы дело с сетевым подключением или отключением службы ... Любой из них имеет тенденцию создавать совершенно разные вещи, чем другие. - user606723
Ping даже не является надежным тестом, который сам сервер может откликнуться на ping - если это не так, все, что вы знаете, это то, что что-то между вами и этим является фильтрацией трафика ICMP - Rob Moir
Предполагая, что машина реагирует на ping при нормальных обстоятельствах, вы можете использовать ping как какой-то фильтр цветения: если ping терпит неудачу, служба определенно не работает (у вас есть сетевая проблема, так как мы обычно установили ping-работы). Однако, если ping успешно завершает работу, все еще может быть отключено, как описано в этом ответе - 3Doubloons


В большинстве случаев, да, однако:

  • некоторые серверы блокируют запросы ping

  • просто потому, что сервер отвечает автоматически не означает веб-сайт (или любой другой сервис, который вы ожидаете использовать) работает, вы также должны проверить, соответствует ли ответ ожидаемому содержимому.


10
2017-09-19 10:08





Это правда, что во многих случаях ICMP-трафик фильтруется, поэтому он может быть ненадежным ...

Возможно, лучшим способом может быть telnet-сервер на интересующем вас порте обслуживания.

т. е. telnet 127.0.0.1 8080


5
2017-09-19 10:07





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


5
2017-09-19 10:10





ping имеет 2 недостатка:

  • ping отправляет icmp, который может быть отфильтрован брандмауэром
  • порт tcp или udp, используемый вашим приложением, может быть занят или не открыт - ping не проверяет, что

лучшее решение - проверить ваш порт udp / tcp напрямую, чтобы узнать, доступна ли услуга ... :-)


3
2017-09-19 19:20





Существуют специальные инструменты для тестирования и мониторинга, например Nagios / Icinga,
С помощью этих инструментов вы можете (конечно) делать проверки с помощью различных тестов ping, а также проверять свои услуги.

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

Конечно, нелегко настроить (например, точку и щелчок), но настраиваемый, надежный и расширяемый. Хорошо работает в различных дистрибутивах Linux и Unix.


3
2017-09-19 18:24





Проверяйте службы, которые вы ищете, просто ping-сервер не означает, что службы работают.

Например:

Представьте себе веб-сервер с десятком веб-сайтов, тогда мне нужно знать, есть ли веб-сайты UP, я сделал себе крошечный скрипт в php и запускал его каждые 10 минут.

Сценарий делает следующее:

<?php
    $website1 = "http://www.mywebsite.com/";
    $myWebsite = file_get_contents($website1);
    $message = 'My website' . $website1 . ' is DOWN at the moment.';
    if (empty($myWebsite)) mail('mail@server.com', 'Website is DOWN', $message);
?>

2
2017-11-28 15:42