OpenWRT OpenWISP 监控
经过几个月的讨论、实施和测试,OpenWRT 包已经准备好用于 OpenWISP 监控模块。 Google Summer of Code 对完成工作有很大帮助。 关于项目 该项目旨在:- 用于在 OpenWRT 包(netjson-monitoring)中获取 NetJSON 设备监控数据的转换脚本,包括测试和文档。 为 OpenWISP Monitoring 创建一个包,该包从netjson-m
经过几个月的讨论、实施和测试,OpenWRT 包已经准备好用于 OpenWISP 监控模块。
Google Summer of Code 对完成工作有很大帮助。
关于项目
该项目旨在:-
-
用于在 OpenWRT 包(netjson-monitoring)中获取 NetJSON 设备监控数据的转换脚本,包括测试和文档。
-
为 OpenWISP Monitoring 创建一个包,该包从
netjson-monitoring
包中收集信息并将其发送到服务器。
该项目的主要目标是通过易于理解的说明使流程更加健壮和有弹性。
令人着迷的是,让我们更详细地了解该项目。
什么是 OpenWISP 监控
OpenWISP 监控模块允许使用各种图表实时监控设备,并通知用户任何异常行为。
从多个设备收集数据,并在一段时间后定期以NetJSON格式发送到服务器。然后将此数据保存在时间序列数据库中,然后用于绘制视觉效果。
需要打包 OpenWISP 监控
-
以前,这是使用 cron 作业实现的,这是不可取的。
-
已部署通过数据库迁移创建的配置模板。
-
此外,任何更改后,模板都需要手动更新。
-
存在许多问题,例如可读性、硬依赖、日志记录、错误处理和灵活性较低。
OpenWRT OpenWISP Monitoring 解决了所有这些问题。
包括这一点,我们清理和格式化代码,添加更多功能并修复错误。
| OpenWISP 监控包安装 |
显着特征
以下是该项目的一些亮点,完整的作品可以在项目板中找到。
转换成OpenWRT包
正如项目名称所示,这是该项目的主要目标。由于我对 OpenWRT 和 MakeFile 不太熟悉,所以花了很多时间来理解它们。尽管如此,批判性和建设性的反馈对推动工作进展有很大帮助。
相关工作 :
-
转换成OpenWRT包
-
移除迁移脚本
测试 NetJSON 监控
确实是一个重要的问题。这将确保在完成任何更改或添加新功能时,以前的功能不会加快流程并节省大量时间。
测试 NetJSON 监控
相关工作:-Lua 测试
详细模式
在测试过程中,发现了一些错误,让我们意识到需要轻松调试。使用详细模式,用户(或开发人员)可以轻松找到幕后发生的事情。这也使我们能够通过禁用详细模式来消除大量噪音。默认情况下,verbose_mode
被禁用,但可以使用openwisp_monitoring
配置重新启用。
相关工作:-修复错误并改进调试
可配置间隔
以前,每 5 分钟调用一次自动脚本。但是如果用户想要更长的时间间隔怎么办?这就是为什么添加一个选项以使这很容易发生的原因。
收集和发送数据
这是该软件包最重要的功能。以前,数据只能实时发送,如果服务器和设备之间的连接断开,数据就会丢失。
通过临时存储数据并在重新建立连接时发送数据,确保所有数据都发送到时序数据。一旦数据成功发送到服务器,该文件将被删除。
此功能的重要亮点是:-
-
仅当
required_memory
可用时才临时存储数据:添加了一个选项,以便用户可以在存储数据之前提供所需的可用内存百分比。这样可以确保如果连接长时间断开,设备不会充满数据。 -
使用 UTC 时间戳存储数据:在使用此功能时,我发现设备和服务器的时区不同,导致在数据库中保存时间错误的数据。为了解决这个问题,我将时间转换为 UTC 时区,并确保监控模块以同样的方式处理它。
-
在两个服务中打破流程:在审查工作时,我的导师指出了此实施的一个主要问题。更多数据。需要更多时间发送。这可能会导致跳过保存数据。为此,监控分为两个 procd 服务,一个用于收集数据,另一个用于发送数据。一个额外的参数模式用于区分两者。
-
数据一采集就发送:用户自定义信号,用于将最新的数据一采集就发送到服务器。
-
指定接收时序数据的时间:通过URL从设备接收到的时间戳用于保存数据。还更新了一些信号,以让用户知道衡量指标的时间。
相关工作 :
-
临时存储和发送数据
-
允许接收时序数据的具体时间
重试机制:-
-
两个代理(收集代理和发送代理)在最多失败 5 次的情况下由 procd 服务重新启动。
-
数据收集代理在重试之间等待 5 秒后尝试收集数据 5 次。
-
发送数据时使用指数退避算法,以确保代理在连接中断的情况下不会继续不必要地重试。这使用了
max_retries
选项来定义发生故障时的最大重试次数。一旦maximum retries are reached
,代理将尝试在下一个周期发送数据。
经验
我参与过的最好的项目之一,学到了很多东西。我制作的个人项目要么仅供我自己使用,要么供我的朋友使用。但是我今年夏天写的代码将被全球很多人使用,这不亚于自己的成就。
项目一公布,我就开始深入探索。虽然我不确定,但我决定继续这个项目,因为我想更多地探索网络。
感谢我的导师Federico Capoano,Gagan Deep,Nicholas Smith和Florian Eckert他们试图通过不断提供评论和建议来确保项目朝着正确的方向发展。也向TelcoAntennas致以热烈的问候,他们提供了对暂存实例的访问以测试工作。
通过这个项目,我了解了 Lua、OpenWRT、NetJSON 和 MakeFile。
从这个项目中学到的一些关键知识是:-
-
多问:- 解决您的问题并记住清晰的图像是工作的必要条件。一定要问他们,并在工作之前尝试获得所有答案。这也很重要,因为它可以节省大量时间。自从我开始研究项目想法到实施时,我也遇到了很多疑问。我在IM 频道上问他们以获得澄清。
-
可实现的小目标:- 这是费德里科建议做的。选定的学生名单一公布,我们就被要求创建问题,确保涵盖提案中提到的所有可交付成果,并且每个问题都有一个概述该问题计划的描述。
-
保持测试:- 在小型个人项目中,这可能会被跳过,但在将被很多用户使用的项目中,测试很重要。如果进行了任何更改,则应进行测试。 测试您的代码,测试您的文档并测试您的测试。 确保有可以进行的自动化测试,但尝试继续手动测试以确保一切正常。
-
管理时间是关键:- 虽然中间我没有做到这一点,但这确实很重要。一个人不应该被阻止程序卡住并继续工作。我不会再强调它,因为已经有很多文章了。
-
准备调试:- 没有什么是 100% 没有错误的。错误可能无处不在。因此,应该准备调试他们的代码。我花了最后两个星期在这上面。虽然我不是一个人做的。为此,我们有一个专用部分用于调试。
接下来是什么?
有些事情是最近讨论的,我们将继续努力。此外,一些拉取请求位于进度列中,应在发布该项目的第一个版本之前完成。
另外,我也计划开始研究其他模块(主要是我的同行在 GSOC 期间所做的工作),以便我可以了解更多关于 OpenWISP 及其工作的信息。
更多推荐
所有评论(0)