Führen Sie einen Supervisor und haben selten einen Prozess ausgefallen? Ich denke, es gibt eine Möglichkeit, es extern zu überwachen, aber ich habe versucht, Slack über die Statusänderung des Prozesses mit EventListener of Supervisor zu informieren, an dem ich schon lange interessiert war.
Erstellen Sie eine Einstellungsdatei wie unten gezeigt.
/etc/supervisord.d/process_state_event_listener.conf
[eventlistener:process_state_event_listener]
command=python /path/to/process_state_event_listener.py
events=PROCESS_STATE
redirect_stderr=false
stdout_logfile=/var/log/supervisor/event_listener_stdout.log
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=5
stderr_logfile=/var/log/supervisor/event_listener_stderr.log
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=5
environment=SLACK_WEB_HOOK_URL="https://hooks.slack.com/services/xxxxxxx/xxxxxxx/xxxxxxxxxx"
events Wir möchten über alle Änderungen des Prozessstatus informiert werden. Geben Sie daher "PROCESS_STATE" an.
environment Legen Sie die URL für Incoming WebHook in der Umgebungsvariablen fest, um Slack zu benachrichtigen.
Der endgültige Code sieht folgendermaßen aus:
/path/to/process_state_event_listener.py
import sys
import os
from supervisor import childutils
from datetime import datetime
import slackweb
def main():
while True:
run_forever()
def run_forever():
headers, payload = childutils.listener.wait(sys.stdin, sys.stdout)
eventname = headers['eventname']
payload_header, data = childutils.eventdata(payload+'\n')
childutils.listener.ok(sys.stdout)
color = "good"
if eventname in ['PROCESS_STATE_BACKOFF', 'PROCESS_STATE_EXITED', 'PROCESS_STATE_FATAL', 'PROCESS_STATE_UNKNOWN']:
color = "danger"
attachment = {
"title": "event",
"text": eventname,
"color": color,
"fields": [{
"title": "datetime",
"value": datetime.now().strftime("%Y/%m/%d %H:%M:%S")
}, {
"title": "hostname",
"value": os.uname()[1]
}]
}
if 'processname' in payload_header:
attachment["fields"].append({
"title": "process",
"value": payload_header['processname']
})
if 'expected' in payload_header:
attachment["fields"].append({
"title": "expected",
"value": payload_header['expected']
})
if 'SLACK_WEB_HOOK_URL' in os.environ:
slack_url = os.environ['SLACK_WEB_HOOK_URL']
slack = slackweb.Slack(url=slack_url)
slack.notify(attachments=[attachment])
if __name__ == '__main__':
main()
Es gibt ein Plug-In namens superlance, wenn eine E-Mail-Benachrichtigung akzeptabel ist, aber OP25B Ich habe die E-Mail an Google Mail aufgrund eines Problems nicht erhalten, daher habe ich Slack benachrichtigt. Da der Einsatz von Supervisor zugenommen hat, möchte ich ihn weiterhin auf verschiedene Arten anwenden.
Recommended Posts