任務異常自動告警
雖然可以透過介面來監控了,但是我們想要得更多,人不可能天天盯著介面看吧,
如果能實現任務執行失敗就自動發郵件告警就好了。這個Celery當然也是沒有問題的。
透過鉤子程式在異常的時候觸發郵件通知
使用示例
from celery import shared_task
import time
from celery import Task
from django.core.mail import send_mail
from django.conf import settings
# 成功失敗郵件告警
class SendEmailTask(Task):
def on_success(self, retval, task_id, args, kwargs):
info = f'任務成功-- 任務id是:{task_id} , 引數是:{args} , 執行成功 !'
send_mail('celery任務監控成功告警', info, settings.EMAIL_HOST_USER, ["616564099@qq.com",])
print('------------成功')
def on_failure(self, exc, task_id, args, kwargs, einfo):
info = f'任務失敗-- 任務id為:{task_id} , 引數為:{args} , 失敗 ! 失敗資訊為: {exc}'
send_mail('celery任務監控失敗告警', info, settings.EMAIL_HOST_USER, ["616564099@qq.com",])
print('------------失敗')
def on_retry(self, exc, task_id, args, kwargs, einfo):
print(f'任務id位::{task_id} , 引數為:{args} , 重試了 ! 錯誤資訊為: {exc}')
@shared_task(base=SendEmailTask, bind=True)
def add(a,b):
time.sleep(1)
return a+b
@shared_task()
def send_email(mail):
print(f'給{mail}傳送郵件了')
return '成功'
# celery -A celery_demo worker -l debug -P eventlet
# celery -A celery_demo beat -l debug
# celery -A celery_demo flower --port-5566