Ping เป็นวิธีที่เชื่อถือได้ในการตรวจสอบว่าเซิร์ฟเวอร์พร้อมใช้งานหรือไม่


96

ในแอปพลิเคชันของฉันฉันกำลังกระตุกเซิร์ฟเวอร์และรอการตอบกลับ ฉันใช้สิ่งนี้เพื่อตรวจสอบว่าเซิร์ฟเวอร์พร้อมใช้งานและตอบสนองหรือไม่

นี่เป็นวิธีที่เชื่อถือได้ในการพิจารณาความพร้อมหรือไม่? ฉันคิดว่าไฟร์วอลล์สามารถกรองปริมาณการใช้งาน icmp ได้ ... มีข้อเสียอื่นอีกหรือไม่? มีวิธีการที่เชื่อถือได้มากกว่านี้ไหม?

คำตอบ:


139

วิธีที่ดีที่สุดที่จะบอกได้ว่าบริการระยะไกลที่ให้มานั้นยังมีชีวิตอยู่หรือไม่คือการขอให้บริการตามที่ตั้งใจ - จริง ๆ แล้วเป็นหนทางเดียวที่จะรู้ว่าบางสิ่งทำงานได้อย่างถูกต้อง

ตัวอย่างเช่นฉันได้รับ load balancer ของฉันเสมอเพื่อรับ 'head' การตอบกลับที่แท้จริงจากเว็บเซิร์ฟเวอร์ของเราคุณสามารถทำเช่นเดียวกันกับตัวเลือกขนาดเล็กบนกล่อง DB ถ้าคุณต้องการหรืออะไรก็ตามที่เซิร์ฟเวอร์ของคุณให้บริการ เป็นเคล็ดลับที่คุณสามารถสร้าง 'online.txt' (หรือชื่ออะไรก็ได้ที่คุณต้องการให้) บนเว็บเซิร์ฟเวอร์ของคุณลอง LBs ของคุณลองรับไฟล์นั้นและถ้ามันล้มเหลวมันจะลบเซิร์ฟเวอร์ออกจาก VIP นี่คือ วิธีที่ดีในการดึงแต่ละเซิร์ฟเวอร์ออกจากวีไอพีของคุณด้วยตนเองเพียงแค่เปลี่ยนชื่อไฟล์เดียว

Ping เท่านั้นที่ทดสอบความสามารถในการตอบสนองต่อการ Ping ดังนั้นนั่นคือระบบปฏิบัติการพื้นฐานส่วนต่าง ๆ ของสแต็ค IP และการเชื่อมโยงทางกายภาพ - แต่นั่นคือทุกอย่างทุกอย่างอาจไม่ทำงานและคุณไม่รู้

ฉันรู้ว่าสิ่งนี้ถูกกล่าวถึงด้านล่าง แต่มันซ้ำรอยซ้ำแล้วซ้ำอีก

คำร้องขอ ICMP Echo (aka "Pings") (aka ICMP Type 8) ถูกสร้างขึ้นบนสเปค IP สแต็คใช่ แต่ไม่จำเป็นที่จะต้องติดตั้งหรือใช้งาน ตามความเป็นจริงมีผู้ให้บริการอินเทอร์เน็ตจำนวนมากที่ปฏิเสธที่จะส่งต่อและส่งคำขอเหล่านั้นอย่างเงียบ ๆ เนื่องจากเป็นรูปแบบของการโจมตีเครือข่าย (เรียกว่า pingflood)

ดังกล่าวข้างต้นนี้ได้รับการจัดการโดยระบบปฏิบัติการ (โดยเฉพาะในระดับกองเครือข่าย) และดังนั้นจึงขึ้นอยู่กับการกำหนดค่าระบบปฏิบัติการเพื่อตอบสนองต่อสิ่งเหล่านั้นหรือไม่ หากสิ่งนี้ถูกปิด (ข้อควรระวังเพื่อความปลอดภัยหรือไม่) คุณไม่สามารถทำอะไรเกี่ยวกับการรับคำตอบ ping จากส่วนอื่น ๆ นี่คือเหตุผลที่มันไม่น่าเชื่อถือ


34
สิ่งที่ชายคนนั้นพูด! ฉันมักจะแนะนำให้ลูกค้าว่าวิธีที่ดีที่สุดที่จะบอกว่าเซิร์ฟเวอร์อยู่ในขณะนี้ให้บริการ X คือการร้องขอบริการ X
MadHatter

5
เราจริงสร้าง "ทดสอบ" สงบ API เข้าไปในแอพพลิเคของเราเพียงสำหรับการนี้ ดังนั้นเราจึงรู้ว่าหากแอปตอบสนองต่อ blah / what_app / pulse ขึ้นการร้องขอและมีเครื่องมือทั้งหมดที่ต้องการ (DB การ
พึ่งพา

5
หากต้องการเพิ่มใน MadHatter มันเป็นความคิดที่ดีที่จะทำการ ping และการร้องขอ วิธีนี้คุณสามารถรู้ได้ทันทีว่าคุณกำลังเผชิญกับการเชื่อมต่อเครือข่ายหรือบริการขัดข้อง ... ทั้งคู่มีแนวโน้มที่จะสร้างสิ่งที่แตกต่างไปจากเดิมอย่างสิ้นเชิง
606723

Ping ไม่ได้เป็นการทดสอบที่เชื่อถือได้ว่าเซิร์ฟเวอร์สามารถตอบสนองต่อ ping ได้ - ถ้าไม่อย่างนั้นคุณก็รู้ว่ามีบางอย่างระหว่างคุณกับมันกำลังกรองปริมาณการใช้งาน ICMP
Rob Moir

4
สมมติว่าเครื่องตอบสนองต่อการ ping ภายใต้สถานการณ์ปกติคุณสามารถใช้ ping เป็นตัวกรองแบบบลูมบางชนิด: หาก ping ล้มเหลวบริการจะหยุดทำงานแน่นอน (คุณมีปัญหาเครือข่ายเนื่องจากเราได้สร้าง ping แล้ว) อย่างไรก็ตามหากปิงยอมให้การบริการยังคงลดลงดังที่อธิบายไว้ในคำตอบนี้
3Doubloons

10

เวลาส่วนใหญ่ใช่ แต่:

  • เซิร์ฟเวอร์บางตัวบล็อกคำขอ ping

  • เพียงเพราะเซิร์ฟเวอร์กำลังตอบสนองไม่ได้หมายความว่าเว็บไซต์ (หรือบริการใด ๆ ที่คุณคาดว่าจะใช้) ทำงานโดยอัตโนมัติคุณควรตรวจสอบว่าคำตอบนั้นตรงกับเนื้อหาที่คาดหวังหรือไม่


5

มันเป็นความจริงที่มีการกรองการรับส่งข้อมูล ICMP หลายครั้งดังนั้นจึงไม่น่าเชื่อถือ ...

วิธีที่ดีกว่าอาจจะไปที่เทลเน็ตเซิร์ฟเวอร์ที่พอร์ตบริการที่คุณสนใจ

เช่น telnet 127.0.0.1 8080


5

หากจำเป็นต้องใช้เซิร์ฟเวอร์เพื่อตอบสนองต่อการปิงนี่เป็นวิธีที่ดีในการพิจารณาความพร้อมใช้งานของมัน หากจำเป็นต้องมีการจัดทำตัวอย่างเช่นบริการเว็บคุณควรดำเนินการทดสอบบางรูปแบบเพื่อดูว่าบริการดังกล่าวใช้งานได้เหมือนกันหรือไม่สำหรับบริการไฟล์เป็นต้น


3

ping มี 2 ข้อเสีย:

  • ping ส่ง icmp ซึ่งสามารถกรองได้โดยไฟร์วอลล์
  • พอร์ต tcp หรือ udp ที่แอปพลิเคชันของคุณใช้อาจไม่ว่างหรือไม่เปิด - ping ไม่ได้ตรวจสอบว่า

ทางออกที่ดีกว่าคือการตรวจสอบพอร์ต udp / tcp ของคุณโดยตรงเพื่อดูว่าบริการยังมีอยู่หรือไม่ ... :-)


3

มีเครื่องมือพิเศษสำหรับการทดสอบและการตรวจสอบเหมือนNagios / Icinga
ด้วยเครื่องมือเหล่านี้คุณสามารถ (แน่นอน) ทำการตรวจสอบด้วยการทดสอบ ping ต่างๆ แต่ยังตรวจสอบบริการของคุณอีกด้วย

การตรวจสอบทั้งหมดสามารถใช้ค่าที่ส่งคืนเพื่อจัดประเภทผลลัพธ์เป็น "ดี", "คำเตือน" และ "วิกฤติ" และสามารถเขียนได้ในเกือบทุกภาษาการเขียนโปรแกรม

แน่นอนว่าไม่ใช่เรื่องง่ายในการตั้งค่า (เช่นจุดและคลิก) แต่ปรับแต่งได้น่าเชื่อถือและขยายได้ ทำงานได้ดีในการกระจาย Linux และ Unix ต่างๆ


2

ทดสอบบริการที่คุณกำลังมองหาเพียงแค่ ping เซิร์ฟเวอร์ไม่ได้หมายความว่าบริการใช้งานได้

ตัวอย่างเช่น:

ลองนึกภาพเว็บเซิร์ฟเวอร์กับเว็บไซต์โหลแล้วฉันจำเป็นต้องทราบว่าเว็บไซต์เป็น 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 เพื่อตรวจสอบว่าเซิร์ฟเวอร์มีให้บริการหรือไม่เหมือนการตรวจของแพทย์ ER เพื่อดูว่าผู้ป่วยหายใจหรือไม่ ใช่มันเป็นจุดเริ่มต้นที่ดี แต่อาจมีปัญหาอื่น ๆ


1

เราใช้pingเพื่อทำการตรวจสอบล่วงหน้าว่าโฮสต์เปิดอยู่และสามารถเข้าถึงได้ก่อนที่จะเปิดบริการ systemd ของเราที่พยายามเชื่อมต่อกับ ssh สิ่งนี้ช่วยประหยัดเวลาในการดีบักเนื่องจากsystemctl startคำสั่งจะล้มเหลวทันทีแทนที่จะล้มเหลวอย่างเงียบ ๆ และหายไปใน journalctl jungle

โปรดทราบว่าการ ping นั้น "ไม่น่าเชื่อถือ" ในแง่เดียวกับ TCP หากคุณมีการเชื่อมต่อที่ไม่ดี (หรือสแต็คเครือข่ายเส็งเคร็งขอบคุณmps Intel ) และแพ็คเก็ตจะลดลงแพ็คเก็ตปิงเดียวอาจล้มเหลว ในทางตรงกันข้ามการเชื่อมต่อ TCP มีความน่าเชื่อถือต่อแพ็กเก็ตที่ถูกทิ้ง ดังนั้นกระทบกระเทียบการเชื่อมต่อ SSH อาจจะทำงานทันทีหลังจากที่เดียวล้มเหลวping ดังนั้นหากคุณใช้ ping ทำการตรวจสอบสติให้แน่ใจว่าได้รับความล้มเหลว


0

แค่สองเซ็นต์ของฉัน: เรามีแอปพลิเคชันรุ่นเก่าที่ใช้วิธีนี้และต้องให้บริการเพราะ ping ไม่เพียงพอสำหรับการพิจารณาความพร้อมใช้งานของบริการ

Ping แสดงเพียงว่าเซิร์ฟเวอร์มีความสามารถในการฟัง แต่ในกรณีของเราบริการไม่สามารถเริ่มได้โดยปราศจากการแทรกแซงของมนุษย์

ในฐานะที่เป็นหน่วยผลลัพธ์ซึ่งสันนิษฐานว่าเซิร์ฟเวอร์นั้นพร้อมใช้งานนั้นกำลังพยายามเชื่อมต่อและหมดเวลา แทนที่จะแสดงข้อความ "เซิร์ฟเวอร์ไม่พร้อมใช้งาน"

-

แอปพลิเคชันปัจจุบันของเราซึ่งสื่อสารผ่าน XMLHTTPRequests ไปยังเว็บเซิร์ฟเวอร์ส่งข้อความที่เกิดขึ้นซึ่งเซิร์ฟเวอร์จะตอบกลับด้วยรหัสสถานะ รหัสสถานะถูกคำนวณโดยเซิร์ฟเวอร์ที่ทำการตรวจสอบจำนวนมากเพื่อให้แน่ใจว่าระบบย่อยต่าง ๆ ออนไลน์ (DB ไดเรกทอรีที่จำเป็นสามารถเขียนได้ ฯลฯ )


0

หากภายใต้สถานการณ์ปกติเซิร์ฟเวอร์ของคุณตอบสนองต่อ ping จะมีประโยชน์ในการ ping ที่ช่วงเวลาหนึ่งนาทีเพื่อตรวจสอบว่าตอบสนอง หลักสูตรนี้บอกคุณเท่านั้นว่ามีเซิร์ฟเวอร์ที่ที่อยู่ IP นั้นและมีเส้นทางเครือข่ายจากแหล่งที่มาของ ping ไปยังปลายทาง การตั้งค่าขีด จำกัด สำหรับเวลาตอบสนองจะช่วยให้คุณสามารถตรวจสอบสถานะของเครือข่ายได้เช่นกัน หากคุณกำลังกระตุกเซิร์ฟเวอร์บนอินเทอร์เน็ตอาจมีเพียงเล็กน้อยที่คุณสามารถแก้ไขเครือข่ายได้ แต่หากลูกค้าโทรไปร้องเรียนคุณจะทราบถึงปัญหาแล้ว Pinging google.com นอกจากนี้ยังมีประโยชน์เช่นกัน หากทั้งคุณและ google ทั้งคู่กำลังเกิดอะไรขึ้น

ดังที่คนอื่น ๆ ได้กล่าวไว้เป็นสิ่งสำคัญในการตรวจสอบว่าบริการที่คุณให้นั้นกำลังตอบสนองและประสิทธิภาพของบริการนั้นตกลง คือคุณอาจต้องการตรวจสอบว่าทำไมอายุเว็บที่มักจะตอบสนองต่อวินาทีกำลังตอบสนองฉันในเวลา 10 วินาที

ดังนั้นการรู้ว่าบริการไม่ตอบสนองและมันล้มเหลวในการ ping ทำให้คุณได้รับข้อมูลมากกว่าวิธีการเดียว นอกจากนี้หากคุณตรวจสอบกระบวนการด้วยการรู้ว่า ping ตอบสนองบริการไม่ตอบสนองและเว็บเซิร์ฟเวอร์ไม่มีกระบวนการที่ถูกต้องจำนวนมากจะบอกคุณว่าต้องมองหาที่ใดก่อน

คุณสามารถคลั่งไคล้การเฝ้าสังเกตดังนั้นเพียงแค่เฝ้าระวังให้มากพอที่จะบอกคุณเมื่อเกิดเหตุการณ์ไม่ดีหรือเกิดอันตรายขึ้น นั่นคือการแลกเปลี่ยนมากเกินไป> การใช้งานดิสก์> 90%, ดิสก์ io สูง, CPU 100% สำหรับช่วงเวลาที่ยาวนานและโปรดจำไว้ว่าการตรวจสอบเป็นเพียงการปฏิเสธการโจมตีบริการที่ดำเนินการช้ามาก


0

Ping (Packet Internet Groper) ทำให้คุณรู้ว่าระบบของคุณกำลังสื่อสารกับระบบที่คุณต้องการสร้างการเชื่อมต่อผ่านเครือข่ายหรือไม่ มันยังส่ง Ping ไม่ได้หมายความว่าบริการตัวอย่างเช่นบริการ RemoteRegistry กำลังทำงานอยู่

อย่างไรก็ตามเพื่อแก้ไขปัญหา ping ใด ๆ เป็นสิ่งที่จำเป็น คุณสามารถแก้ไขปัญหาใด ๆ จากระยะไกล ดังนั้น ping จึงมีความสำคัญของตัวเอง


-3

วิธีที่ดีที่สุดที่ฉันใช้ในสคริปต์ของฉันคือ

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

แทนที่ rsh ทางเลือกเช่น remsh สามารถใช้ได้ สิ่งนี้ทำให้มั่นใจได้ว่าระบบรีโมตของคุณจะถูกบูทอย่างสมบูรณ์และคุณสามารถรันคำสั่งได้ การ ping อย่างง่ายนั้นไม่เพียงพอในระหว่างการบู๊ตเมื่อเริ่มให้บริการเครือข่ายระบบเริ่มตอบสนองต่อการ ping


3
rsh? จริงๆ? ทำไมไม่ใช้sshแทน
Joachim Sauer

5
rshเทียบกับsshวิธีที่จะสามารถดำเนินการdate(สมมติว่าคุณจะเริ่มต้นด้วย) พูดอะไรเกี่ยวกับว่าเว็บเซิร์ฟเวอร์, เซิร์ฟเวอร์ SMTP, เซิร์ฟเวอร์ DNS, เซิร์ฟเวอร์ฐานข้อมูลท้องถิ่นหรือสิ่งที่ไม่ทำงานและสามารถให้บริการตามคำขอ? ดีกว่าที่จะขอบริการเฉพาะที่คุณต้องการตรวจสอบความพร้อมใช้งานของ (ซึ่งอาจเป็นเปลือกระยะไกล แต่ไม่จำเป็นต้องเป็น)
CVn

-3

เมื่อฉันรีบูตเซิร์ฟเวอร์ windows ฉันเปิดกล่องคำสั่งและป้อนคำสั่ง

ping <box> -t

ก่อนอื่นมันจะแนะนำว่ามันว่าง - นั่นคือกล่องกำลังจะลง จากนั้นคุณจะได้รับ "คำขอหมดเวลา" จำนวนมาก เมื่อคุณเริ่มได้รับการตอบกลับกล่องจะขึ้น


7
นั่นไม่ได้หมายความว่าสามารถทำงานได้จริงเพียงแค่ตอบสนองต่อการ ping
9517

อาจจะ. เป็นเรื่องที่ฉันสามารถเข้าสู่เซิร์ฟเวอร์และนั่นคือทั้งหมดที่ฉันต้องการ
เดฟ

เป็นไปได้ที่เซิร์ฟเวอร์จะตอบสนองต่อการ ping ได้อย่างสมบูรณ์แบบ แต่ยังไม่ได้เริ่มฟังก์ชั่นเครือข่ายในระดับที่สูงขึ้น การทดสอบ ping เพียงอย่างเดียวคือ ping และอาจใช้การจำแนกชื่อถ้าคุณ ping ตามชื่อไม่ใช่ IP
Rob Moir

ฉันมีหลายครั้งที่เซิร์ฟเวอร์ตอบสนองต่อการปิง แต่ไม่สามารถร้องขอแบบอื่นรวมถึงการเข้าสู่ระบบเซิร์ฟเวอร์ การ ping อาจเป็นวิธีที่หยาบมากในการบอกเมื่อเซิร์ฟเวอร์เริ่มกลับมาแต่นั่นคือทั้งหมด แน่นอนว่าสมมติว่าเซิร์ฟเวอร์ตอบสนองต่อการปิง
John Gardeniers
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.