• 贝温微信机器人是由贝温开发的第三方免费微信智能机器人,通过微信机器人,可以管理微信群及个人好友的相关事务,解放您的双手,就用贝温微信机器人!
  • 联系电话:

    400-6688-1193

  • 邮箱:

    Support@bewiner.cn

Author:大叔@运维部

0x00 关于运维

1.何为运维?

       运维(Operation and maintenance)一般是指对大型组织已经建立好的网络软硬件的维护,其中传统的运维是指信息技术运维(IT运维)。所谓IT运维管理,是指单位 IT 部门采用相关的方法、手段、技术、制度、流程和文档 等,对IT 运行环境(如软硬件环境、网络环境等)、IT 业务系统和 IT 运维人员进行的综合管理。

      以上是网上关于运维的一些概念。

      个人的理解运维就是为了最求一种稳定的结果,稳定又成为运维一切开始的基石。运维的一切工作都是围绕着稳定为努力的。无论你是搞网络还是搞系统,搞服务器硬件还是搞各种软件的,我们都在追求一种持续性的,高性能,可用的状态,这是我心中的运维。

运维者,高可用也。

2.运维都做什么工作?

       运维的工作太多太多,做的了水晶头,装的了系统,扛得动服务器,正所谓文能调优写脚本,武能布网修机器。

       说实话,接触运维没有多久,不过比较幸运的是从一个IDC的基础建设最后跟到了云服务的上线,这段经历也让自己能够接触运维的方面更加全面。

       从时间的顺序来讲,运维最早的工作是在机房建设方面,这方面主要集中在物理层面包括机房的整体建设,综合部署网线与电线,ups设计等等。机房建设之后属于部署阶段,这期间包括安装操作系统,数据库和各种软件,网络交换机,路由器的调试等等。部署结束之后就是管理期,管理一个复杂而且不断持续和迭代的过程。

3. 如何成为一个好的运维?

刘邦说:运筹帷幄之中,决胜千里之外。说的是张良子房。

我要说:运行维护之中,稳定千年之外。说的是每个运维。

       随着科技的不断发展,对我们运维也提高了要求,从最早运维界提出的DevOps再到最近半年Google提出的SRE。

       随着云的落地和docker的迅猛崛起,批量部署等自动化运维成为了运维的主流方向。

       DevOps无论逼格多高,其实它归根结底就是一套工具链,它代表了开发、运维、测试等环节之间的协作。

       常用的工具有Docker(容器化)、Jenkins(持续集成)、Vagrant(虚拟化平台)、Zabbix、Nagios、cacti和小米开源的OpenFalcon(监控工具)、OneAPM (性能分析)、ELK(日志分析)等等

       如果把DevOps看成是一串项链,上面的工具是项链上的珍珠,那么自动化就是在这一串串珍珠串接起来的一根线。

0x02 监控的自动化

       监控就想我们的眼睛,一个没有监控的运维就像一个身怀绝世武功的瞎子。功夫再高也怕飞刀。知己知彼不仅仅是运用在军事上,对于运维项目上也是需要知己知彼,才能立于不败之地。

       这是我工作中经常要用的一款监控工具,是一款态势感知的优秀平台。也是我日常工作中的得力助手。像大多数普通的监控一下该监控也支持邮件报警功能。但这个邮件报警功能还不是特智能。

       前段时间,看到了一篇有的文章,关于使用hubot和slack制作运维机器人的故事,突发奇想,搞个微信机器人来接受报警的系统是不是会更有意思?

1. 通过邮件协议获取邮箱里的邮件。

既然这样,说干就干。

0x03 获取邮件内容

       根据邮件协议从邮件服务器上获取邮件可以通过pop3和imap两种方法实现,最开始用的是poplib这个模块,不过后来发现imaplib这个模块功能更多。

首先导入imaplib。

import imaplib

使用IMAP4协议和用户名密码登录邮箱。

conn = imaplib.IMAP4(imapserver,143)

conn.login(username, password)

select选择邮箱INBOX是默认的收件箱。

conn.select("INBOX")

search搜索邮箱里的邮件 (None, ‘ALL’)表示全部。

state, data = conn.search(None, 'ALL')

设定两个变量分别获取state和data。

state 是从邮箱中返回的状态吗OK,代表已经获取成功。

data 返回的是一个数组,里面的数字对应着邮箱的邮件编号。

通过split()函数将data转变成list。

elist = data[0].split()

通过fetch获取邮件的内容。RFC822表示邮件按照RFC822的格式。

state,data=conn.fetch(elist[len(elist)-1],'(RFC822)')

得到一封MIME标准的邮件,只要对python的email模块其进行解析就可以。

首先导入email模块

import email

然后通过email.message_from_string将邮件内容转化成message对象。

msg=email.message_from_string(data[0][1])

通过get_payload(decode=True)获取邮件的内容。

msg_content=msg.get_payload(decode=True).decode('utf-8')

打印一下内容。

已经变成html格式啦。

0x04 解析出邮件文本内容

html获取文本主要有三种方式:

1. 正则表达式

2. Beautiful Soup 4

3. HTMLParser模块

分析html结构发现获取文本非常简单,使用python自带的HTMLParser模块即可。

from HTMLParser import HTMLParser

handle_starttag(tag, attrs) ,处理开始标签,比如

handle_data(data) ,处理数据,标签之间的文本

classMyHTMLParser(HTMLParser):  

def__init__(self):

    pass  

defhandle_starttag(self, tag, attrs):

    pass

defhandle_data(self,data):

    pass

通过分析前面的html代码发现,文本是从标签

开始的一直到结尾,这样只要能够匹配到第一个文本前的