zl程序教程

您现在的位置是:首页 >  后端

当前栏目

四、Python3自动化运维——业务监控之文件对比

2023-09-11 14:16:24 时间

目标

通过业务监控模块的学习,更好的保障服务的稳定运行

业务监控模块监控方式

手工方式 - 系统命令,脚本命令
监控工具 - Cacti、Nagios、Zabbix、Prometheus、等等
监控平台 - 阿里云、华为云、等等

业务监控模块主要内容

文件内容差异对比 - 配置级别的变动
文件目录差异对比 - 文件级别的变动
电子邮件发送通知 - 变动后的通知应急
探测web服务质量 - 网站的访问效果

业务监控之文件对比

字符比对

基本语法

系统命令
diff - 比对文件内容是否一致
在这里插入图片描述
模块介绍
difflib – 实现字符串的差异对比,然后以版本控制风格进行输出

操作思路
1 传递文件内容,然后进行简单的行切割
2 创建Differ对象
3 在Differ对象的基础上,借助于compare方法将两个内容进行比较
4 结果以join的方式进行展示
在这里插入图片描述

注意:difflib模块自带,无需安装,可直接导入使用

简单实践

'''
字符对比 difflib
'''
import difflib

text1 = "ni hao a wo shi shui shui shui ni huan ying wo ma"
text2 = "ni hao A wo shi Shui shui shui ni huan ying wo ma"

text1_line = text1.splitlines()
text2_line = text2.splitlines()

# 3 文件内容比较
# 3-1 创建Differ对象
differ_object = difflib.Differ()

# 3-2 使用compare方法比较内容
diff_result = differ_object.compare(text1_line,text2_line)
# 3-3 拼接比较后的效果
result_message = "\n".join(diff_result)
print("字符对比结果:\n{}".format(result_message))

结果

字符对比结果:
- ni hao a wo shi shui shui shui ni huan ying wo ma
?        ^        ^

+ ni hao A wo shi Shui shui shui ni huan ying wo ma
?        ^        ^

格式比对1

基础知识

简介:
HtmlDiff()类的make_file()方法
– 生成美观的HTML文档

操作步骤:
1 传递文件内容,然后进行简单的行切割
2 创建Differ对象
3 在Differ对象的基础上,借助于compare方法将两个内容进行比较
4 直接查看生成的对比文件即可

对比效果:
1 颜色
2 统计

简单实践1

'''
字符对比 difflib
'''
import difflib

text1 = """ni hao a
wo shi shui shui shui ni
huan ying wo ma"""
text2 = """ni hao A   
        wo shi Shui shui shui 
        ni huan ying wo ma"""

text1_line = text1.splitlines()
text2_line = text2.splitlines()

# 3 文件内容比较
# 3-1 创建Differ对象
differ_object = difflib.HtmlDiff()
# 3-2 使用compare方法比较内容
diff_result = differ_object.make_file(text1_line,text2_line)
# 3-3 拼接比较后的效果
# print(diff_result)
with open("compare.html","w") as file:
    file.write(diff_result)

打开compere.html,结果
在这里插入图片描述

简单实践2

以表格样式进行查看

'''
字符对比 difflib
'''
import difflib

text1 = """ni hao a
wo shi shui shui shui ni
huan ying wo ma"""
text2 = """ni hao A   
        wo shi Shui shui shui 
        ni huan ying wo ma"""

text1_line = text1.splitlines()
text2_line = text2.splitlines()

# 3 文件内容比较
# 3-1 创建Differ对象
differ_object = difflib.HtmlDiff()
# 3-2 使用compare方法比较内容
diff_result = differ_object.make_table(text1_line,text2_line)
# 3-3 拼接比较后的效果

with open("diff_table.html","w") as file:
    file.write(diff_result)

打开html文件,结果
在这里插入图片描述

配置实践

实践需求

需求:
读取多个配置文件,通过HtmlDiff方式 比对文件的内容区别
操作思路:
1 准备两个Nginx软件配置文件
2 分别读取两个配置文件
3 读取内容
4 文件内容为空的基本判断
5 内容的比较
6 结果的输出

实践代码

准备两个配置文件
ngnix.conf1

server{
    listen 80;
    server_name www.sswang.com;
    location / {
        root /var/www/html;
        index index.html;
        try_files $uri $uri/ = 404;
    }
}

ngnix.conf2

server{
    listen 88;
    server_name www.sswang1.com;
    location / {
        root /var/www/html;
        index index.html;
        try_files $uri $uri/ = 404;
    }
}

测试代码

import difflib
import sys

# 1 准备两个Nginx软件配置文件
# 2 分别读取两个配置文件
# argv -- 命令行;argv[0] 脚本名,argv[1]是第一个参数,以此类推
try:
    textfile1 = sys.argv[1]
    textfile2 = sys.argv[2]
except Exception as e:
    print("报错信息如下:{}".format(e))
    print("使用方式:script_name filename1 filename2")
    sys.exit()
# 3 读取内容
def readfile(filename):
    try:
        with open(filename,"r") as f:
            text = f.read().splitlines()
            return text
    except Exception as error:
        print("读取文件错误:{}".format(error))
        sys.exit()
# 4 文件内容为空的基本判断
if textfile1 == "" or textfile2 =="":
    print("脚本的参数不允许为空,请检查")
    print("使用方式:script_name filename1 filename2")
    sys.exit()
# 5 内容的比较
# 5-1 读取文件
text1_line = readfile(textfile1)
text2_line = readfile(textfile2)
# 5-2 创建Htmldiff对象
diff_object = difflib.HtmlDiff()
# 5-3 对文件进行比较
diff_result = diff_object.make_file(text1_line,text2_line)
# 6 结果的输出
with open('ngnix_diff.html','w') as f:
    f.write(diff_result)

注意:
在虚拟环境中,创建文件和操作文件需要对应的权限。
sudo touch nginx_diff.html
sudo chown python.python ./*
正常的对比测试:
在这里插入图片描述
异常对比测试 - 参数不够
在这里插入图片描述
异常对比测试 - 文件无法读取
在这里插入图片描述
异常对比测试- 传递参数为空
在这里插入图片描述