Ping, bir sunucunun mevcut olup olmadığını kontrol etmenin güvenilir bir yolu mu?


96

Uygulamamda bir sunucuya ping atıyorum ve yanıt bekliyorum. Sunucunun kullanılabilir ve duyarlı olup olmadığını belirlemek için bunu kullanıyorum.

Bu kullanılabilirliği belirlemek için güvenilir bir yol mu? Güvenlik duvarının icmp trafiğini filtreleyebileceğini farz ediyorum ... Başka sakıncalar var mı? Daha güvenilir bir yöntem var mı?

Yanıtlar:


139

Herhangi bir uzaktan hizmetin hayatta olup olmadığını anlamanın en iyi yolu, bir isteğin yapılmasını istediği şekilde hizmet etmesini istemek - aslında bir şeyin doğru çalıştığını bilmenin tek yolu budur.

Örnek olarak, yük dengeleyicilerimi web sunucularımızdan gerçek bir 'head' yanıtı almaları için her zaman alıyorum, aynı ya da gerçek sunucunuz ne olursa olsun, bir DB kutusunda küçük bir seçim yapmak için aynı şeyi yapabilirsiniz. Bir ipucu olarak, web sunucularınızda bir 'online.txt' (veya vermek istediğiniz adı) oluşturabilirsiniz, LB'lerin bu dosyayı almaya çalışmasını sağlayın ve başarısız olursa o zaman sunucuyu VIP'den kaldırır. tek bir dosyayı yeniden adlandırarak tek tek sunucuları VIP’lerinizden el ile almanın iyi bir yolu.

Ping, yalnızca ping'lere yanıt verme yeteneği için testler, bu nedenle temel işletim sistemi, IP yığınının parçaları ve fiziksel bağlantılar var - ama hepsi bu kadar.

Bunun aşağıda belirtildiğini biliyorum, fakat tekrar tekrar tekrar ediyor.

ICMP Yankı İstekleri (aka "Pings") (aka ICMP Tip 8), IP yığın belirtimi üzerine inşa edilmiştir, evet, ancak bunların uygulanması ya da kullanılması zorunlu değildir. Nitekim, bir ağ saldırısı biçimi (pingflood denir) olduğu için, bunları iletmeyi reddeden ve bu istekleri sessizce bırakan çok sayıda internet sağlayıcı vardır.

Yukarıda bahsedildiği gibi, bu işletim sistemi (özel olarak ağ yığını seviyesinde) tarafından gerçekleştirilir ve bu yüzden bunlara cevap vermek ya da vermemek OS işletim sistemine bağlıdır. Bu kapalıysa (bir güvenlik önlemi?), Diğer taraftan ping yanıtları almak için hiçbir şey yapamazsınız. Bu yüzden güvenilir değil.


34
Adam ne dedi! Müşterilere her zaman bir sunucunun X hizmeti sunup sunmadığını söylemenin en iyi yolunun X servisini istemek olduğunu bildiririm .
MadHatter 19:11

5
Aslında sadece bunun için uygulamalarımıza bir "test" RESTful API'si kurduk . Bu nedenle, bir uygulamanın fiil / whatever_app /
pulse'a

5
MadHatter'a eklemek için, genellikle bir ping ve bir istek yapmak iyi bir fikirdir. Bu yolla, ağ bağlantısıyla mı yoksa servis kesintisiyle mi uğraştığınızı hemen anlayabilirsiniz ... Her ikisi de diğerinden tamamen farklı şeyler yaratma eğilimindedir.
user606723

Ping, sunucunun ping'e yanıt verebileceği güvenilir bir test bile değildir - bildiğiniz tek şey bu değilse, sizinle aranızdaki bir şeyin ICMP trafiğini filtrelediğidir
Rob Moir

4
Makinenin normal koşullarda ping'e yanıt verdiğini varsayarsak, ping'i bir tür çiçek filtresi olarak kullanabilirsiniz: Eğer ping başarısız olursa, hizmet kesinlikle kesilir (ping'in genellikle çalıştığını belirlediğimiz için bir ağ probleminiz vardır). Bununla birlikte, eğer ping başarılı olursa, servis hala bu cevapta açıklandığı gibi
düşebilir

10

Ancak, çoğu zaman, evet:

  • bazı sunucular ping isteklerini engeller

  • Sunucunun otomatik olarak yanıt vermesi, web sitesinin (veya kullanmayı umduğunuz hizmetin) çalışacağı anlamına gelmediği için, yanıtın beklenen içerikle uyuşup uyuşmadığını da kontrol etmelisiniz.


5

Pek çok durumda, ICMP trafiğinin filtrelenmesi ve güvenilmez olabilmesi için doğru olduğu ...

Belki de daha iyi bir yol, sunucuyu, ilgilendiğiniz servis portundan telnetlemek olabilir.

telnet 127.0.0.1 8080


5

Sunucunun yalnızca ping'lere yanıt vermesi gerekiyorsa, bu durum kullanılabilirliğini belirlemek için iyi bir yöntemdir. Örneğin bir web servisi sağlamanız gerekiyorsa, bunun dosya servisleri vb. İçin benzer şekilde çalışıp çalışmadığını görmek için bir test yapmalısınız.


3

ping'in 2 dezavantajı vardır:

  • ping, güvenlik duvarı tarafından filtrelenebilen icmp gönderir
  • uygulamanızın kullandığı tcp veya udp bağlantı noktası meşgul olabilir veya açılmıyor olabilir - ping bunu kontrol etmiyor

Daha iyi bir çözüm, udp / tcp portunuzu doğrudan kontrol etmek, hizmetin hala uygun olup olmadığını görmek ...


3

Nagios / Icinga gibi test ve izleme için özel araçlar vardır .
Bu araçlarla (tabii ki) çeşitli ping testleriyle kontroller yapabilir, ancak hizmetlerinizi de kontrol edebilirsiniz.

Tüm kontroller, döndürülen değeri, sonucu "iyi", "uyarı" ve "kritik" olarak sınıflandırmak için kullanabilir ve hemen hemen her programlama dilinde yazılabilir.

Tabii ki kurulumu kolay (göster ve tıkla), ancak özelleştirilebilir, güvenilir ve genişletilebilir. Çeşitli Linux ve Unix dağıtımlarında iyi çalışır.


2

Aradığınız hizmetleri test edin, sadece bir sunucuya ping atmak, servislerin çalıştığı anlamına gelmez.

Örneğin:

Bir düzine web sitesine sahip bir web sunucusu hayal edin, o zaman web sitelerinin YUKARI olup olmadığını bilmeliyim, kendime küçük bir script hazırladım ve her 10 dakikada bir çalıştırdım.

Komut aşağıdakileri yapar ->

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

Bir sunucunun mevcut olup olmadığını belirlemek için ping kullanmak, hastanın nefes alıp almadığını görmek için kontrol eden bir ER doktoruna benzer. Evet, başlamak için iyi bir yer, ancak başka sorunlar da olabilir.


1

Biz kullanmak pingkonak gücü açık olduğundan ve ulaşılabilir, buna bir ssh bağlantısı girişimleri bizim systemd hizmetini başlatmadan önce, bir precheck yapmak. Bu systemctl start, derhal sessizce başarısız olmak ve dergi cetvelinde kaybolmak yerine derhal başarısız olacağı için hata ayıklamada zaman kazandırır .

Ping'in TCP ile aynı anlamda "güvenilir" olmadığını unutmayın. Kötü bir bağlantınız varsa (veya crappy ağ yığını, teşekkür ederim Intel mpss ) ve paketler kesiliyorsa , tek bir paket pingi başarısız olabilir. Öte yandan, bir TCP bağlantısı düşmüş paketlere karşı güvenilirdir. Bu nedenle, ironik bir şekilde, ssh bağlantısı tek bir başarısızlıktan hemen sonra çalışabilir . Bu nedenle, bir akıl sağlığı kontrolü için ping kullanıyorsanız, bazı arızalara izin verdiğinizden emin olun.ping


0

Sadece iki kuruş: Bu yöntemi kullanan eski bir uygulamamız var ve hizmet vermek zorundaydık, çünkü ping hizmetin kullanılabilirliğini belirlemek için yeterli değildi .

Ping sadece sunucunun dinleyebildiğini gösterir, ancak bizim durumumuzda servis insan müdahalesi olmadan başlayamadı.

Sonuç olarak, sunucunun mevcut olduğunu kabul eden birimler bağlanmaya ve zaman aşımına uğramaya çalışıyordu. "Sunucumuz Kullanılamıyor" mesajımızı görüntülemek yerine.

-

XMLHTTPRequests aracılığıyla bir web sunucusuyla iletişim kuran mevcut uygulamamız, sunucunun bir durum koduyla yanıt vereceği oluşturulmuş bir mesaj gönderir. Durum kodu, çeşitli alt sistemlerin çevrimiçi olduğundan emin olmak için birkaç kontrol yapan sunucu tarafından hesaplanır (DB, gerekli dizinler yazılabilir vb.)


0

Normal koşullar altında sunucunuz ping'e yanıt veriyorsa, yanıt verip vermediğini kontrol etmek için bir dakikalık aralıklarla ping işlemi yapmak yararlı olur. Elbette bu, yalnızca bu IP adresinde bir sunucu olduğunu ve ping kaynağından hedefe giden bir ağ yolu olduğunu söyler. Yanıt süresi için bir eşik ayarlamak, ağın durumunu da izlemenizi sağlar. İnternette bir sunucuya ping atıyorsanız, ağı düzeltmek için yapabileceğiniz çok az şey olabilir, ancak bir müşteri şikayet etmek için arama yaparsa sorunun farkındasınız demektir. Ayrıca google.com'a ping yapmak da faydalıdır. Siz ve google ikisi de kapalıysa, bir şeyler oluyor.

Diğerlerinin de belirttiği gibi, sağladığınız hizmetin yanıt verdiğini ve performansının iyi olduğunu izlemek önemlidir. Başka bir deyişle, genellikle bir saniyede yanıt veren web yaşının neden 10 saniye olduğumu yanıtladığını kontrol etmek isteyebilirsiniz.

Yani bir servisin cevap vermediğini ve ping'in başarısız olduğunu bilmek size tek bir yaklaşımdan çok daha fazla bilgi verir. Ayrıca, ping'in yanıt verdiğini bilerek, işlemleri de izlerseniz, hizmet yanıt vermez ve web sunucusunda doğru sayıda işlem bulunmadığını size ilk nereye bakacağınızı söyler.

İzlemeyle çılgına dönebilir, böylece sadece kötü bir şey olduğunda veya tehlikeli hale geldiğinde size söyleyebilecek kadar izleyin. Çok fazla takas,>% 90 disk kullanımı, yüksek disk io, uzun süre% 100 CPU kullanımı ve izlemenin çok yavaş gerçekleştirilen bir servis reddi saldırısı olduğunu unutmayın.


0

Ping (Paket İnternet Groper), sisteminizin ağ üzerinden bağlantı kurmak istediğiniz sistemle iletişim kurup kurmadığını bilmenizi sağlar. Hatta ping, örneğin RemoteRegistry servisinin çalıştığı servis anlamına gelmez.

Ancak, herhangi bir sorunu düzeltmek için ping gereklidir. Herhangi bir sorunu uzaktan düzeltebilirsiniz. Bu nedenle, ping'in kendi önemi vardır.


-3

Komut dosyalarımda kullanmamın en iyi yolu

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

rsh yerine remsh gibi alternatifler kullanılabilir. Bu, uzaktaki sisteminizin tamamen önyüklenmesini sağlar ve komutları çalıştırabilirsiniz. Ağ hizmetleri başlatıldığında basit ping, önyükleme sırasında yeterli değildir, sistem ping'e yanıt vermeye başlar.


3
rsh? Gerçekten mi? Neden sshonun yerine kullanmıyorsun ?
Joachim Sauer

5
rshBir sshyana, datebir web sunucusunun, SMTP sunucusunun, DNS sunucusunun, yerel veritabanı sunucusunun ya da çalışan ve isteklerinin karşılanıp karşılanmadığı hakkında nasıl bir şey söyleyebildiğini ( nasıl bir başlangıç yaptığınız varsayılır)? Kullanılabilirliğini doğrulamak istediğiniz belirli bir hizmeti istemek daha iyi (ki bu uzak bir kabuk olabilir, ancak kesin olması gerekmiyor).
19:11

-3

Windows sunucusunu yeniden başlattığımda bir komut istemi kutusu açıp

ping <box> -t

Öncelikle mevcut olduğunu gösterir - kutu aşağı gidiyor. Sonra bir çok "istek zaman aşımı" elde edersiniz. Cevap almaya başladığınızda kutu doldu.


7
Bu, gerçek iş yapmanın mümkün olduğu anlamına gelmez, sadece ping'e yanıt verdiği anlamına gelir.
user9517 19:11

Olabilir. Her zaman sunucuya giriş yapabileceğimi ve ihtiyacım olan tek şey bu.
Dave

Bir sunucunun ping'e yanıt vermesi mükemmel (ancak hatta hatta) herhangi bir üst seviye ağ işlevi başlatmamış olması mümkündür. Ping testlerinin tek yolu ping. Ve IP'den ziyade isimle ping yaparsanız belki isim çözümlemesi
Rob Moir

Bir sunucunun ping'lere yanıt verdiği, ancak oturum açma da dahil olmak üzere diğer herhangi bir isteği yerine getiremediği birçok kez bulundum. Ping, sunucunun ne zaman geri gelmeye başladığını söylemenin çok kaba bir aracı olabilir, ama hepsi bu. Tabi ki sunucunun ping'lere bile cevap verdiğini varsayar.
John Gardeniers
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.