从dmesg命令中检查nfs相关错误,dmesg命令nfs错误,#! /usr/bin/
文章由Byrx.net分享于2019-03-23 09:03:11
从dmesg命令中检查nfs相关错误,dmesg命令nfs错误,#! /usr/bin/
#! /usr/bin/python# 通过在dmesg命令输出中查找匹配nfs: (.*)来定位nfs错误# 由于dmesg命令输出不带时间戳,所以使用临时文件tmp_tag来定位上次已经检查过的行数# 当tmp_tag不存在,或者tmp_tag中的内容非法(无法转换成数字)生成新的tmp_tag之后脚本就退出# 以nagios插件的方式给出,修改print相关很容易改成其他方式import subprocessimport reimport sysimport os.pathclass Check_errorinfo_in_dmesg(): def __init__(self,target_info): self.target_info=target_info self.dmesg_desc='' self.alert_infos={} self.now_rows=0 self.last_rows=0 self.tmp_tag='/tmp/'+os.path.basename(sys.argv[0])+'.tag' def get_dmesg_output(self): command=['dmesg'] self.dmesg_desc=subprocess.Popen(command,stdout=subprocess.PIPE).stdout self.now_rows=len(self.dmesg_desc.readlines()) self.dmesg_desc=subprocess.Popen(command,stdout=subprocess.PIPE).stdout def get_display_string(self): return_message='' for ip in self.alert_infos: return_message=return_message+ip+':'+str(self.alert_infos[ip])+' - ' print(return_message) def exception_exit(self): with open(self.tmp_tag,'w') as tmp_file: tmp_file.write(str(self.now_rows)) sys.exit(2) def normal_exit(self): with open(self.tmp_tag,'w') as tmp_file: tmp_file.write(str(self.now_rows)) print('OK') sys.exit(0) def handle_lineno_in_tmpfile(self): try: with open(self.tmp_tag) as tmp_file: self.last_rows=tmp_file.read() self.last_rows=int(self.last_rows.strip()) except Exception: self.normal_exit() if self.now_rows==self.last_rows: print('OK') sys.exit(0) if self.now_rows-self.last_rows<0: self.normal_exit() def check_errorinfo(self): self.get_dmesg_output() self.handle_lineno_in_tmpfile() target_re=re.compile(self.target_info) line_number=1 for line_info in self.dmesg_desc: if line_number-self.last_rows<0: line_number+=1 continue line_infos=target_re.search(line_info) if line_infos: line_info=line_info.strip() try: self.alert_infos[line_infos.group(1)]+=1 except KeyError: self.alert_infos[line_infos.group(1)]=1 if self.alert_infos: self.get_display_string() self.exception_exit() else: self.normal_exit()if __name__ == '__main__': Check_errorinfo_in_dmesg('nfs: (.*)').check_errorinfo()#该片段来自于http://byrx.net
评论关闭