任務異常自動告警

HuangQiaoqi發表於2024-05-18

任務異常自動告警

雖然可以透過介面來監控了,但是我們想要得更多,人不可能天天盯著介面看吧,

如果能實現任務執行失敗就自動發郵件告警就好了。這個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

相關文章