需求

监测dolphinscheduler调度系统,任务执行异常情况。如有异常,则发送邮件通知。

处理思路

因DS本身自带的邮件发送功能,不能正常发送邮件。

故而,通过查询DS源数据表,获取当前任务执行情况。将获取结果,使用python发送邮件。

通过shell脚本获取执行情况,并将结果保存到本地。

执行代码

mysql -hip -P3306 -u用户 -p密码 -e"
use dolphinscheduler;
select a.name,
a.state,
a.submit_time,
a.start_time,
a.end_time,
CONCAT(TIMESTAMPDIFF(SECOND, a.start_time,a.end_time),'(s)') dur
from t_ds_task_instance a,
(
select name,
max(submit_time) submit_time
from t_ds_task_instance
group by name
) b
where a.name=b.name
and a.submit_time=b.submit_time
and substr(a.start_time,1,10)='${deal_day}'
and a.state not in(0,1,7)
union all
select a.name,
a.state,
a.submit_time,
a.start_time,
'-' end_time,
CONCAT(cast(TIMESTAMPDIFF(SECOND, a.start_time,current_timestamp)/60/60 as decimal(10,2)),'(h)') dur
from t_ds_task_instance a,
(
select name,
max(submit_time) submit_time
from t_ds_task_instance
group by name
) b
where a.name=b.name
and a.submit_time=b.submit_time
and substr(a.submit_time,1,10)='${deal_day}'
and a.state in(1,10,11)
and TIMESTAMPDIFF(SECOND, a.start_time,current_timestamp)>7200;
" > rwjk.txt

登陆mysql数据库,并执行SQL,导出结果

python处理导出结果,并发送邮件

# !/user/bin/env python
# -*- coding: utf-8 -*- import smtplib
from email.mime.text import MIMEText
from email.header import Header def send_mail():
# 第三方 SMTP 服务
mail_host = "" # 设置服务器
mail_user = "" # 用户名
mail_pass = "" # 口令 sender = '' # 发送邮件用户
receivers = ['收件人1',
'收件人2',
'收件人3'
] msg_text = '邮件正文发送内容'
mail_msg_list=['<p>你好,DS调度异常任务如下:</p>',
'<table border="1" cellpadding="0" cellspacing="0" width="1000" style="border-collapse: collapse; style="text-align:center"">',
'<tbody>',
'<tr><th>任务</th><th>状态</th><th>提交时间</th><th>开始时间</th><th>结束时间</th><th>执行时长(s)</th></tr>'
]
with open('/zhjs/work01/lizhenhua/rwjk/rwjk.txt', 'r') as f:
s = f.readlines()
for k,v in enumerate(s):
s[k]=v.replace('\n','').split('\t') # 替换掉换行符、并转换为列表
for i in range(len(s)):
mail_msg_list.append('<tr>')
for j in range(len(s[i])):
if i>=1:
s[i][1] = s[i][1].replace('0','提交成功')
s[i][1] = s[i][1].replace('1', '正在运行')
s[i][1] = s[i][1].replace('2', '准备暂停')
s[i][1] = s[i][1].replace('3', '暂停')
s[i][1] = s[i][1].replace('4', '准备停止')
s[i][1] = s[i][1].replace('5', '停止')
s[i][1] = s[i][1].replace('6', '失败')
s[i][1] = s[i][1].replace('7', '成功')
s[i][1] = s[i][1].replace('8', '需要容错')
s[i][1] = s[i][1].replace('9', 'kill')
s[i][1] = s[i][1].replace('10', '等待线程')
s[i][1] = s[i][1].replace('11', '等待依赖完成')
mail_msg_list.append('<td>{}</td>'.format(s[i][j]))
mail_msg_list.append('</tr>') # 结尾标识
mail_msg_list.append('</tbody>')
mail_msg_list.append('</table>') mail_msg=''.join(mail_msg_list) # 列表转为字符串HTML message = MIMEText(mail_msg, 'html', 'utf-8')
message['From'] = Header("任务监测", 'utf-8')
message['To'] = ','.join(receivers) subject = 'DS调度异常任务监控'
message['Subject'] = Header(subject, 'utf-8') try:
smtpObj = smtplib.SMTP()
smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号
smtpObj.login(mail_user, mail_pass) # 登陆
smtpObj.sendmail(sender, receivers, message.as_string()) # 发送
print('邮件发送成功')
except smtplib.SMTPException:
print('Error: 无法发送邮件') if __name__ == '__main__':
send_mail()

Send_Email.py

整合以上两个为一个shell脚本

#!/bin/bash

if [ ${#} -ne 1 ]
then
deal_day=$(date +"%Y-%m-%d")
else
deal_day=$1
fi echo ${day}
mysql -hip -P3306 -u用户 -p密码 -e"
use dolphinscheduler;
select a.name,
a.state,
a.submit_time,
a.start_time,
a.end_time,
CONCAT(TIMESTAMPDIFF(SECOND, a.start_time,a.end_time),'(s)') dur
from t_ds_task_instance a,
(
select name,
max(submit_time) submit_time
from t_ds_task_instance
group by name
) b
where a.name=b.name
and a.submit_time=b.submit_time
and substr(a.start_time,1,10)='${deal_day}'
and a.state not in(0,1,7)
union all
select a.name,
a.state,
a.submit_time,
a.start_time,
'-' end_time,
CONCAT(cast(TIMESTAMPDIFF(SECOND, a.start_time,current_timestamp)/60/60 as decimal(10,2)),'(h)') dur
from t_ds_task_instance a,
(
select name,
max(submit_time) submit_time
from t_ds_task_instance
group by name
) b
where a.name=b.name
and a.submit_time=b.submit_time
and substr(a.submit_time,1,10)='${deal_day}'
and a.state in(1,10,11)
and TIMESTAMPDIFF(SECOND, a.start_time,current_timestamp)>7200;
" > rwjk.txt # 发送邮件
n=`cat rwjk.txt|wc -l`
if [ $n -ge 2 ]
then
python rwjk_mail.py # 执行python,发送邮件
else
echo "无异常任务"
fi

rwjk.sh

执行结果

初识python 之 smtplib 发送(dolphinscheduler任务监测)邮件的更多相关文章

  1. Python+request+ smtplib 测试结果html报告邮件发送(上)《五》

    此方法通用适合所有邮箱的使用,只需注意几个点,如下: QQ邮箱.其他非QQ邮箱的写法,区别点如下: #--------------------------使用腾讯企业邮箱作为发件人的操作如下----- ...

  2. web端自动化——Python的smtplib发送电子邮件

    SMTP (Simple Mail Transfer Protocol)是简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. Python的smtplib模块提 ...

  3. 接口测试基础——第3篇smtplib发送带图片的邮件

    smtplib发送邮件最后一篇,发送带图片的邮件: 大家可以去廖雪峰的网站看一下,下面的代码就是我跟着博客写的,哈哈,大家即使不明白为什么,也要多写两遍,记在心里,如果有不明白的地方可以留言,船长会第 ...

  4. Python+request+ smtplib 测试结果html报告邮件发送(下)《六》

    目录结构如下: 1.cfg.ini的配置信息写法如下: [email] ;--------------------------使用腾讯企业邮箱作为发件人的操作如下------------------- ...

  5. 接口测试基础——第2篇smtplib发送带附件的邮件

    我先给大家补充一个用QQ发送纯文本电子邮件的代码,用QQ的朋友可以参考一下: # coding=utf-8 import smtplib from email.mime.text import MIM ...

  6. Python模块探秘 Smtplib发送带有各种附件的邮件

    这两天对Python的邮件模块比较感兴趣,于是就查了查资料.同时在实际的编码过程中也遇到了各种各样的问题.下面我就来分享一下我与smtplib的故事. 前提条件 我的上一篇博文里面讲解了,发送邮件必须 ...

  7. 利用Python+163邮箱授权码发送带附件的邮件

    背景 前段时间写了个自动爬虫的脚本,定时在阿里云服务器上执行,会从某个网站上爬取链接保存到txt文本中,但是脚本不够完善,我需要爬虫完毕之后通过邮件把附件给我发送过来,之前写过一个<利用Pyth ...

  8. python利用smtplib和MIMETYPE发送邮件

    # -*- coding:utf- -*- import smtplib from email.mime.text import MIMEText sender = '你的发送邮件' my_pass= ...

  9. python使用smtplib发送邮件

    python要实现发送邮件的功能,需要使用smtplib库. 1. 过程大致如下: 1. 建立和SMTP邮件服务器的连接 # 默认端口25 smtp = smtplib.SMTP(host, port ...

随机推荐

  1. windows 查看端口被占用,解除占用

    查看 (列举端口为2688) netstat -ano | findstr "2688" 解除 原文地址

  2. 【Linux】【专项突破】Linux重定向与管道

    [专项突破]Linux重定向与管道 This article is written by Xrilang(Chinese Name:萌狼蓝天) If you want find me ,You can ...

  3. JAVA日志发展史

    JAVA日志发展史 第一阶段 2001年以前,Java是没有日志库的,打印日志全凭System.out和System.err 缺点: 产生大量的IO操作同时在生产环境中无法合理的控制是否需要输出 输出 ...

  4. IOS开发入门教程-总结篇-写给狂热的编程爱好者们

    程序发轻狂,代码阑珊,苹果开发安卓狂!--写给狂热的编程爱好者们 写在前面的话 学习iOS应用程序开发已有一段时间,最近稍微闲下来了,正好也想记录一下前阶段的整个学习过程.索性就从最基础的开始,一步一 ...

  5. 使用 Nocalhost 开发 Kubernetes 中的 APISIX Ingress Controller

    本文作者:黄鑫鑫 - Nocalhost 项目核心开发者 腾讯云 CODING DevOps 研发工程师.硕士毕业于中山大学数据科学与计算机学院,曾负责过平安云主机及国家超算中心容器云平台等相关业务, ...

  6. [BUUCTF]REVERSE——helloword

    helloword 题目是安卓逆向.安卓逆向工具下载地址 用APKIDE打开附件,ctf+f调出检索版,检索main函数,能看到flag字符串 flag{7631a988259a00816deda84 ...

  7. Sentry 开发者贡献指南 - SDK 开发(性能监控)

    内容整理于官方开发文档 系列 Docker Compose 部署与故障排除详解 K8S + Helm 一键微服务部署 Sentry 开发者贡献指南 - 前端(ReactJS生态) Sentry 开发者 ...

  8. 【LeetCode】16. 3Sum Closest 最接近的三数之和

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:3sum, three sum, 三数之和,题解,lee ...

  9. 【LeetCode】48. Rotate Image 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  10. 【LeetCode】227. Basic Calculator II 解题报告(Python)

    [LeetCode]227. Basic Calculator II 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: h ...