Pertanyaan Apakah Ping cara yang dapat diandalkan untuk memeriksa apakah server tersedia?


Dalam aplikasi saya, saya melakukan ping server dan menunggu jawaban. Saya menggunakan ini untuk menentukan apakah server tersedia dan responsif atau tidak.

Apakah ini cara yang dapat diandalkan untuk menentukan ketersediaan? Saya menganggap firewall bisa menyaring lalu lintas icmp ... Apakah ada kekurangan lain? Apakah ada metode yang lebih andal?


89
2017-09-19 10:00






Jawaban:


Cara terbaik untuk mengetahui apakah layanan jarak jauh yang diberikan masih hidup adalah dengan meminta layanan untuk melayani dengan cara yang dimaksudkan - sebenarnya itu satu-satunya cara untuk benar-benar mengetahui sesuatu bekerja dengan benar.

Sebagai contoh, saya selalu mendapatkan load-balancer untuk mendapatkan respons 'kepala' yang sebenarnya dari server web kami, Anda dapat melakukan hal yang sama untuk pemilihan kecil pada kotak DB jika Anda ingin, atau apa pun yang dilayani server Anda sebenarnya. Sebagai tip Anda dapat membuat 'online.txt' (atau nama apa pun yang Anda ingin berikan) di server web Anda, minta LB Anda mencoba untuk mendapatkan file itu dan jika gagal maka ia menghapus server dari VIP, ini adalah cara bagus untuk mengambil server secara manual dari VIP Anda hanya dengan mengganti nama file tunggal.

Ping hanya menguji kemampuan untuk merespons ping, jadi itu basis OS, bagian dari tumpukan IP dan tautan fisik - tetapi itu saja, semua yang lain bisa turun dan Anda tidak akan tahu.

Saya tahu ini disebutkan di bawah ini, tetapi terus mengulangi lagi dan lagi.

Permintaan ICMP Echo (alias "ping") (alias ICMP Tipe 8) dibangun ke spesifikasi tumpukan IP, ya, tetapi tidak perlu diterapkan atau digunakan. Faktanya, ada banyak penyedia internet yang menolak untuk meneruskannya dan diam-diam menjatuhkan permintaan tersebut, karena mereka adalah bentuk serangan jaringan (disebut pingflood).

Seperti disebutkan di atas, ini ditangani oleh OS (khususnya pada level tumpukan jaringan) dan demikian terserah pada konfigurasi OS untuk meresponnya atau tidak. Jika ini dimatikan (tindakan pencegahan keamanan?), Anda tidak dapat melakukan apa pun untuk menerima balasan ping dari ujung yang lain. Inilah mengapa itu tidak dapat diandalkan.


137
2017-09-19 10:10



Apa kata pria itu! Saya selalu menyarankan klien bahwa cara terbaik untuk mengetahui apakah server saat ini menawarkan layanan X adalah untuk meminta layanan X. - MadHatter
Kami benar-benar membangun "Test" RESTful API ke dalam aplikasi kami hanya untuk ini. Jadi kita tahu bahwa jika sebuah aplikasi merespons blah / whatever_app / pulse, permintaan layanan, dan memiliki semua alat yang dibutuhkan (DB, dependancies dll) - tsykoduk
Untuk menambah MadHatter, sering kali ada baiknya melakukan ping dan permintaan. Dengan cara ini Anda dapat langsung tahu apakah Anda sedang berhadapan dengan konektivitas jaringan atau gangguan layanan ... Salah satu cenderung menciptakan hal yang sama sekali berbeda dari yang lain. - user606723
Ping bahkan bukan tes yang dapat diandalkan bahwa server itu sendiri dapat merespon ping - jika tidak maka semua yang Anda tahu adalah bahwa sesuatu antara Anda dan itu memfilter traffic ICMP - Rob Moir
Dengan asumsi mesin merespons ping dalam keadaan normal, Anda dapat menggunakan ping sebagai semacam filter mekar: Jika ping gagal, layanan pasti turun (Anda memiliki masalah jaringan, karena kami telah membuat ping bekerja biasanya). Namun, jika ping succeds layanan masih bisa turun seperti yang dijelaskan dalam jawaban ini - 3Doubloons


Namun, sebagian besar waktu, ya:

  • beberapa server memblokir permintaan ping

  • hanya karena server merespons tidak otomatis berarti situs web (atau layanan apa pun yang Anda harapkan untuk digunakan) sedang bekerja, Anda juga harus memeriksa apakah respons sesuai dengan konten yang diharapkan.


10
2017-09-19 10:08





Memang benar bahwa pada banyak kesempatan lalu lintas ICMP disaring keluar sehingga bisa menjadi tidak dapat diandalkan ...

Cara yang lebih baik mungkin adalah dengan telnet server di port layanan yang Anda minati.

misalnya telnet 127.0.0.1 8080


5
2017-09-19 10:07





Jika server hanya diminta untuk merespon ping maka ini adalah metode yang bagus untuk menentukan ketersediaannya. Jika diperlukan untuk memberikan misalnya layanan web maka Anda harus melakukan beberapa bentuk tes untuk melihat apakah itu berfungsi sama untuk layanan file dll.


5
2017-09-19 10:10





ping memiliki 2 kelemahan:

  • ping mengirim icmp, yang bisa disaring oleh firewall
  • port tcp atau udp yang digunakan aplikasi Anda mungkin sibuk atau tidak terbuka - ping tidak memeriksa itu

solusi yang lebih baik adalah memeriksa port udp / tcp Anda secara langsung, untuk melihat apakah layanan masih tersedia ... :-)


3
2017-09-19 19:20





Ada alat khusus untuk pengujian dan pemantauan seperti Nagios / Icinga.
Dengan alat ini Anda dapat (tentu saja) melakukan pemeriksaan dengan berbagai ping-test tetapi juga melakukan pemeriksaan pada layanan Anda.

Semua pemeriksaan dapat menggunakan nilai yang dikembalikan untuk mengklasifikasikan hasil sebagai "baik", "peringatan" dan "kritis" dan dapat ditulis di hampir setiap bahasa pemrograman.

Tentu saja tidak mudah diatur (seperti titik dan klik), tetapi dapat disesuaikan, dapat diandalkan, dan dapat diperluas. Berjalan dengan baik di berbagai distribusi Linux dan Unix.


3
2017-09-19 18:24





Uji layanan yang Anda cari, cukup ping server bukan berarti layanan tersebut berfungsi.

Sebagai contoh:

Bayangkan webserver dengan selusin situs web, maka saya perlu tahu apakah situs webnya UP, saya membuat sendiri skrip kecil di php dan menjalankannya setiap 10 menit.

Skrip melakukan tindak lanjut ->

<?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





Menggunakan ping untuk menentukan apakah server tersedia seperti dokter ER memeriksa apakah pasien bernafas. Ya, ini adalah tempat yang baik untuk memulai, tetapi mungkin ada masalah lain.


2
2017-09-19 18:39





Hanya dua sen saya: Kami memiliki aplikasi warisan yang menggunakan metode ini, dan harus melayani karena ping itu tidak cukup untuk menentukan ketersediaan layanan.

Ping hanya menunjukkan bahwa server mampu mendengarkan, tetapi dalam kasus kami layanan tidak dapat dimulai tanpa campur tangan manusia.

Akibatnya unit, yang secara naif mengasumsikan server itu tersedia, sedang berusaha untuk menghubungkan dan batas waktu. Alih-alih menampilkan pesan "Server is Unavailable".

-

Aplikasi kami saat ini, yang berkomunikasi melalui XMLHTTPRequests ke server web, mengirim pesan yang telah terbentuk yang akan ditanggapi oleh server dengan kode status. Kode status dihitung oleh server melakukan sejumlah pemeriksaan untuk memastikan bahwa berbagai subsistem sedang online (DB, direktori yang diperlukan dapat ditulis, dll.)


0
2017-08-24 23:59





Jika dalam keadaan normal server Anda merespons ping, akan berguna untuk melakukan ping pada interval satu menit untuk memeriksa apakah responsnya. Ini tentu saja hanya memberitahu Anda bahwa ada server di alamat IP itu dan bahwa ada jalur jaringan dari sumber ping ke tujuan. Menetapkan ambang batas waktu respons dapat memungkinkan Anda untuk juga memantau keadaan jaringan. Jika Anda melakukan ping server di Internet mungkin ada sedikit yang dapat Anda lakukan untuk memperbaiki jaringan tetapi jika seorang pelanggan menelepon untuk mengeluh, Anda sudah akan menyadari masalahnya. Ping google.com juga berguna. Jika Anda dan google sama-sama down, sesuatu sedang terjadi.

Seperti yang telah disebutkan orang lain, penting untuk memantau bahwa layanan yang Anda berikan merespons dan kinerjanya baik. Yaitu. Anda mungkin ingin memeriksa mengapa usia web yang biasanya merespons dalam hitungan detik sekarang merespons saya 10 detik.

Jadi mengetahui bahwa layanan tidak merespons dan ping gagal memberi Anda lebih banyak informasi daripada hanya satu pendekatan. Juga jika Anda memantau prosesnya juga, mengetahui bahwa ping merespons, layanan tidak merespons dan server web tidak memiliki jumlah proses yang benar memberitahu Anda di mana harus mencari terlebih dahulu.

Anda dapat menjadi gila dengan pemantauan, jadi cukup pantau untuk memberi tahu Anda ketika sesuatu yang buruk telah terjadi atau menjadi berbahaya. Yaitu. terlalu banyak swapping,> 90% penggunaan disk, disk tinggi io, 100% CPU untuk waktu yang lama dan ingat bahwa pemantauan hanyalah serangan denial of service yang dilakukan sangat lambat.


0
2017-10-18 02:57