어떤 모니터링이는 지혜 운영 및 유지 보수하지 않습니다;
zabbix은 자명 여기에 강력한, 당신은 끝을보고 마음을 넣을 경우, 우리가 뭔가를 얻을 수 있어야합니다, 모든 사람의 아이디어에서 영감을 매우 일반적인 요구 사항 오늘, 운영 및 손의 해방의 유지 보수를 해결하기 위해 그것을 사용하는 방법을 가르쳐 :
간단히 요구 사항을 소개합니다 :
소모품의 사용을 볼 수 개월 스캐너 당, 임대보다 구입 임대인에게 소모품을 적시에 교체를 알리는 때문에 이제 많은 기업, 프린터를 임대하는, 보스 등등 월간 인쇄 볼륨을 알고, 필요;
다기능 프린터가 더 나은 경우, 말을하면 많은 유닛이 그? 혹시 다음과 같은 딜레마를 가지고있다 :
수동으로 종이 문이나 웹을 인쇄 할 수있는 프린터 앞에 갈 월간 필요 프린터 스풀 인쇄 작업 및 소모품 사용량을보기 위해서 접속;
우리는 스캐너 사용 및 서비스 제공 업체 하나의 월별 청구서를에 물품을 보낼 필요가;
월 사용 통계를 수동으로 대장 검사에 보고서를 만들 필요가;
공급 작업의 지연으로 이어지는 인사 부서는 불만에 대해 불평, 고함 오프 주도 대체되지;
계약의 체결 및 공급 업체 때문에 추가 요금이 수를 초과, 9K / 월 인쇄 실행되는 평가, 대부분의 경우는, 일반 폐기물의 사용이 종료되지만 완료되지 않습니다
정격 운영 및 유지 보수의 80 %에 도달 매수가 자동으로의 비정상적인 행동의 적절한 검토를 인쇄하라는 메시지가 표시됩니다 (또는 사장이이 수요에 직접 발행), 아웃 하이라이트에 당신의 존재의 가치를하는 경우;
그래서 zabbix 당신을 도울 수 있습니다 :
그러나 심지어 일부 까다로운을 zabbix의 사용과 거래 :
예를 들어, 직접 인수에 의해 SNMP 프린터 인쇄 작업은 현재 누적 값에 제공하고, 운영 및 유지 보수 보스는 실제 월별 금액 (당신이 보스 두 달 스캐너에 계산기를 들고 기대할 수 없습니다를 참조 할 필요가 뺄셈)
각 스캐너가 끝난 후 그래서, 스캐너를 클리어 할 필요가;
프린터는 서비스 제공 업체, 당신은 청산의 목적을 달성하기 위해, 다음 zabbix 만 손과 발이 위, 현재의 스캐너를 잃고 공식을 사용하는 각 달을 취소 갈 수있다, 우리는 또한 한 달에 일을 고통;
그래서 다시는 자동화하는 스크립트를 소개합니다 볼 인내심.
첫 번째 단계는 지금 어떤 SNMP 사업 장비, 난 단지는 IT 분야에서 혼합 싶지 않다고 말할 수 있다면, 프린터 SNMP 서비스를 켜고, 작은 홈 라우터, 대형 장비의 시스코의 수백만이있다 :
예를 들어 우리 회사는 삼성 K3250NR 프린터로 :
물론, 그것은 또한 SNMPv3을을 열 수있는 문제를했다 할 수 있습니다
zabbix은 모니터링 호스트를 만들 로그인 :
通过查询打印机官方的SNMP MIB文档或者使用snmpwalk分析OID监控项(玩SNMP要是不会这些,下面也不用看了),找到需要的监控项键值:
监控墨粉耗材使用量:
监控当前累计印数(这个通常不能清零,否则供应商还吃什么)
查看数据采集情况:
这样打印机的一举一动就被监控起来了,但是手工活一点没少,我这人很懒,我连zabbix都不想去看,供应商我也不想去找,电脑能够自动完成的事干嘛要人去惦记?
我只想,每月头,它自动发送抄数和耗材使用情况给供应商并CC一份给我就好,遇到耗材低的时候自己出邮件通知供应商来上门更换。
哦,对了,三星高级打印机有自动定时发送报表邮件功能,但是,呵呵,这个安卓固件实在太烂,测试时候是成功的,过不了多久就罢工,真心没法儿指望;
对的,Linux的任务计划可以做到,每月一号自动抄数,耗材还好说,印数是个累计值,抄数完毕还要从当前抄数自动从零计数并反映到zabbix里面,这个就需要一点技巧;
这里使用zabbix 提供的API在抄数的同时,将当前累计抄数减掉并更新监控项,不要我每个月去手工改监控项:
对的,就是实现下面这个监控项的公式自动更新(我也是懒得可以):
上点干货,在linux下面创建一个python脚本,并加入crontab里面去定时运行:
# !/usr/bin/python3 import smtplib,time from email.mime.text import MIMEText from email.header import Header import 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.connect(mail_host, 25) smtpObj.login(mail_user, mail_pass) smtpObj.sendmail(sender, receivers, message.as_string()) print("sent success") except smtplib.SMTPException: print("Error: sent faild")
贴上
item_update.sh
token=$(./zabbix_api.sh) #这里又调用外部脚本zabbix_api.sh去获取API的token ,下面如果连itemid都不知道怎么改也就不用玩zabbix了 ZBX='zabbix服务器的IP地址' params="last(\"K3250NR:prtMarkerLifeCount\")-'$1'" curl -s -X POST -H 'Content-Type:application/json' -d ' { "jsonrpc": "2.0", "method": "item.update", "params": { "itemid": "39311", "params": "last(\"K3250NR:prtMarkerLifeCount\")-'$1'" }, "id": 2, "auth": "'$token'" }' http://$ZBX/api_jsonrpc.php
贴上
zabbix_api.sh
#! / 빈 / bash는 관리자 = 관리자 #zabbix用户 = zabbix #密码통과 ZBX = 'xxxx를'#의 zabbix 서버를的IP地址 컬 -s -X POST -H '콘텐츠 유형 : 응용 프로그램 / JSON은'-d ' { "JSONRPC": "2.0", "방법": "user.login", "PARAMS": { "사용자": " '$ 관리자'", "비밀번호": " '$ 패스'" }, "ID" 1, "인증"널 (null) } 'HTTP : //$ZBX/api_jsonrpc.php | 그렙 -PO'결과 [ "] + \ K [^"] + '
최종 효과는 메시지가 수신되는 것입니다 :
zabbix 모니터링 항목은 자동으로 카운트를 업데이트 :
grafana 수에 볼 수있는이의 흔적을 지워집니다 :
또한 즉시 공급 업체에 통보 소모품 부족 및 경보 메시지의 사용에 관심이있을 수 있습니다,이 zabbix를위한 케이크 한 조각 아닌가요?