내 서비스를 자동화된 방식으로 적절하게 모니터링하려면 어떻게 해야 합니까? 그러면 충돌이 발생하면 자동으로 다시 시작됩니까?

내 서비스를 자동화된 방식으로 적절하게 모니터링하려면 어떻게 해야 합니까? 그러면 충돌이 발생하면 자동으로 다시 시작됩니까?

시스템 서비스 모니터링을 어떻게 설정합니까? 아니면 httpd, mysqld, and my custom daemon실행 여부에 관계없이 매 순간을 검사하고 그렇지 않은 경우 즉시 자동으로 다시 시작 하는 자동화된 스크립트를 사용합니까 ?

어떤 아이디어가 있나요?

예를 들어:

*Day 1:* System is running in Rail way where no support can be 24/7 available, Day 1 was fine. 
*Day 2:* System in the middle of the Rail way crashed cause httpd and mysqld for some reason not running the service

service httpd계속해서 service mysqld실행할 수 있도록 자동화하려면 어떻게 해야 할까요 ?

답변1

이를 수행하는 도구는 여러 가지가 있습니다(daemontools 및 perp를 제외하고는 경험이 많지 않습니다).

내 직장에서 우리는 좋아한다범인, 이는 우리 인프라의 가장 큰 특징입니다. 이러한 도구 중 일부는 원하는 전체 기능의 하위 집합만 수행하므로 사용 사례에 적합하지 않을 수 있습니다.

답변2

다른 답변에서 언급했듯이 Dan Bernstein의데몬 도구동일한 원래 메커니즘을 공유하는 일련의 도구 세트를 시작했습니다.

대부분의 경우 run데몬으로 실행/작동하는 프로그램을 작성하고 서비스 관리자 또는 감독자 프로세스는 일반 Unix 및 Linux 메커니즘을 사용하여 이를 포크된 하위 프로세스로 모니터링합니다. Apache 및 MySQL의 경우많은사람들은 이전에 개입했으며 daemontools 제품군 서비스 관리 하에서 이러한 서버를 실행하는 방법에 대한 많은 예가 있습니다. 다음은 몇 가지입니다:

Chris Down은 더 큰 도구 세트가 적합하지 않을 수 있다고 생각합니다. 그러나 실제로는 그렇지 않습니다. 이러한 도구 세트는 모두 일관되고 일관성이 있지만 특정 상황에 필요한 도구 이외의 도구를 사용할 필요는 없습니다. 믹스 앤 매치도 가능합니다. perp에서 Laurent Bercot의 execlineb모든 유틸리티를 사용할 수 있고, noshrunit에서 내 스크립트 인터프리터와 모든 유틸리티를 사용할 수 chpst있습니다 service-manager.

마찬가지로 systemd(Linux만 사용하는 경우) 또는 launchd(MacOS 10을 사용하는 경우)에서 Apache 및 MySQL을 실행할 수 있습니다. launchd 구성 파일은 언급된 다른 시스템에 비해 상당히 복잡하고 번거롭습니다. 그러나 시스템 단위 파일은 스크립트와 동일한 단순성을 갖습니다 run.

mysqld.service다양한 사람들의 홈브루 편의 시스템 서비스 장치 컬렉션에는 World Wide Web에서 사용할 수 있는 홈브루 및 서비스 장치가 꽤 많이 있습니다 .httpd.service

이들 모두는 부트로더에서 데몬을 시작하고, 시스템이 실행되는 동안 관리자/자동 제어 하에 데몬을 중지 및 시작하고, 다양한 실패 조건에서 데몬을 자동으로 다시 시작하기 위한 기본 기반을 제공합니다. Xion345는 실수로 monit과 혼동합니다. xyr의 답변에서 볼 수 있듯이 모니터링 및 제어에 사용되는 기본 계층은 데몬 System 5 입니다 rc. systemd 또는 nosh일 수도 있습니다. (사실 service만약 그렇다면.)

모니트가 속한 곳은위 레이어에서. 감시 장치사용베이스보드 및 모니터 시작/중지/모니터링실제 제공되는 서비스, 어느 것이 하는가?또한데몬 프로세스를 감독하려면 데몬 감독자를 사용하세요. 이 레이어에서는 nagios와 같은 관련 도구를 찾을 수 있습니다. (daemontools 제품군에서 모니터링하는 데몬에 nagios를 쉽게 연결하고 daemontools API를 통해 프로세스 상태와 가동 시간을 확인하도록 할 수 있습니다. 내 nosh 도구 세트에는 이를 수행하기 위한 기본 nagios 플러그인도 함께 제공됩니다.)

답변3

Chris Down이 작성한 것 외에도 다음을 추천합니다.감시 장치. 특히, 포트가 열려 있는지(예: 80) 확인하고, 포트가 닫혀 있으면 해당 서비스(예: httpd)를 다시 시작할 수 있습니다. 바라보다이 예SSHD의 경우:

check process sshd with pidfile /var/run/sshd.pid
start program  "/etc/init.d/sshd start"
stop program  "/etc/init.d/sshd stop"
if failed port 22 protocol ssh then restart
if 5 restarts within 5 cycles then timeout

Monit은 perp 또는 daemontools와는 다른 접근 방식을 사용합니다. 즉, 프로세스가 실행 중인지 확인할 뿐만 아니라 포트가 열려 있는지 또는 파일이 존재하는지(예: UNIX 소켓)도 확인합니다. daemontools나 perp보다 설정하기가 더 쉽고 덜 방해적일 수 있습니다(monit가 init 시스템과 올바르게 상호 작용하는지 확인할 필요가 없습니다). 서비스를 다시 시작하지 못하는 경우가 자주 발생하면 이메일을 보내도록 구성할 수도 있습니다.

답변4

게다가하나님.

God은 Ruby로 작성된, 구성하기 쉽고 확장하기 쉬운 모니터링 프레임워크입니다.

서버 프로세스와 작업을 계속 실행하는 것은 배포 프로세스에서 쉬운 부분입니다. 하나님은 가장 간단하고 가장 강력한 모니터링 애플리케이션을 목표로 하십니다.

간단한 서버 작성 simple.rb:

loop do
  puts 'Hello'
  sleep 1
end

simple.god이제 데몬을 모니터링하는 스크립트를 만듭니다 .

God.watch do |w|
  w.name = "simple"
  w.start = "ruby /full/path/to/simple.rb"
  w.keepalive
end

이제 모니터링 스크립트를 시작합니다.

god -c path/to/simple.god -D

하나님은 Ruby 애플리케이션을 모니터링할 수 있을 뿐만 아니라 귀하를 모니터링 httpd하고 mysqld필요 /etc/init./d/...에 따라 적절한 스크립트를 호출할 수도 있습니다.

관련 정보