©著作权归作者所有:来自51CTO博客作者fxl风的原创作品,请联系作者获取转载授权,否则将追究法律责任
一、shell脚本、统计cpu、内存、磁盘、I/O、连接数、历史登录用户、计划任务等信息(health_check.sh)
二、使用ansible批量执行并返回执行结果(systemcheck.yml)
- name: create dir file: path: /tmp/system_tmp state: directory mode: 0755 - name: copy cpu_mem.sh to remote machine copy: src: "health_check.sh" dest: /tmp/system_tmp/health_check.sh owner: root group: root mode: a+x remote_src: False - name: write cpu,Mem to /tmp/systeminfo.txt shell: "sh /tmp/system_tmp/health_check.sh" - name: store file into /tmp/checklog/ fetch: src: /tmp/system_tmp/systeminfo.txt dest: /tmp/checklog/ mode: 06441.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.
三、每台服务器返回的结果进行分析 并格式化输出
#!/usr/bin/python3.6 # -*- coding: utf-8 -*- import os import datetime import docx from docx import Document from docx.enum.text import WD_PARAGRAPH_ALIGNMENT from docx.shared import Pt from docx.shared import RGBColor now_time = datetime.datetime.now() # 当前时间 Result_file = "/usr/local/script/Health_check/hostcheck_result.docx" #检查结果存储文件 #读取ansible返回的主机信息,以文件存储 Path="/tmp/checklog/" Listdir=os.listdir(Path) #统计检查主机总数 Total_count = 0 #统计检查不通过主机数 Fail_count = 0 #统计检查不通过主机IP存入Fail_list列表 Fail_list=[] for Dir in Listdir: #循环目录,获取每个ansible返回的每个文件 File="/tmp/checklog/"+Dir+"/tmp/system_tmp/systeminfo.txt" with open(File,"r",encoding="utf-8") as f: for line in f: if "Check_Result:FAILED" in line: Fail_list.append(Dir) Fail_count = Fail_count + 1 Total_count = Total_count + 1 Title="系统健康检测报告" Check_user="封孝立" Check_time=now_time.strftime("%Y-%m-%d") Check_hosts=int(Total_count) Pass_host=int(Total_count)-int(Fail_count) Failed_host=int(Fail_count) # 声明一个word对象 doc = Document() #title Report_Title = doc.add_heading(Title, 0) # 设置Title水平居中 paragraph_format = Report_Title.paragraph_format paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER Checkinfo = ''' 检测人:%s 检测时间:%s 检测项:cpu、内存、磁盘、I/O、连接数、历史登录用户、计划任务 检测标准:cpu负载>Cpu_core*0.5,内存使用率>0.8 ,磁盘使用率>0.75, IO>util*0.8,ssh外网登录 检测主机总数:%d 检测通过主机数:%d 检测故障主机数:%d 故障主机IP列表: '''%(Check_user,Check_time,Check_hosts,Pass_host,Failed_host) #输入检测基本信息 Basic_info = doc.add_paragraph(Checkinfo) Fail_list = list(set(Fail_list)) #检查不通过去重IP for failip in Fail_list: Failip = doc.add_paragraph('').add_run(u''+failip.strip('n')) Failip.font.color.rgb = RGBColor(250,0,0) #分页 doc.add_page_break() for Dir in Listdir: #循环目录,获取每个ansible返回的每个文件 #将IP设置成标题,并修改字号 Ip_title=doc.add_heading('',0).add_run(u"HOST IP:"+Dir) Ip_title.font.size = Pt(20) File="/tmp/checklog/"+Dir+"/tmp/system_tmp/systeminfo.txt" with open(File,"r",encoding="utf-8") as f: for line in f: if "Check_Result:PASS" in line: paragraph = doc.add_paragraph('').add_run(u''+line.strip('n')) paragraph.font.size = Pt(12) paragraph.font.color.rgb = RGBColor(0,255,0) # paragraph.bold = True elif "Check_Result:FAILED" in line: paragraph = doc.add_paragraph('').add_run(u''+line.strip('n')) paragraph.font.size = Pt(12) paragraph.font.color.rgb = RGBColor(250,0,0) # paragraph.bold = True else: paragraph = doc.add_paragraph(line.strip('n')) doc.add_page_break() doc.save(Result_file)1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.66.67.68.69.70.71.72.73.74.75.76.77.78.79.80.81.82.83.84.85.86.87.88.89.90.91.92.93.94.95.96.97.98.99.100.101.102.103.104.105.106.107.108.109.110.111.
四、检测结果示例
赞 2收藏 评论 举报
相关文章
