四、Python3自动化运维——业务监控之文件对比
目标
通过业务监控模块的学习,更好的保障服务的稳定运行
业务监控模块监控方式
手工方式 - 系统命令,脚本命令
监控工具 - 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 ./*
正常的对比测试:
异常对比测试 - 参数不够
异常对比测试 - 文件无法读取
异常对比测试- 传递参数为空
相关文章
- [进阶] --- Python3 异步编程详解(史上最全篇)
- Python2中的urllib、urllib2和 Python3中的urllib、requests
- Python3 获取当前路径,当前文件名,当前文件名路径、指定import的文件路径、程序路径
- Python2和Python3中@abstractmethod的用法
- Mac下安装Python3
- Python3 PyMySQL 管理数据库详解
- linux python3 编译安装
- CentOS7安装python3
- 二、Python3自动化运维——IP地址处理模块IPy
- python3用BeautifulSoup抓取div标签
- python3用http.server模块搭建简易版服务器
- Linux下编译安装python3
- 【转载】 windows python3 安装 openai gym 的 atari_py
- 【第三周】Python3中的集合(Set)
- Centos安装Python3
- Python3中urllib详细使用方法(header,代理,超时,认证,异常处理)