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


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

Bu, kullanılabilirliği belirlerken güvenilir bir yoldur? Bir güvenlik duvarının icmp trafiğini filtreleyebileceğini farz ediyorum ... Başka sakınca var mı? Daha güvenilir bir yöntem var mı?


89
2017-09-19 10:00


Menşei




Cevaplar:


Verilen herhangi bir uzaktan hizmetin canlı olup olmadığını anlamanın en iyi yolu, bir isteğin sunulduğu şekilde hizmet etmesini talep etmektir - aslında bir şeyin doğru şekilde çalıştığını bilmenin tek yolu budur.

Örnek olarak, yük dengeleyicilerimi, web sunucularımızdan gerçek bir 'kafa' yanıtı almak için her zaman alabiliyordum, ister istemez bir DB kutusunda küçük bir seçim yapmak için, ya da gerçek sunucunuz hizmetinizdeyse, aynısını yapabilirsiniz. Bir ipucu olarak, web sunucularınızda bir 'online.txt' (ya da vermek istediğiniz herhangi bir ad) oluşturabilir, LB'leriniz bu dosyayı almayı dener ve başarısız olursa sunucuyu VIP'den kaldırır. Tek bir dosyayı yeniden adlandırarak, tek tek sunucuları VIP'lerden el ile almanın iyi bir yolu.

Ping sadece ping'lere yanıt verebilme yeteneğini test eder, yani bu temel işletim sistemi, IP yığınının parçaları ve fiziksel bağlantılar - ama hepsi bu, her şey düşebilir ve bilmiyor olabilirsiniz.

Bunun aşağıda belirtildiğini biliyorum, ama tekrar tekrar tekrar yanıyor.

ICMP Yankı İstekleri (aka "Ping") (diğer bir deyişle ICMP Tip 8), IP yığını spesifikasyonları üzerine inşa edilmiştir, evet, ancak uygulanmaya ya da kullanılmasına gerek yoktur. Aslına bakılırsa, bunları yönlendirmeyi reddeden ve bu istekleri sessizce bırakmayı reddeden çok sayıda internet sağlayıcısı var, çünkü bunlar bir ağ saldırısıdır (pingflood).

Yukarıda belirtildiği gibi, bu işletim sistemi (özellikle ağ yığın seviyesinde) tarafından ele alınır ve bu nedenle buna cevap vermek için işletim sistemi konfigürasyonuna kalmıştır. Bu kapatılırsa (güvenlik önlemi?), Diğer uçtan ping cevapları almakla ilgili hiçbir şey yapamazsınız. Bu yüzden güvenilir değil.


137
2017-09-19 10:10



Adam ne dedi! Her zaman, bir sunucu şu anda hizmet sunuluyorsa bunu söylemenin en iyi yolunun müşterilere tavsiye ediyorum. istek servisi X. - MadHatter
Uygulamalarımızda aslında "test" RESTful API'si oluşturuyoruz sadece bunun için. Bu nedenle, bir uygulamanın blah / whatever_app / nabzına cevap vermesi durumunda, hizmet taleplerinin karşılandığını ve ihtiyaç duyduğu tüm araçlara (DB, dependancies vb.) Sahip olduğunu biliyoruz. - tsykoduk
MadHatter'a eklemek için, ping ve istek yapmak genellikle iyi bir fikirdir. Bu şekilde, ağ bağlantısı veya servis kesintisi ile uğraştığınızı hemen öğrenebilirsiniz ... 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 - eğer bilmiyorsanız, aradığınız her şeyin ICMP trafiğini filtrelediğini biliyorsunuzdur. - Rob Moir
Makinenin normal koşullarda ping'e yanıt verdiğini varsayarak, ping'i bir çeşit çiçek filtresi olarak kullanabilirsiniz: Eğer ping başarısız olursa, servis kesinlikle kesilir (genellikle ping çalışmalarını kurduğumuz için bir ağ sorununuz vardır). Ancak ping başarılı olursa, servis bu cevapta açıklandığı gibi devam edebilir. - 3Doubloons


Çoğu zaman, evet, ancak:

  • bazı sunucular ping isteklerini engeller

  • sadece sunucu yanıt veriyorsa otomatik olarak web sitesi anlamına gelmez (veya kullanmayı umduğunuz hizmet ne olursa olsun) çalışıyorAyrıca, yanıtın beklenen içerikle eşleşip eşleşmediğini de kontrol etmelisiniz.


10
2017-09-19 10:08





Birçok durumda ICMP trafiğinin filtreleneceği ve güvenilmez olabileceği doğrudur.

Daha iyi bir yol belki de ilgilendiğiniz servis limanında sunucuyu telnet etmek olabilir.

yani telnet 127.0.0.1 8080


5
2017-09-19 10:07





Sunucu sadece ping'lere yanıt vermek için gerekliyse, o zaman bu kullanılabilirliği belirleyen iyi bir yöntemdir. Örneğin bir web servisi sağlamak için gerekliyse, o zaman bunun dosya yönetimi vb. İçin benzer şekilde çalışıp çalışmadığını görmek için bir tür test yapmalısınız.


5
2017-09-19 10:10





ping'in 2 dezavantajı var:

  • ping, güvenlik duvarı tarafından filtrelenebilen icmp gönderir
  • Uygulamanızın kullandığı tcp veya udp bağlantı noktası meşgul veya açık olmayabilir - ping

Daha iyi bir çözüm, hizmetin hala kullanılabilir olup olmadığını görmek için doğrudan udp / tcp portunuzu kontrol etmektir ... :-)


3
2017-09-19 19:20





Test etmek ve izlemek için özel araçlar var. Nagios / Icinga.
Bu araçlarla (tabiki) çeşitli ping-testi ile kontroller yapabilir, aynı zamanda servislerinizi kontrol edebilirsiniz.

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

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


3
2017-09-19 18:24





Aradığınız hizmetleri sınayın, sadece bir sunucuya ping işlemi hizmetlerin çalıştığı anlamına gelmez.

Örneğin:

Düzine web siteleri ile bir web sunucusu düşünün, sonra web sitelerinin UP olup olmadığını bilmem gerekiyor, kendimi php'de küçük bir senaryo yaptım ve her 10 dakikada bir çalıştırdım.

Komut takip yapmak ->

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





Bir sunucunun mevcut olup olmadığını belirlemek için ping kullanmak, bir hastanın nefes alıp almadığını kontrol etmek için bir ER doktoru gibidir. Evet, başlamak için iyi bir yer ama başka sorunlar olabilir.


2
2017-09-19 18:39





Sadece iki sentim: Bu yöntemi kullanan eski bir uygulamamız var ve ping olduğu için hizmet etmek zorunda kaldık. değil Servis kullanılabilirliğini belirlemek için yeterlidir.

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

Sunucunun hazır olduğunu saf olarak kabul eden bir sonuç birimi olarak, bağlantı kurma ve zaman aşımı girişimleri vardı. "Sunucu Kullanılamıyor" mesajını görüntülemek yerine.

-

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


0
2017-08-24 23:59





Normal şartlar altında sunucunuz ping'e yanıt veriyorsa, yanıt verip vermediğini kontrol etmek için bir dakika aralıklarla ping yapmak yararlı olur. Bu elbette size sadece 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 izlemenize izin verebilir. İnternette bir sunucuya ping yapıyorsanız, ağı düzeltmek için yapabileceğiniz çok az şey olabilir, ancak bir müşteri şikayette bulunursa, zaten sorunun farkında olursunuz. Ek olarak google.com'a ping yapmak da yararlıdır. Siz ve Google’ın ikisi de aşağıdaysa, bir şeyler oluyor.

Başkalarının da belirttiği gibi, sağladığınız hizmetin yanıt verdiğini ve performansının iyi olduğunu izlemek önemlidir. Yani Bir saniyede cevap veren bir web çağının neden şimdi 10 saniyede olduğunu yanıtlamak isteyebilirsiniz.

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

İzlemede delirebilirsiniz, böylece kötü bir şey olduğunda veya tehlikeli hale geldiğinde size söyleyecek kadar izleyin. Yani çok fazla takas,>% 90 disk kullanımı, yüksek disk io, uzun süre% 100 CPU ve izleme sadece çok yavaş yürütülen bir hizmet saldırısı inkar olduğunu hatırlıyorum.


0
2017-10-18 02:57





Kullanırız ping Bir ana kontrol yapmak için, ana makineye açık ve ulaşılabilir, sisteme ssh bağlantısı başlatan sistem hizmetimizi başlatmadan önce. Bu, bazı zaman hata ayıklamalarını kaydeder. systemctl start Komut, sessizce başarısızlık yerine derhal başarısız olur ve dergi ormanında kaybolur.

Ping'in TCP ile aynı anlamda "güvenilir" olmadığını unutmayın. Kötü bir bağlantınız varsa (veya berbat ağ yığını, teşekkür ederim Intel mpss) ve paketler düşüyor, tek bir paket ping başarısız olabilir. Öte yandan, bir TCP bağlantısı, düşürülmüş paketlere karşı güvenilirdir. Yani, ironik olarak, bir ssh bağlantısı  hemen sonra bekar ping  başarısızlık. Yani bir akıl kontrolünü yapmak için ping kullanırsanız, bazı hatalara izin verdiğinizden emin olun.


0
2017-09-19 11:55