经过几个月的讨论、实施和测试,OpenWRT 包已经准备好用于 OpenWISP 监控模块。

Google Summer of Code 对完成工作有很大帮助。

关于项目

该项目旨在:-

  • 用于在 OpenWRT 包(netjson-monitoring)中获取 NetJSON 设备监控数据的转换脚本,包括测试和文档。

  • 为 OpenWISP Monitoring 创建一个包,该包从netjson-monitoring包中收集信息并将其发送到服务器。

该项目的主要目标是通过易于理解的说明使流程更加健壮和有弹性。

令人着迷的是,让我们更详细地了解该项目。

什么是 OpenWISP 监控

OpenWISP 监控模块允许使用各种图表实时监控设备,并通知用户任何异常行为。

从多个设备收集数据,并在一段时间后定期以NetJSON格式发送到服务器。然后将此数据保存在时间序列数据库中,然后用于绘制视觉效果。

需要打包 OpenWISP 监控

  • 以前,这是使用 cron 作业实现的,这是不可取的。

  • 已部署通过数据库迁移创建的配置模板。

  • 此外,任何更改后,模板都需要手动更新。

  • 存在许多问题,例如可读性、硬依赖、日志记录、错误处理和灵活性较低。

OpenWRT OpenWISP Monitoring 解决了所有这些问题。

包括这一点,我们清理和格式化代码,添加更多功能并修复错误。

OpenWISP 监控包安装

| OpenWISP 监控包安装 |

显着特征

以下是该项目的一些亮点,完整的作品可以在项目板中找到。

转换成OpenWRT包

正如项目名称所示,这是该项目的主要目标。由于我对 OpenWRT 和 MakeFile 不太熟悉,所以花了很多时间来理解它们。尽管如此,批判性和建设性的反馈对推动工作进展有很大帮助。

相关工作 :

  • 转换成OpenWRT包

  • 移除迁移脚本

测试 NetJSON 监控

确实是一个重要的问题。这将确保在完成任何更改或添加新功能时,以前的功能不会加快流程并节省大量时间。

Lua 测试

测试 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。

从这个项目中学到的一些关键知识是:-

  1. 多问:- 解决您的问题并记住清晰的图像是工作的必要条件。一定要问他们,并在工作之前尝试获得所有答案。这也很重要,因为它可以节省大量时间。自从我开始研究项目想法到实施时,我也遇到了很多疑问。我在IM 频道上问他们以获得澄清。

  2. 可实现的小目标:- 这是费德里科建议做的。选定的学生名单一公布,我们就被要求创建问题,确保涵盖提案中提到的所有可交付成果,并且每个问题都有一个概述该问题计划的描述。

  3. 保持测试:- 在小型个人项目中,这可能会被跳过,但在将被很多用户使用的项目中,测试很重要。如果进行了任何更改,则应进行测试。 测试您的代码,测试您的文档并测试您的测试。 确保有可以进行的自动化测试,但尝试继续手动测试以确保一切正常。

  4. 管理时间是关键:- 虽然中间我没有做到这一点,但这确实很重要。一个人不应该被阻止程序卡住并继续工作。我不会再强调它,因为已经有很多文章了。

  5. 准备调试:- 没有什么是 100% 没有错误的。错误可能无处不在。因此,应该准备调试他们的代码。我花了最后两个星期在这上面。虽然我不是一个人做的。为此,我们有一个专用部分用于调试。

接下来是什么?

有些事情是最近讨论的,我们将继续努力。此外,一些拉取请求位于进度列中,应在发布该项目的第一个版本之前完成。

另外,我也计划开始研究其他模块(主要是我的同行在 GSOC 期间所做的工作),以便我可以了解更多关于 OpenWISP 及其工作的信息。

Logo

ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!

更多推荐