รับการแจ้งเตือนเมื่อเซอร์วิสที่มอนิเตอร์ systemd เข้าสู่สถานะล้มเหลว


32

ฉันต้องมีข้อความเครือข่ายที่ส่งเมื่อบริการ systemd ที่ฉันมีปัญหาหรือหยุดทำงาน (กล่าวคือเข้าสู่สถานะที่ล้มเหลวฉันตรวจสอบสถานะการพักโดยใช้ WatchdogSec =) ฉันสังเกตเห็นว่า systemd ที่ใหม่กว่านั้นมี FailureAction = แต่ก็เห็นว่าสิ่งนี้ไม่อนุญาตคำสั่งโดยพลการ แต่เพิ่งรีบูต / ปิดเครื่อง

โดยเฉพาะฉันต้องการวิธีที่จะส่งข้อความเครือข่ายหนึ่งข้อความเมื่อ systemd ตรวจพบว่าโปรแกรมขัดข้องและอีกข้อความหนึ่งเมื่อตรวจพบว่าข้อความหยุดทำงาน

ฉันหวังว่าจะได้คำตอบที่ดีกว่า "การแยกวิเคราะห์บันทึก" และฉันต้องการบางสิ่งที่มีเวลาตอบสนองใกล้ - ทันทีดังนั้นฉันจึงไม่คิดว่าวิธีการลงคะแนนเป็นสิ่งที่ดี มันควรเป็นสิ่งที่ถูกกระตุ้นโดยเหตุการณ์ที่เกิดขึ้น


คุณช่วยยกตัวอย่าง (หรือแม้แต่สิ่งที่ไม่ได้ทำงาน) ของสิ่งที่คุณพยายามจะบรรลุได้หรือไม่?
dawud

คุณสามารถแก้ไขคำถามของคุณเพื่อเพิ่มข้อมูลนี้แทนที่จะเพิ่มในความคิดเห็นได้หรือไม่? :)
dawud

คำตอบ:


31

หน่วย systemd สนับสนุน 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.