zabbix 프린터를 모니터링하고 자동으로 모니터링 항목을 업데이트

어떤 모니터링이는 지혜 운영 및 유지 보수하지 않습니다;

zabbix은 자명 여기에 강력한, 당신은 끝을보고 마음을 넣을 경우, 우리가 뭔가를 얻을 수 있어야합니다, 모든 사람의 아이디어에서 영감을 매우 일반적인 요구 사항 오늘, 운영 및 손의 해방의 유지 보수를 해결하기 위해 그것을 사용하는 방법을 가르쳐 :

간단히 요구 사항을 소개합니다 :

소모품의 사용을 볼 수 개월 스캐너 당, 임대보다 구입 임대인에게 소모품을 적시에 교체를 알리는 때문에 이제 많은 기업, 프린터를 임대하는, 보스 등등 월간 인쇄 볼륨을 알고, 필요;

다기능 프린터가 더 나은 경우, 말을하면 많은 유닛이 그? 혹시 다음과 같은 딜레마를 가지고있다 :

수동으로 종이 문이나 웹을 인쇄 할 수있는 프린터 앞에 갈 월간 필요 프린터 스풀 인쇄 작업 및 소모품 사용량을보기 위해서 접속;

우리는 스캐너 사용 및 서비스 제공 업체 하나의 월별 청구서를에 물품을 보낼 필요가;

월 사용 통계를 수동으로 대장 검사에 보고서를 만들 필요가;

공급 작업의 지연으로 이어지는 인사 부서는 불만에 대해 불평, 고함 오프 주도 대체되지;

계약의 체결 및 공급 업체 때문에 추가 요금이 수를 초과, 9K / 월 인쇄 실행되는 평가, 대부분의 경우는, 일반 폐기물의 사용이 종료되지만 완료되지 않습니다

정격 운영 및 유지 보수의 80 %에 도달 매수가 자동으로의 비정상적인 행동의 적절한 검토를 인쇄하라는 메시지가 표시됩니다 (또는 사장이이 수요에 직접 발행), 아웃 하이라이트에 당신의 존재의 가치를하는 경우;


그래서 zabbix 당신을 도울 수 있습니다 :

그러나 심지어 일부 까다로운을 zabbix의 사용과 거래 :

예를 들어, 직접 인수에 의해 SNMP 프린터 인쇄 작업은 현재 누적 값에 제공하고, 운영 및 유지 보수 보스는 실제 월별 금액 (당신이 보스 두 달 스캐너에 계산기를 들고 기대할 수 없습니다를 참조 할 필요가 뺄셈)

각 스캐너가 끝난 후 그래서, 스캐너를 클리어 할 필요가;

프린터는 서비스 제공 업체, 당신은 청산의 목적을 달성하기 위해, 다음 zabbix 만 손과 발이 위, 현재의 스캐너를 잃고 공식을 사용하는 각 달을 취소 갈 수있다, 우리는 또한 한 달에 일을 고통;

그래서 다시는 자동화하는 스크립트를 소개합니다 볼 인내심.


첫 번째 단계는 지금 ​​어떤 SNMP 사업 장비, 난 단지는 IT 분야에서 혼합 싶지 않다고 말할 수 있다면, 프린터 SNMP 서비스를 켜고, 작은 홈 라우터, 대형 장비의 시스코의 수백만이있다 :

예를 들어 우리 회사는 삼성 K3250NR 프린터로 :

.png를 그림

물론, 그것은 또한 SNMPv3을을 열 수있는 문제를했다 할 수 있습니다


zabbix은 모니터링 호스트를 만들 로그인 :

.png를 그림

通过查询打印机官方的SNMP MIB文档或者使用snmpwalk分析OID监控项(玩SNMP要是不会这些,下面也不用看了),找到需要的监控项键值:

监控墨粉耗材使用量:

.png를 그림

监控当前累计印数(这个通常不能清零,否则供应商还吃什么)

.png를 그림

查看数据采集情况:

图片.png

这样打印机的一举一动就被监控起来了,但是手工活一点没少,我这人很懒,我连zabbix都不想去看,供应商我也不想去找,电脑能够自动完成的事干嘛要人去惦记?

我只想,每月头,它自动发送抄数和耗材使用情况给供应商并CC一份给我就好,遇到耗材低的时候自己出邮件通知供应商来上门更换。

哦,对了,三星高级打印机有自动定时发送报表邮件功能,但是,呵呵,这个安卓固件实在太烂,测试时候是成功的,过不了多久就罢工,真心没法儿指望;

对的,Linux的任务计划可以做到,每月一号自动抄数,耗材还好说,印数是个累计值,抄数完毕还要从当前抄数自动从零计数并反映到zabbix里面,这个就需要一点技巧;

这里使用zabbix 提供的API在抄数的同时,将当前累计抄数减掉并更新监控项,不要我每个月去手工改监控项:

对的,就是实现下面这个监控项的公式自动更新(我也是懒得可以):

图片.png

上点干货,在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 [^"] + '

최종 효과는 메시지가 수신되는 것입니다 :

图片.png

zabbix 모니터링 항목은 자동으로 카운트를 업데이트 :

图片.png

grafana 수에 볼 수있는이의 흔적을 지워집니다 :

图片.png

또한 즉시 공급 업체에 통보 소모품 부족 및 경보 메시지의 사용에 관심이있을 수 있습니다,이 zabbix를위한 케이크 한 조각 아닌가요?

图片.png


추천

출처blog.51cto.com/kingda/2425706