标签:打印机 监控 zabbix result 自动更新 耗材 抄数
无监控不运维,这是至理名言;
zabbix的强大这里不言自明,今天教大家用它解决一个很常见的需求,解放运维的双手,启发大家的思路,如果你用心看到最后,一定有所收获:
先简单介绍下需求:
现在很多企业的打印机都是租赁的,因为买不如租,每月需要抄数,查看耗材的使用量,通知租赁商及时更换耗材,老板需要了解每月的打印量,如此等等;
如果一台多功能打印机还好说,那要是很多台呢?你是否有过下面的尴尬:
每月需要手动去打印机跟前打印纸质报表或者web登录打印机后台去查看印数和耗材使用量;
需要将耗材使用量和抄数发送给服务商出月结账单;
每月需要手动去统计使用情况做成报表给老板查阅;
耗材没有及时更换,导致断供延误工作致使部门使用人员大呼小叫,投诉抱怨;
由于和供应商签订的合同是额定印数是9K张/月,超出这个数目要另外付费,很多情况不是正常使用完的而是浪费完的,
要是在达到额定的印数80%就自动提示运维去及时审查异常的打印行为(或者老板直接下达这种需求),你存在的价值就凸显出来了;
那么zabbix可以帮到你:
但即便是使用zabbix也是要做一些技巧性的处理:
比如说,通过snmp直接采集的印数是打印机出厂到现在的累计值,而运维和老板需要看到每月的实际使用量(你不能指望老板拿着计算器去将两个月的抄数做减法),
所以每次抄数完毕后,需要将这个抄数清零;
打印机是服务商的,不可能每月都去给你清零,那么只能在zabbix上面动手脚,使用计算公式减掉当前的抄数来达到清零的目的,每个月都这么做也是一种痛苦;
所以耐心看到后面会介绍用脚本去自动完成。
第一步: 开启打印机的snmp服务,如果说现在企业设备没有snmp,我只能说它不想在IT界混了,小到家用路由器,大到百万的思科设备都有这个:
以我们公司的三星K3250NR打印机来说吧:
当然不嫌麻烦开启snmpv3也是可以;
登录zabbix创建监控主机:
通过查询打印机官方的SNMP MIB文档或者使用snmpwalk分析OID监控项(玩SNMP要是不会这些,下面也不用看了),找到需要的监控项键值:
监控墨粉耗材使用量:
监控当前累计印数(这个通常不能清零,否则供应商还吃什么)
查看数据采集情况:
这样打印机的一举一动就被监控起来了,但是手工活一点没少,我这人很懒,我连zabbix都不想去看,供应商我也不想去找,电脑能够自动完成的事干嘛要人去惦记?
我只想,每月头,它自动发送抄数和耗材使用情况给供应商并CC一份给我就好,遇到耗材低的时候自己出邮件通知供应商来上门更换。
哦,对了,三星高级打印机有自动定时发送报表邮件功能,但是,呵呵,这个安卓固件实在太烂,测试时候是成功的,过不了多久就罢工,真心没法儿指望;
对的,Linux的任务计划可以做到,每月一号自动抄数,耗材还好说,印数是个累计值,抄数完毕还要从当前抄数自动从零计数并反映到zabbix里面,这个就需要一点技巧;
这里使用zabbix 提供的API在抄数的同时,将当前累计抄数减掉并更新监控项,不要我每个月去手工改监控项:
对的,就是实现下面这个监控项的公式自动更新(我也是懒得可以):
上点干货,在linux下面创建一个python脚本,并加入crontab里面去定时运行:
# !/usr/bin/python3import smtplib,timefrom email.mime.text import MIMETextfrom email.header import Headerimport subprocess bill_month=time.strftime('%b', time.localtime()) check_time=time.strftime("%Y-%m-%d %H-%M-%S", time.localtime()) last_month = time.localtime()[1]-1 date = time.strptime(str(last_month),'%m') last_month=time.strftime('%m',date)def run_cmd(cmd): result_str='' process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) result_f = process.stdout error_f = process.stderr errors = error_f.read()if errors: pass result_str = result_f.read().strip()if result_f: result_f.close()if error_f: error_f.close()return result_str cmd = 'snmpwalk -v 1 -c public 192.168.130.25 .1.3.6.1.2.1.43.10.2.1.4.1.1' #根据自己的情况修改下参数 result = str(run_cmd(cmd)) print_count = ((result.split('Counter32: '))[1]).rstrip("'")print(print_count) cmd2 = 'snmpwalk -v 1 -c public 192.168.130.25 .1.3.6.1.4.1.236.11.5.1.1.3.22.0' result2 = str(run_cmd(cmd2)) SupplyUnit = ((result2.split('INTEGER: '))[1]).rstrip("'")#print(SupplyUnit) cmd3 ='/root/K3250NR/item_update.sh ' + print_count #这里调用外部shell脚本更新zabbix监控项 result3 = str(run_cmd(cmd3))#print(result3) title = "<table border='0' cellspacing='20' align='center' style='font-size:16px;word-break: keep-all'><tr><th colspan='2'><font face='verdana' color='green'>打印机每月抄数("+last_month+"月)</th></tr>" head = "<tr bgcolor='3F48CC'><th><font color='ffffff'>三星K3250NR打印机</font></th><th><font color='ffffff'>本 次 抄 数</font></th></tr>" sent_content ="<table bgcolor='E2FFC5' border='1' align='center' cellspacing='5'><tr><td>" + title + head +"<tr><td>打印机印数</td><td>" +print_count + '</td></tr><tr><td>墨粉仓剩余</td><td>'+ SupplyUnit +'%</td></tr></table></td></tr></table>' mail_host = "你的邮箱服务地址" mail_user = "发送的邮箱账号" mail_pass = "邮箱密码" sender = '发送的邮箱账号' receivers = ['自己的邮箱和供应商邮箱群组'] message = MIMEText(sent_content, 'html', 'utf-8') message['From'] = Header("Printer Admin", 'utf-8') message['To'] = Header("All IT Colleagues", 'utf-8') subject = '打印机每月抄数('+last_month+'月)' message['Subject'] = Header(subject, 'utf-8')try: smtpObj = smtplib.SMTP() smtpObj
标签:打印机,监控,zabbix,result,自动更新,耗材,抄数 来源: https://blog.51cto.com/u_175002/2707927
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。