无监控不运维,这是至理名言;

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,time
from email.mime.text import MIMEText
from email.header import Header
import subprocessbill_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.stdouterror_f = process.stderrerrors = error_f.read()if errors: passresult_str = result_f.read().strip()if result_f:result_f.close()if error_f:error_f.close()return result_strcmd = '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
#!/bin/bash
admin=Admin #zabbix用户
pass=zabbix #密码
ZBX='x.x.x.x' #zabbix-server的ip地址
curl -s -X POST -H 'Content-Type:application/json' -d '
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "'$admin'",
"password": "'$pass'"
},
"id": 1,
"auth": null
}' http://$ZBX/api_jsonrpc.php|grep -Po 'result[" :]+\K[^"]+'

最后的效果是,收到邮件:

zabbix的监控项也自动更新了计数:

在grafana里面可以看到计数被清零的痕迹:

有兴趣还可以做个耗材低使用量自动报警并邮件即时通知供应商,这个对于zabbix不是小菜一碟?

以上,是我认为最简单的方式,当然你不嫌麻烦,全部使用python去完成zabbix的API调用也是可以,这里写了几个简单的函数供大家参考:

import json
import urllib.request def post_request(data):url = 'http://zabbix服务器IP/api_jsonrpc.php'header = {'Content-Type': 'application/json'}request = urllib.request.Request(url, data, header)result = urllib.request.urlopen(request)response = json.loads(result.read().decode('utf-8'))result.close()return responsedef authid(user,password):data = json.dumps({"jsonrpc": "2.0","method": "user.login","params": {"user": user,"password": password},"id": 1})authid = post_request(data.encode('utf-8'))try:return authid['result']except KeyError:print('用户名或密码错误')exit()def get_hosts():token = authid('Admin','prosperous')data = json.dumps({"jsonrpc": "2.0","method": "host.get","params": {"output": ["hostid","host"],"selectInterfaces": ["interfaceid","ip"]},"id": 2,"auth": token})result = post_request(data.encode('utf-8'))login_out(token)return result['result']def login_out(token):data = json.dumps({"jsonrpc": "2.0","method": "user.logout","params": [],"id": 1,"auth": token})try:post_request(data.encode('utf-8'))['result']print('认证信息已注销!')except:print('认证注销失败!!')# exit()     当然token注销失败对监控项更新不会有影响所以不要跳出程序,这里注销掉,有强迫症的可以取消注释def Item_update(print_count):token = authid('Admin','password')   #登录API获取tokendata = json.dumps({"jsonrpc": "2.0","method": "item.update","params": {"itemid": "39311","params": "last(\"K3250NR:prtMarkerLifeCount\")-" + print_count},"auth": token   ,        "id": 2})try:result=post_request(data.encode('utf-8'))['result']print('更新成功!')except:print('更新失败!!')login_out(token)   #退出API注销token, 做人要有始有终return resultprint(Item_update())

任何东西都是抛砖引玉,一个打印机可以做到这步,我认为监控你们家电饭煲,冰箱,热水壶,智能家电,智能门锁都不在话下,

我试过将香港机房的一台服务器的数据采集端口映射到公网并通过大陆的zabbix去收集数据来达到不需要×××跨越国际网络来监控的目的

当然,这其中还要考虑很多问题,比如延时,稳定,安全,还有非固定IP等问题,但是以目前提速的光纤还有双边防火墙做好ACL控制,一切都不在话下。

思维决定格局,zabbxi本身的就很强大,配合shell和python脚本定会如虎添翼。

zabbix监控打印机并自动更新监控项相关推荐

  1. Linux Zabbix——zabbix可视化、监控模板配置、自定义监控参数、自动发现监控下设备、数据库监控、企业proxy分布式监控搭建配置...

    Zabbix可视化.监控模板配置.自定义监控参数.自动发现监控下设备.数据库监控.proxy分布式监控搭建配置- 文章篇幅较长,可以选择目录查看感兴趣的模块. 1.Zabbix可视化 1. 简介 企业 ...

  2. 监控系统中的服务器,监控系统中服务器的作用

    监控系统中服务器的作用 内容精选 换一换 电商业务内存要求高.数据量大并且数据访问量大.要求快速的数据交换和处理,监控要求极其高.ECS为核心服务,全面.立体的ECS监控系统对业务稳定起到了至关重要的 ...

  3. 基于docker安装部署Zabbix及使用,自动发现、日志监控报警及参照官方文档遇到的问题(图文)

    目录 一.相关原理 (1)概述 (2)Zabbix 功能 (3)Zabbix 概述 (4)zabbix监控架构详解 二.主要步骤 (一)工具/环境准备 (二)docker安装及测试 (三)docker ...

  4. Zabbix通过自动发现监控端口

    安装环境 Zabbix server和agent通过编译方式安装在服务器192.168.25.106上.Zabbix server/agent的安装目录为:/usr/local/zabbix. 创建脚 ...

  5. zabbix学习4: 监控Java原理-zabbix性能优化-低级自动发现-zabbix api

    文章目录 20: zabbix监控java jvm原理 21: zabbix性能优化 22: zabbix低级自动发现 23: zabbix api 20: zabbix监控java jvm原理 to ...

  6. zabbix自动发现监控磁盘(iops和读写量)

    2019独角兽企业重金招聘Python工程师标准>>> 对于磁盘有个iops的概念比较奇怪,想监控起来看下,利用zabbix的自动发现把每个磁盘的iops监控起来,思路:自动发现所有 ...

  7. zabbix无效监控项_使用zabbix模板监控tomcat-解决模板部分监控项不生效问题

    在之前的文章中介绍了zabbix使用java-gateway对tomcat进行监控.但是zabbix默认的模板有一些参数并没有生效,这就需要我们手动去测试配置. 要对JMX参数进行获取测试,我们需要用 ...

  8. 利用zabbix自动发现监控mongo数据库

    但如果公司使用mongo的端口如果不一致的话,那建议使用zabbix的自动发现的功能,自动发现mongo监听的端口,并对它进行相关数据的收集. 先看一下效果图, 教你如何利用zabbix自动发现监控m ...

  9. 青龙面板教程系列-青龙面板Spy监控教程 自动更新环境变量

    Spy亮点介绍 Faker库已添加开卡等活动通用监控脚本. 无需手动执行,解放双手. 自动监控执行开卡,加购等放水活动,无需时刻守护. Spy全天候监控,自动更新环境变量执行任务. 注意事项 本教程基 ...

  10. zabbix的安装(一)监控os资源:内存,cpu,io,负载,带宽

    一.Linux下开源监控系统简单介绍 1)cacti:存储数据能力强,报警性能差 2)nagios:报警性能差,存储数据仅有简单的一段可以判断是否在合理范围内的数据长度,储存在内存中.比如,连续采样数 ...

最新文章

  1. Pcl:Normal的定义结构及输出
  2. TensorRT部署深度学习模型
  3. 研究能力培养的阶梯: 盐趣一对一科研项目
  4. md5sum命令详解
  5. 解读Java Class文件格式
  6. 闪灯什么意思_车灯闪1下、2下、3下各代表什么意思?关键时刻可以保命
  7. 河北2018年职称计算机开始,2018河北职称计算机考试操作题答案(8页)-原创力文档...
  8. 网络介绍 > 网络连接 > 混合云网络
  9. opencv 编译安装时出现报错 modules/videoio/src/cap_ffmpeg_impl.hpp:585:34: error: ‘AVStream {aka struct AVStre
  10. 新商业模式 私下销售 Private Sales Gilt Groupe年营收1.5亿
  11. max3232ese_【MAX3232ESE+ PDF数据手册】_中文资料_引脚图及功能_(美信 Maxim Integrated)-采芯网...
  12. 程序设计基础知识点整理,超全!!!
  13. 【Python】正则表达式判断是否存在连续N个字母
  14. 抖音壁纸表情包小程序搭建部署说明、广告分佣规则说明以及迭代新计划
  15. 一张表左关联另外两张表,三表关联
  16. jquery获取元素索引值index()
  17. echarts 中国地图加自定义图标
  18. HDU-2094-产生冠军
  19. ubuntu安装zsh及环境配置
  20. 一例所有文件都打不开故障的数据恢复过程(转)

热门文章

  1. EZStation如何登陆云端账号、密码?
  2. python遍历json_python3如何遍历json数据
  3. STM32移植USB驱动总结
  4. 记录前端通过XShell和xftp发布版本
  5. 电感电容串联起什么作用
  6. 5.8G微波雷达模块使用,5.8G微波雷达模块工作原理和介绍
  7. 5.8G雷达感应模块,微波雷达传感器技术,人体存在感应雷达
  8. springboot+责任链模式初体验
  9. 利用场景法设计atm自动取款机的测试用例_黑盒测试之场景法
  10. catia三边倒角_CATIA课时:操作工具栏创建倒角倒圆角视频教程_翼狐网