Ping이 서버를 사용할 수 있는지 확인하는 안정적인 방법입니까?


96

내 응용 프로그램에서 서버를 핑하고 응답을 기다리고 있습니다. 서버를 사용할 수 있고 응답하는지 여부를 확인하기 위해 이것을 사용하고 있습니다.

이것이 가용성을 결정하는 신뢰할 수있는 방법입니까? 방화벽에서 ICMP 트래픽을 필터링 할 수 있다고 가정합니다. 다른 단점이 있습니까? 더 안정적인 방법이 있습니까?

답변:


139

지정된 원격 서비스가 살아 있는지 확인하는 가장 좋은 방법은 요청이 의도 한 방식으로 서비스를 요청하도록 요청하는 것입니다. 실제로 무언가가 제대로 작동하고 있는지 진정으로 알 수있는 유일한 방법입니다.

예를 들어 항상로드 밸런서가 웹 서버에서 실제 '헤드'응답을 얻도록하려면 원하는 경우 또는 실제 서버가 제공하는 모든 것을 DB 상자에서 선택하면 동일하게 수행 할 수 있습니다. 팁으로 웹 서버에서 'online.txt'(또는 원하는 이름)를 만들 수 있으며 LB가 해당 파일을 가져 오도록하고 실패하면 VIP에서 서버를 제거합니다. 단일 파일의 이름을 바꾸어 VIP에서 개별 서버를 수동으로 가져 오는 좋은 방법입니다.

Ping은 핑에 응답 할 수있는 기능 만 테스트하므로 기본 OS, IP 스택의 일부 및 물리적 링크입니다. 그게 전부입니다.

나는 이것이 아래에 언급되어 있음을 알고 있지만 반복해서 반복합니다.

ICMP 에코 요청 (일명 "Pings") (일명 ICMP 유형 8)은 IP 스택 사양을 기반으로하지만 구현하거나 사용할 필요는 없습니다. 사실, 많은 인터넷 제공 업체가 네트워크 공격 (pingflood)의 형태이므로 요청을 전달하고 거부하는 요청을 자동으로 거부합니다.

위에서 언급했듯이 이것은 OS에 의해 (특히 네트워크 스택 수준에서) 처리되므로 OS 구성에 따라 OS 구성에 따라 달라집니다. 이 기능이 꺼져 있으면 (보안 예방 조치?) 다른 쪽 끝에서 ping 응답을받는 방법에 대한 작업을 수행 할 수 없습니다. 이것이 신뢰할 수없는 이유입니다.


34
남자가 한 말! 나는 항상 서버가 현재 서비스 X를 제공하고 있는지 알 수있는 가장 좋은 방법은 서비스 X를 요청 하는 것이라고 클라이언트에게 조언한다 .
MadHatter

5
우리는 실제로 우리의 애플 리케이션에 "테스트"편안하고 API를 구축 이합니다. 따라서 우리는 응용 프로그램이 blah / whatever_app / pulse에 응답하면 응용 프로그램이 작동하고 요청을 처리하며 필요한 모든 도구 (DB, 의존성 등)를 가지고 있음을
알고 있습니다

5
MadHatter에 추가하려면 핑과 요청을하는 것이 좋습니다. 이렇게하면 네트워크 연결 또는 서비스 중단을 처리하는지 여부를 즉시 알 수 있습니다 ... 둘 중 하나가 다른 것과 완전히 다른 것을 만드는 경향이 있습니다.
user606723

Ping은 서버 자체가 Ping에 응답 할 수있는 신뢰할 수있는 테스트조차 아닙니다. 그렇지 않으면 사용자와 ICMP 트래픽을 필터링하는 것만 알면됩니다
Rob Moir

4
컴퓨터가 정상적인 상황에서 핑에 응답한다고 가정하면 핑을 일종의 블룸 필터로 사용할 수 있습니다. 핑이 실패하면 서비스가 확실히 다운 된 것입니다. 그러나 핑에 성공하면이 답변에 설명 된대로 서비스가 여전히 다운 될 수 있습니다.
3Doubloons

10

그러나 대부분의 경우 :

  • 일부 서버는 핑 요청을 차단합니다

  • 서버가 응답 한다고해서 웹 사이트 (또는 사용하려는 모든 서비스) 자동으로 작동 하는 것은 아니기 때문에 응답 예상 내용과 일치하는지 확인해야합니다.


5

많은 경우에 ICMP 트래픽이 필터링되어 신뢰할 수없는 것은 사실입니다 ...

더 나은 방법은 관심있는 서비스 포트에서 서버를 텔넷으로 연결하는 것입니다.

즉 텔넷 127.0.0.1 8080


5

서버가 Ping에만 응답해야하는 경우 서버의 가용성을 결정하는 좋은 방법입니다. 예를 들어 웹 서비스를 제공해야하는 경우 파일 서비스 등에서 비슷한 방식으로 작동하는지 확인하기 위해 테스트를 수행해야합니다.


3

핑에는 두 가지 단점이 있습니다.

  • ping은 방화벽으로 필터링 할 수있는 icmp를 보냅니다.
  • 응용 프로그램에서 사용하는 tcp 또는 udp 포트가 사용 중이거나 열리지 않았을 수 있습니다. ping에서 확인하지 않습니다

더 나은 해결책은 서비스가 여전히 사용 가능한지 확인하기 위해 udp / tcp 포트를 직접 확인하는 것입니다 ... :-)


3

Nagios / Icinga 와 같은 테스트 및 모니터링을위한 특수 도구가 있습니다 .
이러한 도구를 사용하면 다양한 핑 테스트를 통해 검사를 수행 할 수 있지만 서비스를 검사 할 수도 있습니다.

모든 검사는 반환 된 값을 사용하여 결과를 "양호", "경고"및 "중요"로 분류 할 수 있으며 거의 ​​모든 프로그래밍 언어로 작성할 수 있습니다.

물론 포인트 앤 클릭과 같은 설정이 쉽지는 않지만 사용자 정의 가능하고 안정적이며 확장 가능합니다. 다양한 Linux 및 Unix 배포판에서 잘 실행됩니다.


2

찾고있는 서비스를 테스트하십시오. 서버를 핑한다고해서 서비스가 작동하고있는 것은 아닙니다.

예를 들면 다음과 같습니다.

수십 개의 웹 사이트가있는 웹 서버를 상상 한 다음 웹 사이트가 작동하는지 알아야합니다. 저는 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

핑을 사용하여 서버를 사용할 수 있는지 확인하는 것은 응급실 의사가 환자의 호흡 여부를 확인하는 것과 같습니다. 예, 시작하기에 좋은 곳이지만 다른 문제가있을 수 있습니다.


1

우리가 사용하는 ping호스트의 전원이 켜져 있는지와 연결할 수, 그것에 ssh 연결을 시도 우리 systemd 서비스를 시작하기 전에 PreCheck를 할 수 있습니다. 이로 인해 systemctl start명령이 즉시 실패하고 journalctl 정글에서 길을 잃지 않고 즉시 실패 하므로 디버깅 시간이 절약 됩니다.

핑은 TCP와 같은 의미에서 "신뢰할 수있는"것이 아닙니다. 연결 상태가 좋지 않거나 (혹은 네트워크 스택, 인텔 mpss 감사 ) 패킷이 삭제되는 경우 단일 패킷 핑이 실패 할 수 있습니다. 반면에 TCP 연결은 손실 된 패킷에 대해 안정적입니다. 아이러니하게도, ssh 연결은 단일 실패 직후에 작동 할 수 있습니다 . 따라서 핑을 사용하여 상태 확인을 수행하는 경우 약간의 실패를 허용해야합니다.ping


0

단지 내 두 센트 : 우리는이 방법을 사용하는 레거시 응용 프로그램을 가지고 있으며 핑이 서비스 가용성을 결정하기에 충분 하지 않기 때문에 서비스를 제공해야했습니다 .

Ping은 단순히 서버가 청취 할 수 있음을 보여 주지만 우리의 경우 사람의 개입없이 서비스를 시작할 수 없었습니다.

결과적으로 서버를 사용할 수 있다고 가정 한 단위는 연결 및 시간 초과를 시도했습니다. "서버를 사용할 수 없습니다"메시지를 표시하는 대신

-

XMLHTTPRequests를 통해 웹 서버와 통신하는 현재 응용 프로그램은 서버가 상태 코드로 응답 할 형식화 된 메시지를 보냅니다. 상태 코드는 다양한 하위 시스템이 온라인 상태인지 확인하기 위해 서버에서 여러 검사를 수행하여 계산됩니다 (DB, 필요한 디렉토리 쓰기 가능 등).


0

정상적인 상황에서 서버가 핑에 응답하는 경우 1 분 간격으로 핑하여 응답하는지 확인하는 것이 좋습니다. 이것은 물론 해당 IP 주소에 서버가 있고 핑 소스에서 대상까지의 네트워크 경로가 있음을 알려줍니다. 응답 시간에 대한 임계 값을 설정하면 네트워크 상태도 모니터링 할 수 있습니다. 인터넷에서 서버를 핑 (ping)하는 경우 네트워크를 수정하기 위해 할 수있는 일은 거의 없지만 고객이 전화를 걸어 불평하면 이미 문제를 알고있을 것입니다. google.com을 핑하는 것도 유용합니다. 귀하와 Google이 모두 다운되면 문제가 발생한 것입니다.

다른 사람들이 언급했듯이 제공하는 서비스가 응답하고 있으며 성능이 양호 함을 모니터링하는 것이 중요합니다. 즉, 보통 1 초 안에 응답하는 웹 에이지가 10 초 동안 응답하는 이유를 확인할 수 있습니다.

따라서 서비스가 응답하지 않고 핑이 실패한다는 것을 아는 것은 단 하나의 접근 방식보다 훨씬 많은 정보를 제공합니다. 또한 핑이 응답한다는 것을 알고 프로세스를 모니터링하는 경우 서비스가 응답하지 않으며 웹 서버에 올바른 수의 프로세스가 없으므로 먼저 찾을 위치를 알려줍니다.

모니터링에 열중 할 수 있으므로 나쁜 일이 발생하거나 위험에 처했을 때이를 충분히 알 수 있도록 모니터링하십시오. 즉, 너무 많은 스와핑,> 90 % 디스크 사용량, 높은 디스크 IO, 100 % CPU 기간 동안 모니터링은 모니터링이 매우 느리게 수행되는 서비스 거부 공격이라는 것을 기억하십시오.


0

Ping (Packet Internet Groper)을 통해 시스템이 네트워크를 통해 연결하려는 시스템과 통신하고 있는지 알 수 있습니다. 핑조차도 RemoteRegistry 서비스와 같은 서비스가 실행되고있는 것은 아닙니다.

그러나 문제를 해결하려면 핑이 필요합니다. 원격으로 모든 문제를 해결할 수 있습니다. 따라서 핑은 그 자체로 중요합니다.


-3

스크립트에서 사용하는 가장 좋은 방법은

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

remsh와 같은 rsh 대안 대신 사용할 수 있습니다. 이를 통해 원격 시스템이 완전히 부팅되고 명령을 실행할 수 있습니다. 네트워크 서비스가 시작될 때 부팅 중에 시스템이 핑에 응답하기 때문에 간단한 핑으로는 충분하지 않습니다.


3
rsh? 정말? 왜 ssh대신 사용 하지 않습니까?
Joachim Sauer

5
rshssh제외하고, 실행할 수 수행되는 방법 date요청을 처리 할 수 실행하고 이것 저것 웹 서버, SMTP 서버, DNS 서버, 로컬 데이터베이스 서버 여부에 대해 아무 말도 (시작, 당신은 가정)? 가용성을 확인하려는 특정 서비스를 실제로 요청하는 것이 좋습니다 (원격 셸 일 수도 있지만 반드시 그런 것은 아닙니다).
CVn

-3

Windows 서버를 재부팅하면 명령 프롬프트 상자가 열리고 입력하십시오.

ping <box> -t

먼저 사용할 수 있음을 제안합니다. 즉, 상자가 내려갑니다. 그런 다음 많은 "요청 시간이 초과되었습니다." 답장을 시작하면 상자가 켜집니다.


7
그렇다고해서 실제 작업을 수행 할 수 있다는 의미는 아니며 핑에 응답한다는 의미입니다.
user9517

아마도. 서버에 로그온 할 수있는 것은 항상 멘션이며, 이것이 내가 필요한 전부입니다.
Dave

서버가 핑 (ping)에 응답 할 수 있지만 더 높은 수준의 네트워크 기능을 시작하지는 않았을 수도 있습니다. 핑 테스트는 핑입니다. 오히려 IP보다는 이름으로 ping을한다면 아마 해상도를 이름
롭 모어

서버가 핑에 응답했지만 로그온을 포함하여 다른 종류의 요청을 서버에 실패한 경우가 많이있었습니다. 핑은 서버 가 언제 백업을 시작 했는지 알려주는 매우 조잡한 수단 일 있지만 그게 전부입니다. 물론 서버가 핑에 응답한다고 가정합니다.
John Gardeniers
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.