这是本文的最后一部分,
这是开始 。
我上次写关于如何实现设备监视的文章时,现在我们将重点放在管理上。 在与客户的“技术人员”进行讨论时,我经常遇到对此类小型设备(内存资源和性能低的设备)功能的有限了解,许多人认为“我们需要的最大是发送重新启动信息,更严重的是-我们将派遣一个团队” 。
但是实践表明,这并非完全正确。
以下是一些常见的常见任务:
- 网络诊断和故障排除。 在路由器的以太网端口后面,另一个硬件通常具有其自己的内部IP地址。 有时,它可以(需要)“ ping”。 或隧道管理-如果路由器突然不在通过3G调制解调器运行的路由器上,但是我们看到了路由器本身。
- 系统服务。 固件升级,服务脚本升级。
- 平衡行为。 这可以称为“变态”,但“平衡器”的概念,如我所引用的, “马戏团艺术家在身体不稳定位置保持平衡的能力”更为合适。 由于客户预算有限,也会出现类似情况。 以下是几个示例,但是因为 它们与叙述的主题没有直接关系,将它们放在注释中
无线监控过去五年的热门话题主要是联邦零售连锁店。 您慢慢走过交易大厅,打开Wi-Fi的手机试图“粘在”某个网络线程上,会定期发送“探测请求”数据包,可以对这些数据包进行分析,以计算出您进入该商店的频率,原因走轨迹等等。 然后,收集,分析数据,绘制热图,并为这些图片的管理者“从管理人员或投资者那里“掏出”钱。 同时....“没有钱,但您坚持……”,并且必须已经显示了结果(真实),其中包括一首好歌,“是的,是的,那么我们当然会放tsiska和我们想要的任何东西,但是现在我们需要向客户展示结果! 顺便说一句,他们忘了说客户允许我们的设备通过Wi-Fi连接到他的热点,但总的来说,就好像我们是来宾客户一样。” 现在,您必须制造路由器平衡器-几个WiFi子接口出现,其中一个紧紧抓住热点,第二个监视环境,疯狂地将tcpdump的结果卸载到自身中,然后将文件内容打包到存档中,并冒着因“暴饮暴食”而死的危险试图吐出ftp服务器上的内容。 路由器平衡器经常“崩溃”并且以某种方式必须进行远程复苏并不奇怪。
半径在这里,用客户的这样的陈述来描述这种情况比较容易: “我们希望通过一个分散的热点网络来处理那些事先无法得知其型号的设备,但仍无法通过渠道知道。 啊,他们忘了说,我们不仅要向客户展示广告,而且还要分析热点安装位置周围的所有内容。 不,我们还不知道为什么,但是我们会提出,毫无疑问,我们能够提出这个想法”
而且我们也不要忘记,由于事先无法确定的大量情况,当我们无法通过ip直接连接到路由器时,应该在非标准条件下进行控制:端口并被迫仅等待其活动。 如果我们忽略它,则服务器和路由器之间的对话可以这样表示:
- 路由器 :嗨。 我是这样的路由器,有什么需要我做的吗?
- 服务器 :这样的路由器我注册了你,还活着。 这是任务:向我展示ifconfig命令的结果?
- 路由器 :嗨。 我就是这样的路由器,您上一次要求我显示ifconfig的结果时就在这里。 我有什么任务吗?
- 服务器 :这样的路由器我注册了你,还活着。 没有适合您的任务。
最有趣的问题:远程路由器如何发送一定数量的信息? 在上一部分中,我描述了由于资源有限而在路由器上只有“精简”的wget,该wget仅通过GET起作用,而没有其他任何作用,没有ftp客户端或curl。 更确切地说,无论图像组件的功能如何,我们都需要一种通用的方法。 我决定使用wget。 更准确地说,我是如何“停止”的-我只是别无选择:)
立即预订我的管理解决方案正在运行,但是非常有限,即使它适合大多数客户,我也相信它是弯曲的。 您将如何明智地做到这一点-编写一个小的实用程序,通过第80个端口发送二进制数据。 将其(实用程序)包括在路由器的固件中,然后使用bash对其进行访问。 但是现实是:a)您需要快速b)也许您需要在现有的“路线动物园”上做所有事情c)“不伤害!” -如果路由器正常工作并执行其他任务,请尝试进行会影响现有功能的更改。
让我们继续执行。 假设您的客户希望从zabbix中通过单击鼠标轻松自然地重启路由器。 今天,我们将开始使用zabbiksa来描述实现。
在菜单“管理”->“脚本”中,添加一个新脚本。 我们将其称为“重新启动”,作为命令,我们编写“ php /usr/share/zabbix/reboot.php {HOST.HOST}”

进一步:菜单“监视”->“最新数据”->“在网络节点上单击鼠标右键”。 这是添加脚本后菜单的外观。

因此,我们将reboot.php脚本放在/ usr / share / zabbix目录中(您可能还有另一个,我使用zabbixa根目录)。
安全免责声明为了使脚本中的解释更加清楚,我仅使用路由器的ID,但不使用密码。 在工作版本中,不建议这样做! 我为什么要这样做:因为最大的问题是路由器的密码存储在哪里? 在zabbixe本身中的“库存”? 矛盾的做法。 作为一种选择:限制外部对reboot.php文件本身的访问
Reboot.php文件
<?php
其实一切。 “如何从设备端获取命令执行结果”的问题仍然存在。 以ifconfig命令为例考虑问题。 该命令可以发送到设备:
message=`ifconfig`; wget "http://xn--80abgfbdwanb2akugdrd3a2e5gsbj.xn--p1ai/a.php?u=user&p=password!&m=$message" -O /tmp/out.txt
其中:
message =`ifconfig`-我们将ifconfig命令的输出结果分配给$ message变量
wget“ xn-80abgfbdwanb2akugdrd3a2e5gsbj.xn-p1ai / a.php-我们的a.php脚本,用于注册路由器并从中接收消息
u =用户&p =密码!&m = $ message-凭证和请求变量的值m-分配变量$ message的内容
-O /tmp/out.txt-在这种情况下,我们不需要输出到文件/tmp/out.txt,但是如果您不指定此参数,则wget无效
为什么它歪曲地工作因为这是一个潜在的安全漏洞。 可能发生的最无害的错误是,例如,如果命令的输出中出现“&”符号。 因此,有必要过滤从路由器发送的所有内容以及到达服务器的所有内容。 是的,我很as愧。 为了辩护,我只能写-整篇文章专门讨论如何预先管理固件未定义且通信通道未预先定义的路由器。
好吧,我感动了未来:我还没有想出如何通过服务器上的zabbix的标准方式来反映结果(例如,命令的结果)。
我提醒您,
所有资源都可以从Git存储库中获取