背景:部署代码主机安装了hadoop client,为保证数据安全,禁止了主机外网,但是上面的监控程序需要发送外网告警邮件。
技术方案:使用3proxy软件在跳板机开通代理端口,smtplib使用代理发送邮件。
涉及软件:3proxy,socks介绍
socks安装
# 主机没有外网只能通过代理安装,代理IP使用时请自行更换
sudo pip --proxy=192.168.*.*:6667 install PySocks
代码改造
# 注意使用的端口为socks端口
if proxy:
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, '192.168.*.*', 6666)
socks.wrapmodule(smtplib)
测试示例(可以结合下面分享的Mail类分析)
# 不使用代理调用代码
mail = Mail(mail_host, mail_user, mail_pass)
mail(mailto_list, subject % (calc_date(date_id, offset), date_id), body, None)
# 执行结果
$ python hdfs_report.py 20170715
[INFO ] [2017-07-15 10:58:36] 初始化Jinjia2模板....
[INFO ] [2017-07-15 10:58:36] 初始化邮箱....
[ERROR] [2017-07-15 10:58:36] [Mail->__init__] --> errmsg:[Errno 101] Network is unreachable
[INFO ] [2017-07-15 10:58:36] 开始发送邮件....
[ERROR] [2017-07-15 10:58