00:00
那接下来呢,我们就进入到告警集成这个模块了啊,那该模块的主要功能呢,其实就是读取my circlel数据库当中的异常数据,也就是个表当中啊,超出规定上下线的统计结果啊,然后呢,将这个异常数据呢,通过邮件啊,或者是其他的方式通知给指定人员。啊,那为了方便呢,这个模块主要使用Python语言进行开发,那并且呢,会引用若干个这个Python库啊,那同样呢,该课程的重点是讲解架构和实现思路啊,那所以说Python的语法诶,以及一些Python库的使用呢,就不做过多说明了,由于我们现在啊需要使用Python去读取my circleql数据库当中的数据,对吧?那所以说我们需要先在每台节点去安装一下Python的MYSQL驱动啊,那Python的MYSQL驱动。啊,那其实就是一个RPM包啊,这个呢是它的下载地址啊,那下载下来之后呢,我们需要将其上传至每台服务器啊,那上传完之后呢,只需要执行一个RPM的安装命令就可以了,那当然呢,如果我们的服务器是可以联网的,我们也可以直接在线安装,那怎么在线安装?其实很简单,那只需要我们将RPM啊这个安装命令当中的啊,本地的RPM路径替换为RPM的下载地址就可以了。
01:23
那接下来我们去操作一下啊,那首先我把它的下载地址复制一下CTRLC啊,然后呢,来到102这些节点,哎,我们执行一个度RPM,然后呢杠IV啊,那后边呢,接上它的下载地址就可以了,然后直接回车。啊,那这时候呢,呃,它就会自动下载并且安装啊好,那102呢,已经安装完成了啊,那接下来我把这个命令复制一下啊,然后呢,去103和104分别执行一下来103。104。右键粘贴。好了,103和104也就都安装完成了啊,那至此呢,我们所需要的这个my circleq的驱动就安装完毕了,那接下来呢,我们去看一下这个模块的Python脚本的具体内容,好,那我们往下看啊,那实际上这个脚本的核心内容呢,就是这三个函数啊,那分别是read table one alert和mail alert啊,那接下来呢,我先简单给大家介绍一下每个函数的作用啊,那read table的作用呢,主要就是读取MYSQL数据库当中的异常数据。
02:27
那malert的作用呢,主要就使用子邮件的方式发送告警信息,那alert它的作用是什么呢?其实就是使用第三方告警平台瑞向云提供的告警方式发送告警信息,因为使用电子邮件发送告警信息呢,诶可能会存在接收不及时的问题,对吧?那这时候呢,我们就可以使用瑞象云提供的短信或者是电话等方式进行通知啊啊,那接下来呢,我们把这个脚本创建出来,然后一起看一下里边的具体内容。好,CTRLC把它的名字拿过来啊,这个名字呢,叫做check notification.py啊是一个Python文件来在这儿呢,我们右键,然后你有一个file,那CTRLV,那直接回车,那之后呢,我们把脚本的内容复制过来,那往下翻。
03:16
来到这个位置,CTRLCCTRLV,那接下来呢,我给大家解读一下这个脚本,首先这部分内容呢,是我们引入的一些第三方的Python库啊,那这里边比较重要的我们简单看几个啊,那第一个MY.connect那这个库的作用呢,就是连接my circle,然后呢,查询MY当中的数据啊,那再下走下边呢,还有一个SMTP啊,那这个库的主要作用呢,就是发送电子邮件啊,那再往下呢,还有ul和U,那这两个作用呢,就是发T。好了,那这就是我们引入的一些库啊,在这呢,就不再做过多的解释了啊,那接下来往下走啊,那下边呢,有一个小函数,这个小函数呢,叫做get yesterday,那其实通过这个函数的名字我们就能知道它的作用,对吧?作用是啥呀?其实就是计算前一天的日期。
04:09
啊,OK,那计算前一天的日期呢,我们用到了date这个第三方的库啊,那接下来我们继续往下走,那下边呢,就是我们三个核心数之一,也就是read table啊,那这个函数的作用我们刚才提到了,它就是干啥呀,是不是就是读取数据库当中的异常数据啊,对吧?那么所谓的异常数据呢,其实就是统计结果超出我们所规定的上下限的数据。那这个函数呢,需要接收两个数啊,那分别是tablet,那table呢,就是我们要读的啊,那DT就是我们要读的数的日期啊好,那接下来我们看一下这个函数的具体逻辑啊,来往下走,那首先呢,是一些my circle的必要参数,没错吧,这里边主要就是用户名,密码,主机名以及库名啊,OK,那当然呢,大家需要根据自己的实际情况做出相应的修改。
05:04
啊,这里边主要就是主机名,用户名和密码啊好,接下来往下走,那下边呢,我们使用my circle.connector这个库呢,来去获取了my circle的连接啊,当然获取连接的时候呢,我们需要给它传入MY的主机,MY的库名以及的用户名和密码。好,那完之后呢,我们已经拿到了MYSQL数据库的连接了啊OK,拿到连接之后,我们就可以查询咱们所需要的数据了啊在这儿呢,我们一共做了两个查询啊,一个查询是查询表头,那还有一个查询呢,是查询异常的数据。啊,那我们先看第一个查询,查询表头实际上获取的是什么信息呢?诶,其实就是每个字段的字段名啊,那我们最终返回的结果的形式就是这样的一个字段名的数组,这里边呢,有DT啊,Table column value等等这些其实就是我们每张表的字段名,OK,那这个结果呢,会被保存到he的这个变量当中啊,OK,那接下来往下走看第二一个,那第二一个呢,查询的是异常数据啊,也就我们刚刚提到的超出规定的上下限的数据。
06:13
对吧?那接下来我们先看一下它的查询的逻辑是什么啊,其实很简单,在这是不是执行一条SQL语句去查询异常数据啊,对吧?我们来看一下啊,那首先select星from啊,From谁from我们传输的表明没错吧,然后呢,是不是根据我们传输的日期去过滤了一部分数据,对吧?然后看后边,那后边呢是核心逻辑啊,来看一下,那其实很简单,就是value not between value mean和value max。那这样一来是不是咱就能够把统计结果超出规定范围的记录给拿到了呀,对吧?那拿到之后呢,我们就将其返回了啊注意最终返回之后啊,那它的形式是什么样的啊,那其实这个返回的结果形式是一个诶ta的集合啊top也就是原组没错吧?啊那这里边呢,每条记录就是一个ta一个云组啊那由于这里边可能会返回多条记录,那所以说呢,最终的结果诶是一个ta的集合啊OK,那这个呢,其实就是我们返回的结果的形式啊,大家简单看一下啊,那最外边有一个方块表示呢,这是一个集合对不对?那里边呢,每一个括号代表的就是一个语文组啊,也就是一条记录啊好,那这个最终的结果呢,诶会被保存到,诶这个fe out,这个变量当中啊,好,那这就是我们的第二一个查询啊,那紧接着我们往下走,那下边呢,我们又做了一个操作,什么操作呢。
07:34
我们为啊,查询出来的每条异常数据的值都加上了一个字段名啊,那从而呢,组成了一个字典数组啊,那这个最终的结果是什么样呢?我们来看一下啊,来一起看,那首先呢,最外层还是一个数组,没错吧,那数组里边的每个元素呢,仍然是异条异常记录,只不过呢,诶,这个异常记录呢,不再只有它的值了,那么除了值我们还有什么?还有与之对应的字段的名,也就相当是一个K。
08:02
对吧?啊,那KVKV,那是不是就是一个字典呀,对吧?那所以说我们最终将结果转成了一个字典数组啊,OK,那我们之所以要将这个结果转成字典数组的形式啊,主要是为了方便取数对吧?那如果说我们直接把查询结果返回出去,那我后边发送邮件的时候,我要想获取里边的值,那是不是只能根据下标去获取对吧?那这个其实不太方便啊,那为了更准确更方便呢,我们将其封装为一个字典数组,那后续呢,我们就可以根据字段名去获取对应的值了。啊,好,那这就是read table这个函数的最终返回结果,那read table这个函数呢,我们就讲完了,那接下来我们看下一个啊,那下一函数呢是alert,那这个函数的主要作用是什么?大家还记得吗?其实很简单,这个函数的主要作用就是集成第三方的告警平台瑞向云啊,然后呢,使用他提供的通知媒介发送告警信息。
09:01
啊,这个所谓的通知媒介呢,诶,就比如说是电话通知啊,短信通知啊,或者是其他的方式等等等等,OK,那接下来呢,我们再来看一下它的参数,实际上这个函数的参数只有一个啊,对吧?那这个LA指的是什么呢?很简单,其实就是一个等待通知的异常记录。比如说我们现在从MY数据库里边查出来了条异常记录,对吧?那这时候呢,我们就可以调用alert这个函数,然后呢,将这条异常记录传给他之后呢,他就会使用呃瑞向云提供的通知媒介,诶发送告警信息了,那接下来呢,我们看一下这个参数的格式啊,这个参数的格式呢,其实就是一个字典啊,那这个字典应该大家还有印象吧,这个字典我们是什么时候得到的呀?那是不是我们在read table那个函数当中将查询到了记录的值与查询到了记录的字段名进行合并而得到的呀?那所以说呢,这个one alert函数接收到的参数实际上就是我们前边所讲的read table这个函数的返回值当中的一个元素。
10:03
为什么这么说呀?哎,因为read table这个函数的返回值是一个什么,是一个字典的数组,而one alert这个函数呢,它需要接收的参数呢,是一个一个的字典,那所以说呢,这个one alert函数接收到的参数就是read table这个函数的返回值当中的一个元素,那最终我们是如何去调用这些函数的呢?其实很简单啊,我们会首先调用read table啊,然后呢,获取所有的异常记录啊,然后呢,我们便利异常记录对吧?然后再循环去调用one alert方法。像是这样的一个调用关系,那接下来呢,我们来看一下alert这个函数的具体逻辑,那大家要想看懂这个函数的逻辑啊,那必须得对瑞想云有所了解才可以啊,那接下来呢,我先简单给大家介绍一下瑞象云怎么使用啊,主要就是介绍如何与它进行集成啊,那现在呢,我们打开瑞向云的使用平台,然后呢,我们打开这个CA平台,这个CA呢,其实就是智能告警平台啊,那现在我们点一下。
11:04
那我们要想使用瑞象云去发送告警通知,那首先我们就得先做一个工作,就是集成啊,那在这儿呢,我们需要点击集成点,那点完之后呢,大家可以看到啊,其瑞向云它支持很多的监控工具啊,对吧?那在这儿呢,我们需要使用谁呢?我们需要使用通用集成,那它的通用集成个方式PI那所的,然后呢,我们按照它的要求往它的接口发送相应的请求,那之后呢,就能够触发在瑞向云当中配置的通知逻辑了,那这个email的集成方式呢,也比较简单啊,那瑞象云呢,会为我们提供一个电子邮箱的地址,那我们只需要呃,往这个电子邮箱里面发送相应的邮件,就会触发啊这个瑞向云当中的通知逻辑啊,OK,那在这儿呢,我们选用RACPI这种通用集成的方式啊,那现在我们点一下。
12:04
那首先在这儿我们需要先填入一个应用的名称啊,在这我们就叫做date super weather。好,那完了之后我们往下翻啊,下边有一个按钮叫做保存并获取应用K在这儿呢,我们需要点击保存。啊,大家注意观察啊,点完保存之后呢,此处会为我们生成一个K啊,那在我们后续发送的请求当中,就必须得携带这个K才可以,然后我们继续往下看啊,那下边呢,是对我们发送的请求的具体要求啊,那首先我们来看一下这儿啊,那这个接口呢,指的就是我们要发送请求的rest接口啊,那也就是我们的请求要发往的地址就是这个啊好,我们继续往下看,那下边呢,要求我们发送的请求方式为post请求啊那再往下呢,那下边呢是我们需要传入的各个参数啊OK,那下边呢,有一个参数列表,那这些参数当中呢,有些是B传的,有些呢是可选的,那在这儿呢,我们最终需要做的就是啊,像这个接口发送一个post请求啊,并且呢,携带这里边必要的一些参数。
13:10
那这个呢,就是CPI的集成方式,那接下来呢,我们再回过头来去看alert这个函数的具体逻辑啊,那我们往下走啊,那首先我们看这一段啊,那这段呢,相当于声明了两个变量对吧,一个是alert,一个呢是alert,那这两个变量呢,实际上对应的就是我们刚刚获到的appk,以及哎,这个RACPI的接口地址没错吧,那当然在这我们需要给它替换一下啊,那首先我们需要拿到这个appk,然后复制一下来放到这个位置。给他替换。CTRLV,那大家呢,也要做相应的替换啊,那之后呢,我们需要把这个RCPI接口的地址也给它替换一下,那我们现在呢,去获取一下,那就是这个位置来复制。好,那现在我们给他拿过来。来CTRLV,好,那这两个变量我们完成之后继续往下看啊,大家来看一下,那实际上下边呢,这有一个date对吧?这个date里边放的是啥?那其实就是我们刚刚在诶瑞向云这个界面上看到的,它要求我们传入的各个参数啊,那在这儿呢,我们需要按照它的格式要求去传入相应的参数,我们可以把这几个必要的参数截一下啊,然后呢,对照着去看一下,来F3我盯在这儿啊,那现在打开我们的代码啊,来我们一点点看啊,那首先我们先看第一个参数,第一个参数是不是就是APP啊对吧?其上这个APP呢,让我们传入的就是啥,就是我们刚才得到的那个K。
14:35
啊,那也是我们上面这个变量的值啊,好,那接下来继续往下走,那第二一个呢是event type,这个event type参数呢,一共有两个值,一个是trigger,一个是trigger呢指的是触发警告呢,是解决警告,那当然我们这应该是gger,没错吧,好,我们继续往下看啊,那再往下呢,是这个问的ID啊,这个问的ID在这呢,我们使用的是一个随机值啊好,我们继续往下走,下一个呢,还有一个alarm,其实就是一个告警标题啊,或者一个故障的简述啊,在这儿呢,我们通过拼接得到了一个标题,实际上这个标题的内容就是哪个表格出现了数据异常。
15:11
没错吧,好,那接下来往下走,下一个呢是alarm I content,这其实就是啥,就是告警内容的一个详情,那在这儿呢,我们也是通过拼接得到的啊,那这个拼接之后的具体内容应该是什么呢?哎,大致就是哪个指标,那它的值是多少啊,然后它的值应该为从多少到多少。那这个呢,就是我们告警的内容啊,好,我们再往下走,那再往下呢,还有一个priority,那这个呢,实际上就是一个告警级别,好了,那这就是我们入的若干参数啊,那参数完成之后我们继续往下走啊,那再往下呢,大家看这个位置,那此处呢,我们使用u lib和UR lib two啊去封装了一个posts的请求,并且呢,向瑞象云为我们提供的rest接口去发送这个请求啊,那请求只要发送到瑞象云啊,OK,那就会触发我们在瑞象云里边所配置的通知策略,然后这个通知策略啊,我们在之前学习阿兹卡班的时候就已经讲过了啊,因为我们当时将阿兹卡班与瑞象云也做了一个集成,对吧?啊,然后当时也演示了如何去配置瑞象云当中的通知策略了啊,那所以此处呢,就不再赘述了啊,那小伙伴如果忘记了,可以去翻看一下前面的视频。
16:24
那至此呢,哎,Alert这个函数的功能我们就介绍完了,那我们再继续往下看啊,那下面一个函数呢,是没有alert啊,这是我们的另一个核心函数对吧?那这个函数的功能是什么呀?很简单,就是使用电子邮件的方式,诶,发送告警信息啊,那我们还是先来看一下这个函数所接收到的参数是啥?其实它与刚才那个one alert函数接收的参数是不是一样的呀,对吧?也是一个等待通知的异常记录,然后这个参数的格式呢,仍然是一个字典啊,在这儿就不再赘述了啊好,我们继续往下看啊,那下边这几个参数呢,都是SMTP协议发送邮件的必要配置。
17:03
那这个呢,我们之前应该已经接触过了啊,好,那看一下里边的具体参数都有啥,那第一个呢,就是S的地啊,这个呢,大家需要改成自己用邮箱的S址啊,那下一个呢,是user user,其实就是我们发件人的邮箱啊,那再往下呢,这有一个passw,也就是当然这个密码并不是邮箱的密码,而是我们开启SMP服务之后生成的第三方授权码,这个大家要注意一下啊好,那大家呢,此处要根据自己的实际情况进行相应的修改啊好,我们再继续往下走,那下面呢,我们仍然是使用拼接的方式呢,得到了我们的告警内容啊,那拼接之后的最终结果其实就是啊,某个表格数据出现异常了。对吧?那某个指标的值是多少啊,那它应该是从多少到多少啊,OK,那这就是告警的内容,好,那我们继续往下看,那下边呢,诶又有两个变量,一个呢是ther,一个是receive ther呢在这指的就是发件人啊,那完了之后下边receivers呢指的就是收件人,然后大家要注意观察啊,Receivers这个变量呢,它是一个数组类型的,那也就是说呢,我们可以配置多个收件人啊,然后在这儿大家可以看到啊,咱现在的发件人和收件人是一样的,对吧?那大家在这儿呢,可以根据自己的实际情况进行相应的配置啊好,那我们继续往下走,那下边这段代码它的功能是什么呢?是将我们邮件的内容转成最终发送邮件的时候所需要的HTML格式,那当然呢,在这儿我们借用的是谁啊?
18:40
那借助的是我们前面引入的email这个第三方库,那我们再回到刚才的位置啊,那此处呢,我们将诶需要发送的告警内容转成了诶这个HTML的格式,那转完之后呢,我们就可以使用smtp live这个库呢去发送邮件了,OK,那这段代码呢,哎,就是发送邮件的逻辑,好了,那这个maillert的函数我们也就讲完了,好,那至此呢,我们的三个核心函数就都看完了啊大大家想一个问题啊,我们这函数现在是不是只是定义好了对吧?那你光定义它会执行吗?不会的,得调用才能执行,那我们到底是在哪调用的这些函数呢?我们继续往下看啊,大来拉到最底下来看这个位置。
19:22
那这个位置呢,其实是我们一个Python程序的入口啊,这个就相当于是我们Java当中的main方法,大家可以这样去理解一下啊,OK,那也就是说我们在执行这个脚本的时候呢,它就会去执行诶这个代码下边的逻辑啊,OK,那大家注意观察,在这个代码下面呢,咱是不是又调用了一个main方法呀,对吧?这个闷方法是谁?大家来注意观察啊,往上点大家看这这儿是不是我们定义了一个闷方法呀,对吧?这个闷方法的逻辑我们一会儿再看啊,那现在我们先看一下此处为闷方法传入的参数是什么。啊,那在这儿呢,我们是不是将C点啊二个V传给他了呀,对吧?这个C点二个V指的是什么啊,指的就是我们调用诶这个Python脚本的时候传入的命令行参数,这个大家一定要注意,大家在这儿呢,能够看到我们后期呢会为它传入两个命令函参数,那第一个参数呢,是告警类型,我们可以选择万或者是email,那如果是万呢,那我们选择的就是瑞向云,那如果是ma呢,选择的就是电子邮件啊。
20:22
那第二个参数呢,是一个日期啊,当然日期呢,我们可以不传,那如果不传呢,它会自己计算前一年的日期啊,好,然后还有一点要注意一下,就是我们在使用Python命令去执行一个Python脚本的时候啊,它会有一个固定的系统参数,那这个参数呢,实际上就是就是这个脚本本身啊,那也是,虽然我们这儿给它传的是两个参数,但实际上main方法最终接收到的参数呢,一共有三个,那第一个参数呢,就是脚本本身,那第二一个参数呢,才是我们传入的告警类型,那第三一个呢,才是这个日期。啊啊,这个一定要搞清楚啊,那接下来呢,我们去看一下这个main方法当中,它的具体逻辑是什么,来点回去看一下啊,那首先呢,在这儿我们先做了一个参数的判断,对吧?那先判断了一下参数的长度是否大于等于三啊,如果大于等于三,那就说明我们传入了日期参数。
21:14
没错吧,那我们就将日期参数的值赋予DT变量啊,那否则呢,否则就自动计算前一天的日期赋DT变量,然后呢,下边将告警级别这个参数呢设为了零啊好,那我们继续往下进行啊,那下边呢,是不是又做了一个参数长度的判断呀,对吧?那这次呢,我们判断的是啥?是它长度是否大于等于二,那也就是说去判断一下我们是否传入了告警方式这个参数。啊,对吧?啊,那如果我们传入了,传入了怎么办?那如果传入了,那它就将我们传入的值呢,作为一个字典的K啊,去获取对应的告警方式,比如说我们传入的是万,对吧?那如果是万的话,那这个二个V解析出来的值是不是就是万啊,对吧?那它获取到的就是啥?是不就是万这个K对应的value啊,没错吧,大家注意观察,这个是一个字典对吧?啊啊,那如果我们传的是mail,那它获取到的就是maillert啊完之后大家要注意啊,它将我们从字典当中获取的值是不赋予了alert这个变量了。
22:15
对吧,然后大家要注意啊,这个alert变量拿到的实际上是啥?实际上是我们前面的定义的这个mail alert或者是one alert这个函数啊,这个一定要理解一下啊好,那如果说我们没有传入啊这个告警数参数,那怎么办呢?那它的默认值就是alert,也就是说使用瑞向云。啊,OK,那现在我们总结一下啊,那刚才呢,我们做了两个参数的判断,那如果我们传入日期参数了啊,那DT变量呢,就会等于我们传入参数的值,如果没有传入日期,那是不是DT就等于昨天的日期,然后我们下边呢,又做了一个判断啊,啊就判断什么呢?判断我们是否传入了告警方式这个参数,那如果我们传入了啊,那它就会采用我们传入的这个告警方式,那如果没传呢?诶没传,那它使用的就是瑞象云这种告警方式,也就是它的默认值啊,就是象云。
23:07
好,那我们再继续往下进行,那现在呢,我们已经确定了告警方式以及读取数据的日期了啊,对吧?那接下来呢,诶,就可以去遍利这些表了,大家注意观察这些表是不是就是我们在MY当中创建的存储我们那个统计结果的每张表啊,对吧?Day on day啊,Week等等等等,OK,那在遍离这些表的时候呢,哎,他会去循环调用read table这个方法,那大还记得这个方法的作用吗?这个方法呢,它是不是会去读取这些表当中的异常数据,对吧?并且将所有的异常数据呢,以一个字典数组的形式返回。没错吧,那OK,那我现在呢,是不是就可以去遍历每张表返回的这个异常数据的数组啊?对吧?OK,那在便利这个结果的时候呢,是不是就可以使用alert这个方法去将我们得到的异常数据发送出去啊,对吧?啊,当然这个alert呢,那到底是alert还是呃,Mail alert这个呢,取决于我们传的参数啊,没错吧?OK,那这就是check notification这个Python脚本的全部内容啊好,我们最终总结一下,就是这个脚本咱最终怎么使用啊,其实很简单,这个脚本写完之后呢,我们要想使用怎么使用,我们只需要给它传入两个参数就可以了,对吧?第一个参数呢,就是告警类型啊,咱们传入的值呢,可以是万诶,也可以是mail,那第二个参数呢,就是啥?就是一个日期,OK,那他接收到这两个参数之后呢,就会根据我们传上的参数去选择诶对应的告警方式,哎,以及对应的数据日期啊。
24:37
这时候呢,他会去便利我们数据库当中的每张表去寻找异常数据,寻找到异常数据之后呢,诶,就会使用我们刚刚传入的告警方式,诶去往外边发送告警信息啊OK,那这就是这个脚本的使用方式。
我来说两句