python运维开发 业务服务监控详解

        业务监控是运维体系中最重要的环节,是保证业务服务质量的关键手段,python在监控方面提供了大量的第三方工具,可以帮助我们快速、有效的开发企业级服务监控平台

一、文件内容差异对比方法

difflib作为python的标准库模块,无需安装,作用是对比文本之间的差异,且支持输出可读性比较强的HTML文档,与linux下的diff命令相似。我们可以使用difflib对比代码、配置文件的差别,在版本控制方面是非常有用。Python2.3或更高版本默认自带difflib模块,无需额外安装

两个字符串的差异对比
import difflib
# 定义字符串1
text1 = """text1:
This module provide classes and functions for comparing sequences.
including HTML and context and unifed diffs.
difflib document v1.0
add string
"""
text1_lines = text1.splitlines()    # 以行进行分割,以便进行对比
# 定义字符串2
text2 = """text2:      
This module provide classes and functions for comparing sequences.
including HTML and context and unifed diffs.
difflib document v2.0
add string
"""
text2_lines = text2.splitlines()
d = difflib.Differ()   # 创建Differ()对象
diff = d.compare(text1_lines,text2_lines)   # 采用compare方法对字符串进行比较
print('\n'.join(list(diff)))

 采用Differ()类对两个字符进行比较,另外difflib

的SequenceMacher()类支持任意类型序列的比较,HtmlDiff()类支持将比较输出为HTML格式

 生成美观的对比HTML格式文档

采用HtmlDiff()类的make_file()方法就可以生成美观的HTML文档,对上米昂代码进行修改

d = dofflib.Differ()
diff = d.compare(test1_lines,text2_lines)

替换成

d = difflib.HtmlDiff()
print(d.make_file(text1_lines),text2_lines)

对比nginx配置文件差异

当我们维护多个Nginx配置时,时常会对比不同版本配置文件的差异,使运维人员更加清晰的了解不同版本迭代后的更新项,实现的思路是读取两个需对比的配置文件,再以换行作为分隔符,调用difflib.HtmlDiff()生成HTML格式的差异文档。

#! /usr/bin/bash
import difflib
import sys

try:
    textfile1 = sys.argv[1]  # 第一个配置文件参数路径
    textfile2 = sys.argv[2]  # 第二个配置文件参数路径
except Exception as e:
    print("Error:"+str(e))
    print("Usage:simle3.py filename1 filename2")
    sys.exit()

def readfile(filename):    # 文件读取分隔函数
    try:
        fileHandle = open (filename,'rb')
        text=fileHandle.read().splitlines()  #读取后以进行分隔
        fileHandle.close()
        return text
    except IOError as error:
        print("Read file Error:"+str(error))
        sys.exit()

if textfile1==""or textfile2=="":
    print("Usage:simple3.py filename1 filename2")

text1_lines = readfile(textfile1)   # 调用readfile函数,获取分隔后的字符串
text2_lines = readfile(textfile2)
d = difflib.HtmlDiff()  # 创建HtmlDiff()类对象
print("d.make_file(text1_line,text2_lines)") #通过make_file方法输出HTML格式的对比结果

文件与目录差异对比方法

        当我们进行代码审计或效验备份结果时,往往需要检查原始与目标目录的文件一致性,Python的标准库已经自带了满足此需求的模块filecmp。filecmp可以实现文件,目录、遍历子目录的差异对比功能。比如报告中输出目标目录比原始多出的文件或子目录,及时文件同名也会判断是否为同一个文件(内容级对比)模块自带  无需安装

filecmp提供了三个操作方法,分别为cmp(单文件对比)、cmpfiles(多文件对比)、dircmp(目录对比),

单文件对比,采用filecmp.cmp(f1,f2[,shallow])方法,比较文件名为f1和f2的文件,相同返回True,不相同返回False,shallow默认为True,意思是只根据os.stat()方法 返回的文件基本信息进行对比,比如最后访问时间、修改时间、状态改变时间等,会忽略文件内容的对比。当shallow为False时,则os.stat()与文件内容同时进行效验

dircmp提供了三个输出报告的方法:

  1. report(),比较当前指定目录中的内容
  2. report_partial_closure(),比较当前指定目录及第一级子目录中的内容
  3. report_full_closure(),递归比较所有指定目录的内容

import filecmp
a = ""
b = ""
dirobj = filecmp.dircmp(a,b,['test.py'])

  • 25
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值