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

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

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

89 голосов | спросил Peter Kelly 19 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 19 Sep 2011 14:00:01 +0400 2011, 14:00:01

14 ответов


138

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

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

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

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

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

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

ответил Chopper3 19 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 19 Sep 2011 14:10:05 +0400 2011, 14:10:05
10

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

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

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

ответил wildpeaks 19 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 19 Sep 2011 14:08:39 +0400 2011, 14:08:39
5

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

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

то есть. telnet 127.0.0.1 8080

ответил sdmythos_gr 19 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 19 Sep 2011 14:07:09 +0400 2011, 14:07:09
5

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

ответил sdmythos_gr 19 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 19 Sep 2011 14:07:09 +0400 2011, 14:07:09
3

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

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

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

ответил JMW 19 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 19 Sep 2011 14:10:01 +0400 2011, 14:10:01
3

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

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

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

ответил ppuschmann 19 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 19 Sep 2011 23:20:12 +0400 2011, 23:20:12
2

Проверьте службы, которые вы ищете, просто 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('[email protected]', 'Website is DOWN', $message);
?>
ответил B4NZ41 19 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 19 Sep 2011 22:24:11 +0400 2011, 22:24:11
2

Использование ping для определения того, доступен ли сервер, похож на врача ER, проверяющего, не дышит ли пациент. Да, это хорошее место для начала, но могут быть и другие проблемы.

ответил Adam 28 12011vEurope/Moscow11bEurope/MoscowMon, 28 Nov 2011 19:42:53 +0400 2011, 19:42:53
0

Только мои два цента: У нас есть устаревшее приложение, которое использует этот метод и должно было его обслуживать, потому что для проверки доступности службы был достаточно not .

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

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

-

Наше текущее приложение, которое передает через XMLHTTPRequests веб-сервер, отправляет сформированное сообщение, на которое сервер будет отвечать кодом состояния. Код состояния вычисляется сервером, выполняющим ряд проверок, чтобы гарантировать, что различные подсистемы находятся в сети (DB, необходимые каталоги доступны для записи и т. Д.).

ответил Robbie 19 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 19 Sep 2011 22:39:04 +0400 2011, 22:39:04
0

Если в нормальных условиях ваш сервер отвечает на ping, полезно проверить его через одну минуту, чтобы проверить, отвечает ли он. Это, конечно же, говорит только о том, что на этом IP-адресе есть сервер и что есть сетевой путь от источника пинга до адресата. Установка порога времени отклика может также контролировать состояние сети. Если вы пингоруете сервер в Интернете, может быть мало что можно сделать, чтобы исправить сеть, но если клиент звонит, чтобы жаловаться, вы уже будете знать о проблеме. Кроме того, полезно использовать pinging google.com. Если вы и google оба вниз, что-то происходит.

Как уже упоминалось, важно следить за тем, чтобы служба, которую вы предоставляете, отвечала и что ее производительность в порядке. То есть вам может потребоваться проверить, почему веб-возраст, который обычно отвечает за секунду, теперь отвечает за 10 секунд.

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

Вы можете сходить с ума от контроля, поэтому достаточно просто контролировать, чтобы сказать вам, когда что-то плохое произошло или становится опасным. То есть слишком много обмена,> 90% использования диска, высокий диск io, 100% процессор в течение длительного времени и помните, что мониторинг - это просто атака отказа в обслуживании, выполняемая очень медленно.

ответил Robbie 19 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 19 Sep 2011 22:39:04 +0400 2011, 22:39:04
0

Мы используем ping, чтобы выполнить предварительную проверку, чтобы хост был включен и доступен, прежде чем запускать нашу службу systemd, которая пытается подключиться к ней. Это позволяет сэкономить некоторое время на отладку, так как команда systemctl start будет немедленно терпеть неудачу, вместо того, чтобы тихо провалиться и затеряться в джунглях journalctl.

Обратите внимание, что ping не является «надежным» в том же смысле, что и TCP. Если у вас плохое соединение (или дерьмовый сетевой стек, спасибо Intel mpss ), и пакеты отбрасываются, может произойти сбой одного пакета ping. С другой стороны, TCP-соединение является надежным в отношении отброшенных пакетов. Таким образом, по иронии судьбы, ssh-соединение может работать сразу после одного ping сбоя . Поэтому, если вы используете ping для проверки работоспособности, обязательно допустите некоторый сбой.

ответил Mark Lakata 25 AM00000020000004531 2015, 02:59:45
0

Ping (Packet Internet Groper) позволяет узнать, взаимодействует ли ваша система с системой, с которой вы хотите установить соединение по сети. Он даже пинги, не означает, что служба, например служба RemoteRegistry, запущена.

Однако, чтобы исправить любую проблему, необходимо выполнить ping. Вы можете удаленно исправить любую проблему. Следовательно, ping имеет свое значение.

ответил sairam 18 +03002016-10-18T05:57:33+03:00312016bEurope/MoscowTue, 18 Oct 2016 05:57:33 +0300 2016, 05:57:33
-3

Лучший способ, который я использую в своих сценариях, -

#rsh servername.com "date"
Mon Sep 19 04:42:20 PDT 2011

вместо rsh могут использоваться альтернативы, такие как remsh. Это гарантирует полную загрузку вашей удаленной системы, и вы можете запускать на ней команды. Простой пинг недостаточно, так как во время загрузки при запуске сетевых сервисов система начинает отвечать на пинг.

ответил Amol Sale 19 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 19 Sep 2011 15:55:11 +0400 2011, 15:55:11
-3

Когда я перезагружаю сервер Windows, я открываю окно командной строки и вводим

ping <box> -t

Сначала он предположит, что он доступен - это окно идет вниз. Тогда вы получите много «тайм-аут запроса». Когда вы начинаете получать ответ, поле вверх.

ответил Dave 19 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 19 Sep 2011 20:50:05 +0400 2011, 20:50:05

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132