KDPV
本文是一本以某种艺术形式编写的小手册。文章中有许多图片,精心隐藏在扰流板上。
本文适用于谁?对于仍然不太熟悉UNIX系统的新手系统管理员,Zabbix,但他们希望从打印机集中收集信息。
介绍性的。可用的:
- Zabbix 5.0
- CentOS的8
- 没有通过SNMP发送有关耗材的必要信息的打印机(在本手册中,以Oki C834为例)
- 几乎不了解Zabbix,UNIX系统
- 强烈希望从打印机中央收集有关耗材的信息。
走!
原因和理由
懒惰是进步的动力。一个晴朗的早晨,我意识到自己懒得去逛办公室里安装的打印机以监视耗材的状态,例如碳粉盒,硒鼓单元,色带和烤箱。并且还不时收集打印页面计数器的指示符-在它们的基础上,决定打印机的维护。
“那么,通过集中收集这些信息可以节省多少时间!” -这个想法没有离开我的脑海。决定部署一个监视系统。 Zabbix是在老同志的暗示下选择的-期望除了打印机之外,服务器和网络设备的监视功能也将逐步连接。
CentOS 8被安装为操作系统-因为我至少对它有点熟悉。也许现在已经有人在写,如果您已经开始进行系统管理,则需要学习UNIX系统。我的回答是,您绝对正确。
研究用于监视打印机的手册的过程非常简单-snmpwalk,隔离必要的参数,将OID连接到Zabbix,从而获利。然而,现实使这幅美丽的图画有些动摇。没有消耗品状况的指标。甚至没有相似的东西。通常。
文章从Zabbix中的Kyocera设备获取统计信息提示您搜索专有软件以监视打印机并拦截该软件与打印机之间的通信。找到了-配置工具,这是Oki的实用程序,用于监视打印机的状态。下载,运行并…。通过SNMP配置工具接收有关打印机名称,MAC地址和软件版本的信息。有关消耗品的信息在TCP / IP数据包的主体中传输。
我想:“嗯,太棒了,冒险开始了。” 对解决方案选项的思考导致了以下逻辑链:
- 在此阶段,我不知道如何并且也不知道如何正确模拟配置工具发送给打印机的请求。
- 打印机有自己的网页,可在其中提供有关耗材状态和已打印页数的信息
- 解决我的问题的方法是按计划从打印机的网页中提取(解析)信息,然后以某种方式将该信息传输到Zabbix。
搜索解析工具得到以下结果:
- 重击
- 的PHP
- 蟒蛇
注意:我很清楚,解析工具的数量超过了此列表中显示的工具-但是没有必要全部指出它们,然后您将理解原因。
我选择了Bash-这是为什么:
- 预装在大多数UNIX系统上。我不需要安装其他软件。
- 简单。这些命令是合乎逻辑的,并且在对语法进行了一些研究之后就可以理解。
- 需要学习UNIX系统。在这个方向上研究命令语法显然不是多余的。
解析打印机网页
在开始解析之前,让我们看一下什么是打印机网页。
注意
, - . , , , -.
-
-
打印机网页
请注意,页面右上角有墨粉状态指示器。现在,我们仍然需要了解这些指标如何显示在网页上。RMB->检查。下图向我们打开。
页面代码检查
请注意,碳粉值实际上是通过/status.htm页面获得的。
我们看到碳粉值是通过标签传输的:
然后使用JavaScript将这些值四舍五入到十并插入到页面中。
转到页面192.168。***。*** / status.htm-是的,我们在此页面上看到了我们真正需要的碳粉值
status.htm
现在我们知道想要的墨粉状态值存储在哪里。让我们开始解析。
解析中
注意:以下将描述构建脚本的示例和图片解析脚本。即使对于那些对Bash不太熟悉的人,我也会尽量使描述清楚。如果您想阅读结果,请进一步滚动。
所以Bash。正如他们两千年前所说,鲁比肯河已经在同名的河岸上通过。
首先,我建议您熟悉该语言的语法。它非常简单明了-它将帮助我们进行脚本编写和自动化。
接下来,让我们注意cURL-命令行和工具,如官方网站上所述这个工具。cURL支持大量协议,我们需要其中的HTTP支持-请记住,这是用于与打印机网页“通信”的协议。
让我们编写第一个请求:
$ curl 192.168.***.***/status.htm
终端输出
作为响应,大量信息被直接转储到命令行中,这在终端中阅读起来不是很方便,更不用说对该信息的处理了。
让我们将输出重定向到文件-这显然会更方便。特殊字符“>”将帮助我们解决此问题。
$ curl 192.168.***.***/status.htm > Oki.txt
在Vi编辑器中打开生成的文件
$ vi Oki.txt
Vi编辑器中的Oki.txt
好多了,不是吗?但是,我们仍然不需要整个页面。仅需要墨粉状态值。我们开始隔离数据。这是grep的实用程序,它可以搜索包含等于指定常规值的行的实用程序,对我们有帮助。
仔细查看包含碳粉值的标签。我们看到在它们中我们遇到了相同的表达式'value =“ ***”'
注意
? - 100.
注意
, “hidden”. , . . – , ‘value=”***”’
我们“翻录”通过cURL获得的结果。为了稍微加快速度并使过程可视化,我们将值直接输出到终端。
$ curl 192.168.***.***/status.htm | grep ‘value=”***”’
Grep结果
优秀的。简洁的结论。接下来,我们需要删除文本,只保留数字值。
注意
, – « Zabbix’ !». , . – . .
我们过滤掉文本数据,仅保留数字值。带有-Eo标志的Grep将再次帮助我们。它仅允许您显示数字值。
$ curl 192.168.***.***/status.htm | grep ‘value=”***”’ | grep -Eo ‘[0-9]{1,}’
显示数字
因此,我们获得了所需的数值。现在,我们将输出解析为单独的行,以便将它们分别保存到文本文件中。这是sed(流文本编辑器实用程序)派上用场的地方。在我们的案例中,最重要的是sed可以隔离单独的行-这正是我们所需要的。
Curl 192.168.***.***/status.htm | grep ‘value=”***”’ | grep -Eo ‘[0-9]{1,}’ | sed -n 1p
sed输出
让我们看一下sed部分。1p-输出第一行。-n-排除除指定行以外的所有内容。如您所见,执行此命令后,输出仅显示青色碳粉状态的数值。
现在让我们开始编写脚本。
与相同的bat脚本相比,bash脚本具有一定的特殊性。它们必须以shebang-“#!”开头。以#开头的其他行将被解释为注释。
该脚本将如下所示:
#! /bin/bash
#This script received toner level's from Oki_834
curl 192.168.***.***/status.htm | grep ‘value=”***”’ | grep -Eo ‘[0-9]{1,}’ | sed -n 1p >/var/cyan.txt
curl 192.168.***.***/status.htm | grep ‘value=”***”’ | grep -Eo ‘[0-9]{1,}’ | sed -n 2p >/var/magenta.txt
curl 192.168.***.***/status.htm | grep ‘value=”***”’ | grep -Eo ‘[0-9]{1,}’ | sed -n 3p >/var/yellow.txt
curl 192.168.***.***/status.htm | grep ‘value=”***”’ | grep -Eo ‘[0-9]{1,}’ | sed -n 4p >/var/black.txt
将脚本文件添加到crontab,从而自动执行它。作者设置了* / 15 * * * *-每15分钟执行一次。
底线-自动解析打印机的网页,我们获得所需的数值并将其保存在所需的目录中。
将收到的值转移到Zabbix
现在让我们开始将数据传输到Zabbix。
让我们创建一个新项目。我们随便命名,指定Zabbix代理类型。
注意
Zabbix-server Zabbix-agent. , , Zabbix-agent.
在这个阶段我们拥有的最有趣和最重要的东西是关键。我们需要vfs.file.contents [file,<encoding>]。File是文件的绝对路径。
在Zabbix中创建项目
我们指出文件的路径并检查正确性。在测试输出上,我们应该看到黑色碳粉值。
成功完成测试
底线-我们已经将数据迁移到Zabbix,现在我们可以集中控制耗材的状态。
结论
我们已经掌握了通过解析网页获取数据的方法。在此示例中,使用了Oki 834打印机,并且成功获取了墨粉数据。我负责任地宣布,使用相同的方法获取有关硒鼓单元,磁带和烤箱状态的数据。
屏幕截图证据
因此,有可能从几乎所有打印机获得消耗品的信息,而不仅仅是打印机。解析是一个相当方便的工具,我真的很喜欢使用它。如果我的文章至少可以帮助一个人,那么它就没有白费。
我也要表示深深的谢意红头鹿, akozhevnikov97一位希望匿名帮助撰写本文的人。谢谢大家!