?著作權(quán)歸作者所有:來自51CTO博客作者fxl風(fēng)的原創(chuàng)作品,請聯(lián)系作者獲取轉(zhuǎn)載授權(quán),否則將追究法律責(zé)任
一、shell腳本、統(tǒng)計cpu、內(nèi)存、磁盤、I/O、連接數(shù)、歷史登錄用戶、計劃任務(wù)等信息(health_check.sh)
二、使用ansible批量執(zhí)行并返回執(zhí)行結(jié)果(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.
三、每臺服務(wù)器返回的結(jié)果進(jìn)行分析 并格式化輸出
#!/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() # 當(dāng)前時間 Result_file = "/usr/local/script/Health_check/hostcheck_result.docx" #檢查結(jié)果存儲文件 #讀取ansible返回的主機(jī)信息,以文件存儲 Path="/tmp/checklog/" Listdir=os.listdir(Path) #統(tǒng)計檢查主機(jī)總數(shù) Total_count = 0 #統(tǒng)計檢查不通過主機(jī)數(shù) Fail_count = 0 #統(tǒng)計檢查不通過主機(jī)IP存入Fail_list列表 Fail_list=[] for Dir in Listdir: #循環(huán)目錄,獲取每個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="系統(tǒng)健康檢測報告" 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) # 設(shè)置Title水平居中 paragraph_format = Report_Title.paragraph_format paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER Checkinfo = ''' 檢測人:%s 檢測時間:%s 檢測項:cpu、內(nèi)存、磁盤、I/O、連接數(shù)、歷史登錄用戶、計劃任務(wù) 檢測標(biāo)準(zhǔn):cpu負(fù)載>Cpu_core*0.5,內(nèi)存使用率>0.8 ,磁盤使用率>0.75, IO>util*0.8,ssh外網(wǎng)登錄 檢測主機(jī)總數(shù):%d 檢測通過主機(jī)數(shù):%d 檢測故障主機(jī)數(shù):%d 故障主機(jī)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: #循環(huán)目錄,獲取每個ansible返回的每個文件 #將IP設(shè)置成標(biāo)題,并修改字號 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.
四、檢測結(jié)果示例
贊 2收藏 評論 舉報
相關(guān)文章