Apakah Ping cara yang andal untuk memeriksa apakah server tersedia?

96

Dalam aplikasi saya, saya melakukan ping ke 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 berasumsi firewall bisa menyaring lalu lintas icmp ... Apakah ada kelemahan lain? Apakah ada metode yang lebih andal?

Peter Kelly
sumber

Jawaban:

139

Cara terbaik untuk mengetahui apakah ada layanan jarak jauh yang diberikan adalah hidup dengan memintanya untuk melayani permintaan dengan cara yang seharusnya - pada kenyataannya itu satu-satunya cara untuk benar-benar mengetahui sesuatu berfungsi dengan benar.

Sebagai contoh, saya selalu mendapatkan penyeimbang beban untuk mendapatkan respons 'kepala' yang sebenarnya dari server web kami, Anda dapat melakukan hal yang sama untuk pemilihan kecil pada kotak DB jika Anda mau, atau apa pun yang dilayani server sebenarnya. Sebagai tip, Anda dapat membuat 'online.txt' (atau nama apa pun yang ingin Anda berikan) di server web Anda, mintalah LBs Anda mencoba untuk mendapatkan file itu dan jika gagal, ia menghapus server dari VIP, ini adalah cara yang bagus untuk secara manual mengeluarkan server individual dari VIP Anda hanya dengan mengganti nama satu file.

Ping hanya menguji kemampuan untuk merespons ping, jadi itulah OS dasar, bagian dari tumpukan IP, dan tautan fisik - tapi itu saja, segala sesuatu yang lain bisa turun dan Anda tidak akan tahu.

Saya tahu ini disebutkan di bawah, tetapi berulang berulang.

Permintaan Echo ICMP (alias "Ping") (alias ICMP Tipe 8) dibangun di atas spesifikasi tumpukan IP, ya, tetapi tidak harus diterapkan atau digunakan. Faktanya, ada sejumlah besar penyedia internet yang menolak untuk meneruskannya dan secara diam-diam menolak permintaan itu, karena itu adalah bentuk serangan jaringan (disebut pingflood).

Seperti disebutkan di atas, ini ditangani oleh OS (khususnya di tingkat tumpukan jaringan) dan tergantung konfigurasi OS untuk merespons atau tidak. Jika ini dimatikan (tindakan pencegahan keamanan?), Anda tidak dapat melakukan apa-apa tentang menerima balasan ping dari ujung yang lain. Inilah sebabnya mengapa itu tidak dapat diandalkan.

Chopper3
sumber
34
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
5
Kami sebenarnya membangun "test" RESTful API ke dalam aplikasi kami hanya untuk ini. Jadi kita tahu bahwa jika sebuah aplikasi merespons blah / whatever_app / pulsa terserah, melayani permintaan, dan memiliki semua alat yang diperlukan (DB, dependancies dll)
tsykoduk
5
Untuk menambahkan ke MadHatter, sering kali merupakan ide bagus untuk melakukan ping dan permintaan. Dengan cara ini Anda dapat langsung mengetahui apakah Anda sedang berhadapan dengan konektivitas jaringan atau pemadaman layanan ... Yang satu cenderung membuat hal-hal yang sama sekali berbeda dari yang lain.
user606723
Ping bahkan bukan tes yang dapat diandalkan bahwa server itu sendiri dapat merespons ping - jika tidak maka yang Anda tahu adalah bahwa ada sesuatu di antara Anda dan yang sedang menyaring lalu lintas ICMP
Rob Moir
4
Dengan asumsi mesin merespons ping dalam keadaan normal, Anda dapat menggunakan ping sebagai semacam filter bloom: Jika ping gagal, layanan pasti turun (Anda memiliki masalah jaringan, karena kami telah menetapkan bahwa ping biasanya berfungsi). Namun, jika ping berhasil, layanan masih bisa turun seperti yang dijelaskan dalam jawaban ini
3Doubloons
10

Namun, sebagian besar waktu:

  • beberapa server memblokir permintaan ping

  • hanya karena server merespons tidak secara otomatis berarti situs web (atau layanan apa pun yang Anda harapkan akan digunakan) berfungsi , Anda juga harus memeriksa apakah responsnya cocok dengan konten yang diharapkan.

wildpeaks
sumber
5

Memang benar bahwa dalam banyak kesempatan lalu lintas ICMP disaring sehingga bisa tidak dapat diandalkan ...

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

yaitu telnet 127.0.0.1 8080

sdmythos_gr
sumber
5

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

user9517
sumber
3

ping memiliki 2 kelemahan:

  • ping mengirim icmp, yang bisa difilter oleh firewall
  • port tcp atau udp yang digunakan aplikasi Anda bisa sibuk atau tidak terbuka - ping tidak memeriksanya

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

JMW
sumber
3

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

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

Tentu saja tidak mudah untuk setup (seperti titik dan klik), tetapi dapat disesuaikan, andal, dan dapat dikembangkan. Berjalan dengan baik di berbagai distribusi Linux dan Unix.

ppuschmann
sumber
2

Menguji layanan yang Anda cari, hanya ping server tidak berarti layanan berfungsi.

Sebagai contoh:

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

Script lakukan ikuti ->

<?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);
?>
deepcell
sumber
2

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

Adam
sumber
1

Kami biasa pingmelakukan precheck, bahwa host dihidupkan dan dapat dijangkau, sebelum meluncurkan layanan systemd kami yang mencoba koneksi ssh ke sana. Ini menghemat waktu debugging, karena systemctl startperintah akan segera gagal, bukannya gagal diam-diam dan tersesat di hutan jurnalctl.

Perhatikan bahwa ping tidak "dapat diandalkan" dalam arti yang sama dengan TCP. Jika Anda memiliki koneksi yang buruk (atau tumpukan jaringan jelek, terima kasih Intel mpss ) dan paket-paket sedang dijatuhkan, satu paket ping mungkin gagal. Di sisi lain, koneksi TCP dapat diandalkan terhadap paket yang jatuh. Jadi, ironisnya, koneksi ssh mungkin berfungsi segera setelah satu ping kegagalan . Jadi jika Anda menggunakan ping untuk melakukan pemeriksaan kewarasan, pastikan untuk mengizinkan beberapa kegagalan.

Mark Lakata
sumber
0

Hanya dua sen saya: Kami memiliki aplikasi lawas yang menggunakan metode ini, dan harus menservisnya karena ping 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 berasumsi server tersedia, berusaha melakukan koneksi dan batas waktu. Alih-alih menampilkan pesan "Server tidak tersedia" kami.

-

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

Robbie
sumber
0

Jika dalam keadaan normal server Anda merespons ping, penting untuk melakukan ping pada interval satu menit untuk memeriksa apakah responsnya. Ini tentu saja hanya memberi tahu Anda bahwa ada server di alamat IP itu dan bahwa ada jalur jaringan dari sumber ping ke tujuan. Menetapkan ambang batas untuk 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. Selain ping google.com juga bermanfaat. Jika Anda dan Google sama-sama down, sesuatu sedang terjadi.

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

Jadi mengetahui bahwa suatu layanan tidak merespons dan ping gagal memberi Anda lebih banyak informasi daripada hanya satu pendekatan. Juga jika Anda memantau proses juga, mengetahui bahwa ping merespons, layanan tidak merespons dan server web tidak memiliki jumlah proses yang benar memberi tahu Anda ke mana harus mencari pertama.

Anda bisa menjadi gila dengan pemantauan sehingga cukup memantau untuk memberi tahu Anda ketika sesuatu yang buruk telah terjadi atau semakin berbahaya. Yaitu terlalu banyak bertukar, penggunaan disk> 90%, disk io tinggi, CPU 100% untuk waktu yang lama dan ingat bahwa pemantauan hanyalah penolakan serangan layanan yang dilakukan dengan sangat lambat.

Stuart Woodward
sumber
0

Ping (Packet Internet Groper) memberi tahu Anda apakah sistem Anda berkomunikasi dengan sistem yang dengannya Anda ingin membuat koneksi melalui jaringan. Bahkan ping, bukan berarti layanan misalnya layanan RemoteRegistry berjalan.

Namun, untuk memperbaiki masalah apa pun ping diperlukan. Anda dapat memperbaiki masalah apa pun dari jarak jauh. Oleh karena itu, ping memiliki kepentingannya sendiri.

sairam
sumber
-3

Cara terbaik yang saya gunakan dalam skrip saya adalah

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

di tempat alternatif rsh seperti remsh dapat digunakan. Ini memastikan bahwa sistem jarak jauh Anda telah boot sepenuhnya dan Anda dapat menjalankan perintah di sana. Ping sederhana tidak cukup seperti saat boot ketika layanan jaringan dimulai, sistem mulai merespons ping.

Penjualan Amol
sumber
3
rsh? Benarkah? Kenapa tidak digunakan sshsaja?
Joachim Sauer
5
rshvs sshsamping, bagaimana bisa mengeksekusi date(dengan asumsi Anda, untuk mulai dengan) mengatakan apa-apa tentang apakah server web, server SMTP, server DNS, server database lokal atau yang lainnya berjalan dan dapat melayani permintaan? Lebih baik meminta layanan spesifik yang ingin Anda verifikasi ketersediaannya (yang mungkin merupakan shell jarak jauh, tetapi tentu saja tidak harus).
CVn
-3

Ketika saya reboot server windows saya membuka kotak prompt perintah dan masuk

ping <box> -t

Pertama, ini akan menyarankan bahwa itu tersedia-itulah kotak turun. Maka Anda akan mendapatkan banyak "permintaan time out." Ketika Anda mulai mendapatkan balasan, kotaknya sudah habis.

Dave
sumber
7
Itu tidak berarti bahwa itu tersedia untuk melakukan pekerjaan nyata, hanya saja itu menanggapi ping.
user9517
Mungkin. Selalu saya bisa masuk ke server dan itu saja yang saya butuhkan.
Dave
Sangat mungkin bagi server untuk merespons ping tetapi belum (belum, atau bahkan tidak sama sekali) memulai fungsi jaringan tingkat yang lebih tinggi. Satu-satunya tes ping adalah ping. Dan mungkin nama resolusi jika Anda melakukan ping dengan nama daripada IP
Rob Moir
Saya memiliki banyak kesempatan di mana server merespons ping tetapi gagal mem-server jenis permintaan lainnya, termasuk masuk. Ping dapat menjadi sarana yang sangat kasar untuk mengetahui kapan server sudah mulai muncul kembali tetapi itu saja. Tentu saja dengan asumsi server bahkan merespons ping.
John Gardeniers