시스템 모니터링 서비스가 실패한 상태가되면 알림을받습니다.


32

충돌이 발생하거나 중단 된 시스템 서비스 (예 : 실패한 상태가되면 WatchdogSec =를 사용하여 중단 된 상태를 모니터링 함)가있을 때 네트워크 메시지를 보내야합니다. 최신 systemd에 FailureAction =이 있음을 알았지 만 이것이 임의의 명령을 허용하지 않고 재부팅 / 종료만한다는 것을 알았습니다.

특히 systemd가 프로그램 충돌을 감지했을 때 하나의 네트워크 메시지를 보내고 중단 된 것을 감지하면 다른 네트워크 메시지를 보내는 방법이 필요합니다.

나는 "로그를 파싱"하는 것보다 더 나은 답변을 원하고 있으며, 거의 즉각적인 응답 시간을 가진 것이 필요하기 때문에 폴링 접근 방식이 좋지 않다고 생각합니다. 이벤트가 발생했을 때 발생하는 것이어야합니다.


달성하려는 목표의 예 (비 작동 사례)를 제공해 주시겠습니까?
dawud

이 정보를 의견에 추가하지 않고 추가하도록 질문을 편집 할 수 있습니까? :)
dawud

답변:


31

시스템 장치는 장치가 실패 할 때 장치 (또는 그 이상)를 활성화하는 OnFailure를 지원합니다. 당신은 같은 것을 넣을 수 있습니다

 OnFailure=notify-failed@%n

그런 다음 notify-failed@.service필요한 지정자를 사용하여 (최소한 % i가 필요할 수 있음) 알림을 보낼 스크립트 나 명령을 실행할 수 있는 서비스 를 만듭니다 .

http://northernlightlabs.se/systemd.status.mail.on.unit.failure 에서 실제 예를 볼 수 있습니다.


5
링크 된 사이트의 지침에 몇 가지 수정이 필요합니다. 먼저 notify%n.service중복되며 결과는 notify@my-service.service.service입니다. 둘째, %i대신에 사용해야합니다 %I. 그렇지 않으면 이름의 모든 대시가 슬래시로 변환됩니다.
orodbhen

4
단위 파일을 수정하지 않고 여러 또는 모든 단위에 대해이 작업을 수행하는 방법이 있습니까?
Vladimir Panteleev

16

알리는 방법 :

/etc/systemd/system/notify-email@.service

[Unit]
Description=Sent email 

[Service]
Type=oneshot
ExecStart=/usr/bin/bash -c '/usr/bin/systemctl status %i | /usr/bin/mailx -Ssendwait -s "[SYSTEMD_%i] Fail" your_admin@company.blablabla'

systemd에 추가하십시오 :

systemctl enable /etc/systemd/system/notify-email@service

다른 서비스에는 다음을 추가하십시오.

[Unit]
OnFailure=notify-email@%i.service

구성을 다시로드하십시오.

systemctl daemon-reload

연속해서 여러 번 트리거하지 않는 방법이 있습니까? 어떤 상황에서는 밤에 실패하고 다시 시작하려고 시도한 서비스에 대한 1K 이메일을받는 것이 도움이되지 않습니다.
starbeamrainbowlabs

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.