用python发送表格数据到邮箱

前言:运维工作中,我们经常需要将一些数据每天自动的发送到邮箱,比如网站的pv/uv、网站的状态码统计,或是一些其他日常监控数据的统计等,为了更方便的查看,我们采取用表格形式发到邮箱,这样既清晰有直观。

1、数据准备

  • 我写了一个shell统计脚本,用于统计各个网站的状态码数量,刚开始是直接输出结果,后来为了方便python拿数据,于是稍作修改,代码如下:
#!/bin/bash
#
index_name=logstash-$(date -d "-1 day -8 hour" "+%Y.%m.%d") 
#网站换成自己的网站,数据实际是通过elk收集,通过查询生成的json
for server in www.baidu.com www.360.com www.jd.com www.taobao.com
do
  sed -i "14 s#\"query\": \".*\",#\"query\": \"$server\",#" vd-23.json  #2xx和3xx状态码
  sed -i "14 s#\"query\": \".*\",#\"query\": \"$server\",#" vd-45.json  #4xx和5xx状态码
  sed -i "11 s#\"query\": \".*\",#\"query\": \"$server\",#" vd-all.json  #总数
#
  t2_count=`curl -s -XPOST  -H 'content-type: application/json' -d@/data/sh/vd-23.json http://www.elk.com:9200/${index_name}/_search?search_type=count|jq ".hits.total"`
  f4_count=`curl -s -XPOST  -H 'content-type: application/json' -d@/data/sh/vd-45.json http://www.elk.com:9200/${index_name}/_search?search_type=count|jq ".hits.total"`
  all_count=`curl -s -XPOST  -H 'content-type: application/json' -d@/data/sh/vd-all.json http://www.elk.com:9200/${index_name}/_search?search_type=count|jq ".hits.total"`
#
#变量本来是分开打的,后来改成全打在一行,其实可以考虑打成json格式,python更容易取
echo -n "$t2_count,`echo "$t2_count $all_count"|awk '{printf "%.4f%\n",$1/$2*100}'`,$f4_count,`echo "$f4_count $all_count"|awk '{printf "%.4f%\n",$1/$2*100}'`,$all_count,"
done

得到的数据是一堆用 , 连起来的数据,如下

11038332,91.0479%,1632,0.0135%,12123654,8143047,99.9921%,643,0.0079%,8143690,4558407,99.9964%,165,0.0036%,4558572,8336274,99.9991%,79,0.0009%,8336353,

2、分析数据

  • os.popen执行shell
import os
a=os.popen("bash /data/sh/md_sla.sh").read()
print a.strip('\n').split(',')

得到一串list
取值直接用list的方式取

3、取值并发送邮件

#!/usr/bin/env python
#coding:utf8
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email import encoders
import sys
import os
from datetime import *
#
def send_mail(to_list, sub):
        me = mail_user 
        msg = MIMEMultipart()
        msg['Subject'] = sub
        msg['From'] = me
        msg['To'] = ",".join(to_list)
#创造数据
        a=os.popen("bash /data/sh/md_sla.sh").read().strip('\n').split(',')

        #构造html
        d = datetime.now()
        dt = d.strftime('%Y-%m-%d %H:%M:%S')
        at = (d - timedelta(1)).strftime('%Y-%m-%d %H:%M:%S')
        timezone  = at + ' ~ ' + dt
#构造html
        html = """\
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>萌店AB环境</title>
<body>
<div id="container">
  <p><strong>萌店sla状态统计</strong></p>
  <p>采集时间: """ + timezone + """</p>
  <div id="content">
   <table width="500" border="2" bordercolor="red" cellspacing="2">
  <tr>
    <td><strong>站点</strong></td>
    <td><strong>总访问量</strong></td>
    <td><strong>正常数</strong></td>
    <td><strong>正常百分比</strong></td>
    <td><strong>异常数</strong></td>
    <td><strong>异常百分比</strong></td>
  </tr>
  <tr>
    <td><a href="http://log.xxx.com/#/dashboard/file/node.json">node</a></td>
    <td>""" + a[4] + """</td>
    <td>""" + a[0] + """</td>
    <td>""" + a[1] + """</td>
    <td>""" + a[2] + """</td>
    <td>""" + a[3] + """</td>
  </tr>
  <tr>
    <td><a href="http://log.xxxlcom/#/dashboard/file/api.json">api</a></td>
    <td>""" + a[9] + """</td>
    <td>""" + a[5] + """</td>
    <td>""" + a[6] + """</td>
    <td>""" + a[7] + """</td>
    <td>""" + a[8] + """</td>
  </tr>
  <tr>
    <td><a href="http://log.xxx.com/#/dashboard/file/mapi.json">mapi</a></td>
    <td>""" + a[14] + """</td>
    <td>""" + a[10] + """</td>
    <td>""" + a[11] + """</td>
    <td>""" + a[12] + """</td>
    <td>""" + a[13] + """</td>
  </tr>
  <tr>
    <td><a href="http://log.xxx.com/#/dashboard/file/yunying-sla.json">yunying</a></td>
    <td>""" + a[19] + """</td>
    <td>""" + a[15] + """</td>
    <td>""" + a[16] + """</td>
    <td>""" + a[17] + """</td>
    <td>""" + a[18] + """</td>
  </tr>
</table>
  </div>
</div>
<p><strong>点击站点名可查看详细表图</strong> </p>
</div>
</body>
</html>
        """
        context = MIMEText(html,_subtype='html',_charset='utf-8')  #解决乱码
        msg.attach(context) 
        try:
                send_smtp = smtplib.SMTP()
                send_smtp.connect(mail_host)
                send_smtp.login(mail_user, mail_pass)
                send_smtp.sendmail(me, to_list, msg.as_string())
                send_smtp.close()
                return True
        except Exception, e:
                print str(e)[1]
                return False
if __name__ == '__main__':
    # 设置服务器名称、用户名、密码以及邮件后缀
    mail_host = 'mail.126.com'
    mail_user = 'aaa@126.com'
    mail_pass = 'e123131da'    
    #mailto_lists = sys.argv[1]
    #mailto_list = mailto_lists.split(',')   #发送多人
    #sub= sys.argv[2]
    mailto_list = ['763836801@qq.com',]
    sub= "状态sla"
    #send_mail(mailto_list, sub)
    if send_mail(mailto_list, sub):
            print "Send mail succed!"
    else:
            print "Send mail failed!"
  • 发送结果如下:
Paste_Image.png

好了,结束,做个计划任务

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容