自动采集编写(IT圈内巡检日志(一):人工巡检的制胜法宝)

优采云 发布时间: 2021-12-15 08:09

  自动采集编写(IT圈内巡检日志(一):人工巡检的制胜法宝)

  前言:先写

  如果只检查一两个库,则无需使用此方法。这种方式适用于获取大量的检测日志(比如使用脚本从服务器采集更多的服务器检测日志信息),一般我们需要一份拷贝来写报告,其中的内容检查日志需要填词然后分析,真的很累。

  一、前言:还需要人工检查吗?

  说到检验,很多人嗤之以鼻:现在监控产品遍布全球,比如Zabbix、Prometheus、Graphite等,还需要检验吗?

  答案是肯定的,更何况每个监控产品都有运维盲点。从知识库的使用来看,监控产品还是不能替代人工巡检的一些经验(当然,未来可能很快会被替代,但不知道什么时候)。当不规则的、异常的零星字符经过一个运维人员身边时,他敏锐的鬓角被拉长,眉毛扬起,大脑快速检索自己的知识库,用一个可能只有1%相似度的对比成功率,第一时间确定异常的基本原因,这已经是IT圈最常见的场景了。所以,必须强调的是,人工检查仍然是保证系统稳定性的最关键手段之一。在日常监控的基础上,保持一定的人工巡检频率,是保证稳定运行的法宝。

  二、以前的检验报告怎么写

  一般流程是这样的:

  第一步:进入用户系统采集信息。通常通过脚本、自动化采集和少量的手工劳动采集来完成。采集 脚本(或程序)是每个公司的秘密武器。他们检查同一个对象。90%的企业采集拥有相同的信息,剩下的10%是他们的“内部信息”。毕竟在一个专业修炼多年,掌握一些“核心技术”是理所当然的。

  第二步:根据用户系统分类或机器分类,各系统按一定格式出具检测报告。

  上报是运维人员最头疼的事。比如用户数据库系统有上百套,每套报表都要下发。从采集的日志文件,Ctrl+C,Ctrl+V,我把原来的日志采集复制到了检查报告中,非常不爽和痛苦。另外,采集的原木密密麻麻,久了眼睛不舒服。

  三、Python 帮忙写报告

  大概的概念:

  按照指定格式到客户端服务器上的采集日志(分隔符可自定义),将日志下载到本地,放到指定目录下,运行python程序自动生成word检测报告。

  它具有以下特点:

  1、 批量读取巡检日志文件,每个日志文件生成一个word文件,从日志文件名中截取word文件名。

  2、 可以先填写检查意见

  3、 还是需要打开文档,手动填写其他意见(毕竟这些意见是我们的财富,当然如果知识库功能用得好,就省略了)。

  安装python,安装pip,然后安装pip install python-docx,省略。

  第一步:导入包:

  import re # 正则表达式使用

  from docx import Document #word 文档使用

  import os #用于遍历目录

  从 docx.oxml.ns 导入 nsdecls #word 样式

  from docx.oxml import parse_xml # 文字样式

  步骤 2:定义四个函数。第一个函数:数字大小写转换函数:num_to_char

  该函数主要用于将阿拉伯数字转换为中文大写。例如,如果是一级标题,则使用“一、patrol content”,这是相对于“1、patrol content”的标准写法。

  代码显示如下:

  

  第二个函数:get_title函数

  这个功能就是检验项目的“标题功能”。例如,“检查文件系统”就是“主机文件系统检查”。毕竟我们不是歪的,标题应该还是中文的。

  

  第三个函数:get_knowledge知识库函数

  该函数为知识库函数,即当确定采集的结果存在一定问题时,利用知识库输出初步分析结果。其实对于动态比较和各种相似度分析,python是很擅长的,这里只是一个函数展示。

  

  第四个函数:list_dir

  该函数用于获取指定目录下的所有特定文件。比如这里指定的check*.log格式的文件就是要处理的文件。

  

  因为python代码有严格的缩进限制,所有截图都是给大家看的。部分代码源码网络。

  源码:由于编辑器的原因,以下可复现的代码没有出现缩进,请参考图片:

  第一个函数源码(参考):

  def num_to_char(num):

  """数字转中文"""

  数量 = str(数量)

  new_str = ""

  num_dict = {"0": u"0", "1": u"one", "2": u"二", "3": u"三", "4": u"四", "5 ": u"五", "6": u"六", "7": u"七", "8": u"八",

  "9": 你"九"}

  列表编号 = 列表(编号)

  # 打印(列表编号)

  舒 = []

  对于列表编号中的 i:

  # 打印(num_dict[i])

  shu.append(num_dict[i])

  new_str = “”.join(shu)

  # 打印(new_str)

  返回 new_str

  第二个函数的源码(参考):

  def get_title(flag_fg):# flag_fg是传入的分隔段,其实就是英文标题

  如果在 flag_fg 中“检查文件系统”:

  xj_title_hs ='主机文件系统检查'

  elif'Check CPU &MEM' in flag_fg:

  xj_title_hs ='CPU,内存检查'

  elif'Check ETH' 在 flag_fg 中:

  xj_title_hs ='网卡状态检查'

  elif'检查 /var/log/message' 在 flag_fg 中:

  xj_title_hs ='主机日志检查'

  elif'检查transparent_hugepage'在flag_fg:

  xj_title_hs ='LINUX系统透明大页面检查'

  elif'Check nr_hugepages' 在 flag_fg 中:

  xj_title_hs ='Linux系统大页面打开状态检查'

  elif'检查内存信息'在 flag_fg 中:

  xj_title_hs ='PLNOCHECK'

  ###...

  别的:

  xj_title_hs = flag_fg #防止无休止的英文标题很重要

  返回 xj_title_hs

  第三个函数源码(参考):

  def get_knowledge(str_input):

  str_output = [] # 如果什么都没有发现,首先输出和检查是正常的。

  str_output_text='检查正常'

  如果在 str_input 中“[always] madvise never”:

  str_output = ['Linux 没有关闭透明大页面。根据ORACLE安装要求,应该关闭透明大页面,提高ORACLE内存和IO读写性能','1111111']

  elif'always madvise [never]' 在 str_input 中:

  str_output = ['检查正常:Linux 已关闭透明大页面','000000']

  别的:

  str_output = ['检查正常','000000']

  返回 str_output

  #这个例子是静态比较。其实就是进行动态比较和各种相似度分析。Python非常擅长

  #知识库分析,应该能够区分正常检查结果和异常检查结果。本例中'000000'表示正常,'1111111'表示异常

  第四个函数源码(参考):

  def list_dir(file_dir):

  dir_list = os.listdir(file_dir)

  file_r = []

  对于 dir_list 中的 cur_file:

  # 准确获取一个txt的位置,并使用字符串拼接

  路径 = os.path.join(file_dir, cur_file)

  如果 cur_file.startswith("check") & path.endswith(".log"):

  file_r.append(路径)

  返回文件_r

  后续:主要功能介绍。主要功能实现文件读取、文件切分、词表操作等,是实现检查日志自动生成词文件的主要部门。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线