需求

监测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. 【保姆级教程】Ubuntu18.04+Geforce 980Ti+安装CUDA10.2+Cudnn

    首先感谢师兄的博客!前半部分按照这个照做没有问题! https://www.bilibili.com/read/cv9162965/ 第一步:下载CUDA 在官网下载,查询自己的GPU型号对应的CUD ...

  2. 深度解析Spring Cloud Ribbon的实现源码及原理

    Ribbon的核心作用就是进行请求的负载均衡,它的基本原理如下图所示.就是客户端集成Ribbon这个组件,Ribbon中会针对已经配置的服务提供者地址列表进行负载均衡的计算,得到一个目标地址之后,再发 ...

  3. Mysql资料 mysqldump

    目录 一.简介 备份过程 优缺点 命令使用 myisam引擎 二.安装 配置 日志 三.日常使用 备份全库 备份单个库(带建立库的语句) 备份单个库(不自动建立库) 备份表合集 从全备中恢复单个库 其 ...

  4. Jenkins安全加固

    1.jenkins未授权访问 描述 jenkins不当配置可导致未授权访问管理控制台,可以通过脚本命令行执行系统命令.通过该漏洞,可以后台管理服务,通过脚本命令行功能执行系统命令,如反弹shell,w ...

  5. 周期性任务(Project)

    <Project2016 企业项目管理实践>张会斌 董方好 编著 话说录入任务信息是件体力活,每个任务都是要一个字一个字码出来滴.要说一个项目文件,任务内容是主体,所以这作为体力活也不冤枉 ...

  6. 获取登录验证码失败及前后端不同域导致session丢失问题分析记录

    前言 前两周在把兄弟公司的几个服务部署到我们公司测试环境服务器的时候又遇到了不少问题,因为是前后端分离的项目,所以这次也同样遇到了跨域问题,解决方式也跟上一回的不一样,这里就再来分析记录一下. 登录验 ...

  7. java 编程基础 Class对象 反射 :数组操作java.lang.reflect.Array类

    java.lang.reflect包下还提供了Array类 java.lang.reflect包下还提供了Array类,Array对象可以代表所有的数组.程序可以通过使 Array 来动态地创建数组, ...

  8. yum安装curl支持http2

    yum 安装 安装 yum 源 rpm -ivh http://mirror.city-fan.org/ftp/contrib/yum-repo/city-fan.org-release-2-1.rh ...

  9. PDF 补丁丁开放源代码

    PDF补丁丁是一个多功能的 PDF 文档工具箱,在 2009 年开始,我开始了该程序的开发,到现在也已经有十二年了.它致力于解除 PDF 文档的烦恼,带有一个强大的 PDF 书签编辑器(可自动生成书签 ...

  10. JS验证身份证是否符合规则

    调用isIdCardNo(num)  验证通过返回true 错误返回false function isIdCardNo(num) { var factorArr = new Array(7, 9, 1 ...