Ping có phải là một cách đáng tin cậy để kiểm tra xem máy chủ có sẵn không?


96

Trong ứng dụng của mình, tôi đang ping máy chủ và chờ phản hồi. Tôi đang sử dụng điều này để xác định xem máy chủ có sẵn và đáp ứng hay không.

Đây có phải là một cách đáng tin cậy để xác định sẵn có? Tôi giả sử một tường lửa có thể lọc lưu lượng icmp ... Có bất kỳ nhược điểm nào khác không? Có một phương pháp đáng tin cậy hơn?

Câu trả lời:


139

Cách tốt nhất để biết liệu có bất kỳ dịch vụ từ xa nào còn tồn tại hay không là yêu cầu dịch vụ đó thực hiện theo yêu cầu - thực tế đó là cách duy nhất để thực sự biết điều gì đó đang hoạt động chính xác.

Ví dụ: tôi luôn nhận được các bộ cân bằng tải của mình để nhận được phản hồi 'đầu' thực tế từ các máy chủ web của chúng tôi, bạn có thể làm tương tự cho một lựa chọn nhỏ trên hộp DB nếu bạn muốn hoặc bất cứ máy chủ thực tế nào của bạn phục vụ. Như một mẹo bạn có thể tạo một 'online.txt' (hoặc bất kỳ tên nào bạn muốn đặt cho nó) trên các máy chủ web của mình, hãy để LB của bạn thử lấy tệp đó và nếu thất bại thì nó sẽ xóa máy chủ khỏi VIP, đây là một cách hay để lấy các máy chủ riêng lẻ ra khỏi VIP của bạn chỉ bằng cách đổi tên một tệp.

Ping chỉ kiểm tra khả năng phản hồi ping, do đó, hệ điều hành cơ bản, các bộ phận của ngăn xếp IP và các liên kết vật lý - nhưng đó là tất cả, mọi thứ khác có thể bị hỏng và bạn không biết.

Tôi biết điều này được đề cập dưới đây, nhưng nó lặp đi lặp lại nhiều lần.

Yêu cầu Echo của ICMP (còn gọi là "Pings") (còn gọi là ICMP Type 8) được xây dựng trên thông số ngăn xếp IP, vâng, nhưng không bắt buộc phải được thực hiện hoặc sử dụng. Trên thực tế, có một số lượng lớn các nhà cung cấp internet từ chối chuyển tiếp những yêu cầu đó và âm thầm từ bỏ các yêu cầu đó, vì chúng là một hình thức tấn công mạng (được gọi là pingflood).

Như đã đề cập ở trên, điều này được xử lý bởi HĐH (cụ thể là ở cấp độ ngăn xếp mạng) và do đó, tùy thuộc vào cấu hình HĐH để đáp ứng những điều đó hay không. Nếu điều này bị tắt (biện pháp phòng ngừa bảo mật?), Bạn không thể làm gì về việc nhận phản hồi ping từ đầu kia. Đây là lý do tại sao nó không đáng tin cậy.


34
Người đàn ông nói gì! Tôi luôn luôn tư vấn cho khách hàng rằng cách tốt nhất để biết một máy chủ hiện đang cung cấp dịch vụ X là để yêu cầu dịch vụ X .
MadHatter

5
Chúng tôi thực sự xây dựng API RESTful "thử nghiệm" vào các ứng dụng của mình chỉ cho việc này. Vì vậy, chúng tôi biết rằng nếu một ứng dụng phản hồi blah / anything_app / xung thì nó sẽ phục vụ các yêu cầu và có tất cả các công cụ mà nó cần (DB, phụ thuộc, v.v.)
tsykoduk

5
Để thêm vào MadHatter, bạn nên thường xuyên thực hiện ping và yêu cầu. Bằng cách này, bạn có thể biết ngay liệu bạn đang xử lý kết nối mạng hay ngừng dịch vụ ... Một trong hai người có xu hướng tạo ra những thứ hoàn toàn khác so với những thứ khác.
dùng606723

Ping thậm chí không phải là một bài kiểm tra đáng tin cậy mà chính máy chủ có thể phản hồi với ping - nếu không thì tất cả những gì bạn biết là có gì đó giữa bạn và nó đang lọc lưu lượng ICMP
Rob Moir

4
Giả sử máy phản hồi ping trong các trường hợp thông thường, bạn có thể sử dụng ping như một số bộ lọc nở: Nếu ping bị lỗi, dịch vụ chắc chắn bị hỏng (Bạn gặp sự cố mạng, vì chúng tôi đã thiết lập ping hoạt động thường xuyên). Tuy nhiên, nếu ping bị hủy, dịch vụ vẫn có thể ngừng hoạt động như được mô tả trong câu trả lời này
3Doubloons

10

Hầu hết thời gian, có, tuy nhiên:

  • một số máy chủ chặn yêu cầu ping

  • chỉ vì máy chủ phản hồi không tự động có nghĩa là trang web (hoặc bất kỳ dịch vụ nào bạn muốn sử dụng) đang hoạt động , bạn cũng nên kiểm tra xem phản hồi có khớp với nội dung dự kiến ​​hay không.


5

Đúng là trong nhiều trường hợp, lưu lượng ICMP được lọc ra nên có thể không đáng tin cậy ...

Một cách tốt hơn có lẽ có thể là telnet máy chủ tại cổng dịch vụ mà bạn quan tâm.

tức là telnet 127.0.0.1 8080


5

Nếu máy chủ chỉ được yêu cầu trả lời ping thì đây là một phương pháp tốt để xác định tính khả dụng của nó. Nếu được yêu cầu cung cấp ví dụ như một dịch vụ web thì bạn nên thực hiện một số hình thức kiểm tra để xem liệu nó có hoạt động tương tự cho các dịch vụ tệp không, v.v.


3

ping có 2 nhược điểm:

  • ping gửi icmp, có thể được lọc bởi tường lửa
  • cổng tcp hoặc udp mà ứng dụng của bạn sử dụng có thể bận hoặc không mở - ping không kiểm tra xem

một giải pháp tốt hơn là kiểm tra trực tiếp cổng udp / tcp của bạn, để xem dịch vụ có còn khả dụng không ... :-)


3

Có những công cụ đặc biệt để thử nghiệm và giám sát như Nagios / Icinga .
Với những công cụ này, bạn có thể (tất nhiên) thực hiện kiểm tra với nhiều thử nghiệm ping khác nhau nhưng cũng có thể kiểm tra các dịch vụ của bạn.

Tất cả các kiểm tra có thể sử dụng giá trị được trả về để phân loại kết quả là "tốt", "cảnh báo" và "quan trọng" và có thể được viết bằng gần như mọi ngôn ngữ lập trình.

Tất nhiên không dễ để thiết lập (như điểm và nhấp), nhưng có thể tùy chỉnh, đáng tin cậy và mở rộng. Chạy tốt trên các bản phân phối Linux và Unix khác nhau.


2

Kiểm tra các dịch vụ bạn đang tìm kiếm, chỉ cần ping máy chủ không có nghĩa là các dịch vụ đang hoạt động.

Ví dụ:

Hãy tưởng tượng một máy chủ web có hàng tá trang web, sau đó tôi cần biết các trang web đó có TĂNG hay không, tôi đã tự tạo một đoạn script nhỏ trong php và chạy nó cứ sau 10 phút.

Kịch bản thực hiện theo ->

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

Sử dụng ping để xác định xem máy chủ có sẵn hay không giống như bác sĩ ER kiểm tra xem bệnh nhân có thở không. Vâng, đó là một nơi tốt để bắt đầu, nhưng có thể có những vấn đề khác.


1

Chúng tôi sử dụng pingđể thực hiện một precheck, rằng máy chủ được bật nguồn và có thể truy cập, trước khi khởi chạy dịch vụ systemd của chúng tôi để thử kết nối ssh với nó. Điều này giúp tiết kiệm thời gian gỡ lỗi, vì systemctl startlệnh sẽ ngay lập tức thất bại, thay vì âm thầm thất bại và bị lạc trong rừng tạp chí.

Lưu ý rằng ping không "đáng tin cậy" theo nghĩa tương tự như TCP. Nếu bạn có kết nối kém (hoặc ngăn xếp mạng nhảm nhí , cảm ơn Intel mpss ) và các gói bị hủy, một gói ping đơn có thể thất bại. Mặt khác, kết nối TCP là đáng tin cậy đối với các gói bị rơi. Vì vậy, trớ trêu thay, một kết nối ssh có thể hoạt động ngay lập tức sau một lần ping thất bại . Vì vậy, nếu bạn sử dụng ping để kiểm tra độ tỉnh táo, hãy chắc chắn cho phép một số thất bại.


0

Chỉ hai xu của tôi: Chúng tôi có một ứng dụng cũ sử dụng phương pháp này và phải phục vụ nó vì ping không đủ để xác định tính khả dụng của dịch vụ.

Ping chỉ cho thấy rằng máy chủ có khả năng lắng nghe, nhưng trong trường hợp của chúng tôi, dịch vụ không thể khởi động nếu không có sự can thiệp của con người.

Kết quả là các đơn vị kết quả, giả định rằng máy chủ đã có sẵn, đã cố gắng kết nối và hết thời gian chờ. Thay vì hiển thị thông báo "Máy chủ không khả dụng" của chúng tôi.

-

Ứng dụng hiện tại của chúng tôi, giao tiếp qua XMLHTTPRequests đến máy chủ web, sẽ gửi một thông điệp được hình thành mà máy chủ sẽ phản hồi với mã trạng thái. Mã trạng thái được tính toán bởi máy chủ thực hiện một số kiểm tra để đảm bảo rằng các hệ thống con khác nhau đang trực tuyến (DB, các thư mục cần thiết có thể ghi được, v.v.)


0

Nếu trong các trường hợp thông thường, máy chủ của bạn phản hồi ping, sẽ rất hữu ích khi ping nó trong khoảng thời gian một phút để kiểm tra xem nó có phản hồi không. Điều này tất nhiên chỉ cho bạn biết rằng có một máy chủ tại địa chỉ IP đó và có một đường dẫn mạng từ nguồn ping đến đích. Đặt ngưỡng cho thời gian phản hồi có thể cho phép bạn cũng theo dõi trạng thái của mạng. Nếu bạn đang ping máy chủ trên Internet, có thể bạn sẽ không thể làm gì để sửa mạng nhưng nếu khách hàng gọi để khiếu nại, bạn sẽ nhận ra vấn đề. Pinging google.com ngoài ra cũng hữu ích. Nếu bạn và google đều thất bại, điều gì đó đang xảy ra.

Như những người khác đã đề cập, điều quan trọng là phải giám sát rằng dịch vụ bạn đang cung cấp đang đáp ứng và hiệu suất của nó là ổn. Tức là bạn có thể muốn kiểm tra lý do tại sao một thời đại web thường phản hồi trong một giây giờ lại phản hồi tôi là 10 giây.

Vì vậy, việc biết rằng một dịch vụ không đáp ứng và ping bị lỗi cung cấp cho bạn nhiều thông tin hơn chỉ là một cách tiếp cận. Ngoài ra, nếu bạn cũng giám sát các quy trình, biết rằng ping phản hồi, dịch vụ không phản hồi và máy chủ web không có số lượng quy trình chính xác cho bạn biết nơi cần tìm trước tiên.

Bạn có thể phát điên với việc theo dõi vì vậy chỉ cần theo dõi đủ để cho bạn biết khi có điều gì xấu xảy ra hoặc đang trở nên nguy hiểm. Tức là trao đổi quá nhiều,> 90% sử dụng đĩa, io đĩa cao, CPU 100% trong thời gian dài và hãy nhớ rằng giám sát chỉ là một cuộc tấn công từ chối dịch vụ được thực hiện rất chậm.


0

Ping (Gói Internet Groper) cho bạn biết liệu hệ thống của bạn có liên lạc với hệ thống mà bạn muốn thiết lập kết nối qua mạng hay không. Nó thậm chí còn ping, không có nghĩa là dịch vụ ví dụ như dịch vụ RemoteRegistry đang chạy.

Tuy nhiên, để khắc phục bất kỳ vấn đề ping là cần thiết. Bạn có thể khắc phục từ xa mọi vấn đề. Do đó, ping có tầm quan trọng riêng của nó.


-3

Cách tốt nhất tôi sử dụng trong các kịch bản của mình là

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

thay cho rsh thay thế như remsh có thể được sử dụng. Điều này đảm bảo rằng hệ thống từ xa của bạn được khởi động hoàn toàn và bạn có thể chạy các lệnh trên nó. Ping đơn giản là không đủ vì trong khi khởi động khi các dịch vụ mạng được khởi động, hệ thống bắt đầu phản hồi với ping.


3
rsh? Có thật không? Tại sao không sử dụng sshthay thế?
Joachim Sauer

5
rshvs sshsang một bên, như thế nào có khả năng thực hiện date(giả sử bạn đang có, để bắt đầu với) nói bất cứ điều gì về việc liệu một máy chủ web, máy chủ SMTP, máy chủ DNS, máy chủ cơ sở dữ liệu địa phương hoặc không có điều gì đang chạy và có khả năng phục vụ yêu cầu? Tốt hơn là thực sự yêu cầu dịch vụ cụ thể mà bạn muốn xác minh tính khả dụng (có thể là vỏ từ xa, nhưng chắc chắn không phải như vậy).
một CVn

-3

Khi tôi khởi động lại máy chủ windows, tôi mở hộp nhắc lệnh và nhập

ping <box> -t

Đầu tiên, nó sẽ gợi ý rằng nó có sẵn - đó là hộp đi xuống. Sau đó, bạn sẽ nhận được rất nhiều "thời gian yêu cầu." Khi bạn bắt đầu nhận được trả lời, hộp là lên.


7
Điều đó không có nghĩa là nó có sẵn để làm việc thực sự, chỉ là nó đáp ứng với ping.
dùng9517

Có lẽ. Luôn luôn nghĩ rằng tôi có thể đăng nhập vào máy chủ và đó là tất cả những gì tôi cần.
Dave

Một máy chủ hoàn toàn có thể phản hồi ping nhưng không (chưa, hoặc thậm chí là tất cả) đã bắt đầu bất kỳ chức năng mạng cấp cao hơn nào. Điều duy nhất kiểm tra ping là ping. Và có thể phân giải tên nếu bạn ping theo tên chứ không phải IP
Rob Moir

Tôi đã có nhiều lần máy chủ phản hồi ping nhưng không thể phục vụ bất kỳ loại yêu cầu nào khác, kể cả đăng nhập. Một ping có thể là một phương tiện rất thô sơ để nói khi nào máy chủ bắt đầu hoạt động trở lại nhưng chỉ có thế. Tất nhiên, đó là giả sử máy chủ thậm chí trả lời ping.
John Gardeniers
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.