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


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.