Чи є Ping надійним способом перевірити наявність сервера?


96

У своїй програмі я пінг-сервер і чекаю відповіді. Я використовую це для того, щоб визначити, доступний чи чутливий сервер чи ні.

Це надійний спосіб визначення доступності? Я припускаю, що брандмауер може фільтрувати трафік icmp ... Чи є інші недоліки? Чи є більш надійний метод?

Відповіді:


139

Найкращий спосіб визначити, чи живий якийсь віддалений сервіс - це попросити його подати запит так, як це було призначено - адже це єдиний спосіб по-справжньому знати, що щось працює правильно.

Як приклад, я завжди отримую свої балансири навантаження, щоб отримати фактичну відповідь "голови" від наших веб-серверів, ви можете зробити те ж саме для невеликого вибору у вікні БД, якщо хочете, або будь-якого вашого фактичного сервера. Як підказка, ви можете створити на своїх веб-серверах "online.txt" (або будь-яке ім'я, яке ви хочете дати йому), попросіть своїх LB спробувати отримати цей файл, і якщо він не вдасться, він видаляє сервер з VIP, це хороший спосіб вручну вивезти окремі сервери з ваших VIP, просто перейменувавши один файл.

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

Я знаю, що це згадується нижче, але це повторюється знову і знову.

ICMP Echo Requests (він же "Pings") (він же ICMP Type 8) вбудований у специфікацію стеку IP, так, але їх не потрібно ні впроваджувати, ні використовувати. Власне кажучи, існує велика кількість інтернет-провайдерів, які відмовляються пересилати їх і мовчки відмовляються від цих запитів, оскільки вони є формою мережевої атаки (називається pingflood).

Як згадувалося вище, цим керує ОС (зокрема, на рівні мережевого стеку), тому відповідати на це чи ні залежить від конфігурації ОС. Якщо це вимкнено (застереження щодо безпеки?), Ви не можете нічого робити з того, щоб отримувати відповіді ping з іншого кінця. Ось чому це не є надійним.


34
Що сказав чоловік! Я завжди раджу клієнтам , що кращий спосіб дізнатися , якщо сервер в даний час пропонує обслуговування X є запросити обслуговування X .
MadHatter

5
Ми на самому справі побудувати «тест» RESTful API в наших додатках тільки для цього. Тож ми знаємо, що якщо програма реагує на blah / what_app / pulse, вона працює, обслуговує запити та має всі необхідні інструменти (БД, залежності та ін.)
tsykoduk

5
Щоб додати до MadHatter, часто корисно зробити пінг і запит. Таким чином ви можете відразу дізнатися, чи маєте ви справу з підключенням до мережі або відключенням служби ... Або один прагне створити зовсім інші речі, ніж інші.
користувач606723,

Ping - це навіть не надійний тест, на який сервер може реагувати на ping - якщо це не так, то все, що ви знаєте, - це те, що між вами і фільтрує трафік ICMP
Rob Moir

4
Якщо припустити, що машина реагує на ping за звичайних обставин, ви можете використовувати ping як якийсь фільтр цвітіння: Якщо пінг не вдається, сервіс точно не працює (у вас є проблема з мережею, оскільки ми зазвичай встановили, що пінг працює). Однак якщо пінг вдався, сервіс все-таки може бути знижений, як описано в цій відповіді
3Doubloons

10

Однак, більшість часу так:

  • деякі сервери блокують запити ping

  • лише тому, що сервер відповідає , не означає, що веб-сайт (або служба, яку ви плануєте використовувати) автоматично працює , ви також повинні перевірити, чи відповідає відповідь очікуваному вмісту.


5

Це правда, що в багатьох випадках трафік ICMP фільтрується, щоб він міг бути ненадійним ...

Можливо, кращим способом може бути телнет-сервер на сервісному порті, який вас цікавить.

тобто telnet 127.0.0.1 8080


5

Якщо сервер зобов'язаний відповідати лише на pings, то це хороший метод визначення його доступності. Якщо потрібно надати, наприклад, веб-службу, то слід провести певну форму тестування, щоб переконатися, що це працює аналогічно для файлових служб тощо.


3

ping має 2 недоліки:

  • ping надсилає icmp, який може бути відфільтрований брандмауером
  • Порт tcp або udp, який використовує ваша програма, може бути зайнятим або не відкритим - ping не перевіряє цього

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


3

Існують спеціальні інструменти для тестування та моніторингу, як Nagios / Icinga .
За допомогою цих інструментів ви можете (звичайно) робити перевірки за допомогою різних ping-тестів, але також перевіряти свої послуги.

Усі перевірки можуть використовувати повернене значення, щоб класифікувати результат як "хороший", "попереджуючий" та "критичний" і може бути записаний майже в кожній мові програмування.

Звичайно, не простий у налаштуванні (як точка та клацання), але налаштований, надійний та розширюваний. Добре працює у різних дистрибутивах Linux та Unix.


2

Тестуйте потрібні сервіси, лише пінг-сервер не означає, що послуги працюють.

Наприклад:

Уявіть собі веб-сервер з десятком веб-сайтів, тоді мені потрібно знати, чи веб-сайти 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

Використовувати ping, щоб визначити, чи доступний сервер - це як лікар-лікар, що перевіряє, чи дихає пацієнт. Так, це гарне місце для початку, але можуть бути й інші питання.


1

pingПеред тим, як запустити наш системний сервіс, який намагається виконати ssh-з'єднання, ми робимо попередню перевірку того, що хост увімкнено та доступний. Це економить деякий час налагодження, оскільки systemctl startкоманда негайно вийде з ладу, замість того, щоб мовчки вийти з ладу і загубитися в джунглях журналу.

Зауважте, що ping не є "надійним" у тому ж сенсі, що і TCP. Якщо у вас поганий зв’язок (або шалений мережевий стек, дякую Intel mpss ), і пакети відкидаються, один пінг пакетів може вийти з ладу. З іншого боку, TCP-з'єднання надійне проти випавших пакетів. Отже, за іронією довіри, ssh-з'єднання може працювати відразу після однієї ping помилки . Тож якщо ви використовуєте ping для перевірки обгрунтованості, не забудьте дозволити деякі збої.


0

Просто мої два цента: У нас є успадковане додаток , яке використовує цей метод, і повинні були обслуговувати його , тому що пінг був НЕ достатній для визначення доступності послуг.

Пінг просто показує, що сервер здатний слухати, але в нашому випадку сервіс не вдалося запустити без втручання людини.

В результаті блоки, які наївно припускали, що сервер був доступний, намагалися підключитися та таймаутизувати. Замість того, щоб відображати наше повідомлення "Сервер недоступний".

-

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


0

Якщо за звичайних обставин ваш сервер реагує на ping, корисно ввести його в інтервал протягом однієї хвилини, щоб перевірити, чи відповідає він. Це, звичайно, лише говорить вам про те, що на цій IP-адресі є сервер і що від джерела пінгу до пункту призначення є мережевий шлях. Встановлення порогу часу відгуку може також дозволяти стежити за станом мережі. Якщо ви пінг-сервер в Інтернеті, ви можете зробити мало, щоб виправити мережу, але якщо клієнт подзвонить скаржитися, ви вже будете знати про проблему. Крім того, корисне також прошивання google.com. Якщо ви і google обидва вниз, щось відбувається.

Як уже згадували інші, важливо стежити за тим, щоб служба, яку ви надаєте, відповідала та чи була її робота в порядку. Тобто ви можете перевірити, чому веб-вік, який зазвичай відповідає за секунду, зараз відповідає, що я 10 секунд.

Отже, знаючи, що служба не відповідає, і вона не відповідає, дає вам набагато більше інформації, ніж лише один підхід. Крім того, якщо ви також стежите за процесами, знаючи, що ping відповідає, сервіс не відповідає, а веб-сервер не має правильної кількості процесів підкаже вам, де слід шукати першим.

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


0

Ping (Packet Internet Groper) дає вам знати, чи ваша система спілкується з системою, з якою ви хочете встановити з'єднання через мережу. Це навіть пінг, не означає, що працює служба, наприклад, служба RemoteRegistry.

Однак для виправлення будь-якої проблеми потрібен ping. Ви можете віддалено виправити будь-яку проблему. Отже, пінг має своє значення.


-3

Найкращий спосіб, який я використовую в своїх сценаріях - це

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

замість rsh можуть бути використані такі альтернативи, як ремш. Це гарантує, що ваша віддалена система завантажиться повністю і ви можете виконувати команди на ній. Простий ping недостатній, оскільки під час завантаження при запуску мережевих служб система починає реагувати на ping.


3
rsh? Дійсно? Чому б не використовувати sshзамість цього?
Йоахім Зауер

5
rshvs sshвбік, як може виконати date(припустимо, для початку) що-небудь сказати про те, чи працює веб-сервер, SMTP-сервер, DNS-сервер, локальний сервер бази даних чи що не працює та чи може обслуговувати запити? Краще насправді запитати конкретну послугу, для якої ви хочете перевірити наявність (яка може бути віддаленою оболонкою, але не обов'язково).
CVn

-3

Коли я перезавантажую Windows-сервер, я відкриваю вікно командного рядка і входжу

ping <box> -t

По-перше, це підкаже, що воно доступне - це поле знижується. Тоді ви отримаєте багато "тайм-аут запиту". Коли ви починаєте отримувати відповіді, вікно з’являється.


7
Це не означає, що це доступно для виконання справжньої роботи, а лише відповідь на ping.
користувач9517

Може бути. Я завжди можу ввійти на сервер, і це все, що мені потрібно.
Дейв

Цілком можливо, що сервер може реагувати на ping, але не (поки що або навіть зовсім) не запустив будь-які мережеві функції вищого рівня. Єдине, на чому пінг-тести - це пінг. І, можливо, дозвіл назви, якщо ви пінг по імені, а не по IP
Роб Моїр

У мене було багато випадків, коли сервер відповідав на pings, але не в змозі подати будь-який інший запит, включаючи логотипи. Пінг може бути дуже грубим засобом підказати, коли сервер почав повертатися, але це все. Звичайно, якщо припустити, що сервер навіть відповідає на pings.
Джон Гарденєр
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.