Golang Go语言中可以使用 golang 开发一套监控系统吗

发布于 1周前 作者 yibo5220 来自 Go语言

最近接了个活,主要是给 FSU 动环监控单元白盒(芯片:NUC980,内存:128MB),开发一套监控软件,可以采集接在白盒上面的各种 DI,AI 设备的数据,并且上报到监控中心

查询了下,FSU 系统,好像都是通过 C/C++ 写的,可是我不太会,但是我会一点 golang 写,查询了下,golang 好像可以用于嵌入式开发

就想问下有没有使用过 golang 开发过类似的软件的,以及使用 golang 会不会有什么坑


Golang Go语言中可以使用 golang 开发一套监控系统吗

更多关于Golang Go语言中可以使用 golang 开发一套监控系统吗的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

35 回复

不懂这块业务,但 go 可以读取 dll 或 so ,通过 cgo 调用 c 函数

更多关于Golang Go语言中可以使用 golang 开发一套监控系统吗的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


如果连 link 都不明白的是大概率没戏的。

行肯定是行的,但入 2 楼大佬所讲, 怎么也得知道点嵌入式的东西吧。 不然肯定有困难啊。。
实际 python ,php 都行啊。。。go 自然也行。

FsuOS 不行吧,它支持的是各种驱动,有 Python 支持但限设备

prometheus 的 metrics ,
你的白盒上运行 node_exporter 或者自己开发个

128MB 内存用 Golang 太容易 OOM 了,不推荐,Golang runtime 对内存分配比较宽松

我说嵌入式可能不准确,这个盒子厂家提供编译好的 Linux 系统, 我只要写软件跑在上面就行, 我的想法是, 解决我的软件与串口之间的通讯,以及如何将数据上报到数据中心(就是中国铁塔的 B 接口)就行了, 担心的点也就是会不会最后我写完了, 跑起来发现系统资源不够,毕竟才 128M 内存

我的逻辑比较简单,就是采集数据,上报数据, 没有其他更复杂的逻辑, 想着应该够用吧

128M 内存居然说是才。。。我看了一眼我手上的 stm32 的板子就 512K 。你别引一堆第三方包,尽量自己维护数据结构,内存都是能算出来的。虚拟机不是个大 sb ,只知道吃完内存才吐。所以要你自己控制和维护。尤其是调用 so 开的口子的时候千万别忘了回收内存之类的。因为大部分的接口都是只是申请了内存,但是释放一定会再给你另一个接口。这是最容易踩的坑。如果你直接是串口+http 。。。。。哪就没 so 啥事了。标准库标准操作。。内存多少都是看得到的。。

甚至更简单粗暴一点就是内存直接都是纯静态的。比如全局 1k 大的数组。多少内存都是能算出来的。就没 gc 啥事

嵌入式这内存够了。。。你这盒子本身功能就不多 要那么大内存干嘛

至于 Go 能有啥坑 都那么多用的了

最后,真决定用 Go ,请用 TinyGo

#8 少引用第三方 SDK 的话够用的,大不了 OOM 了之后再拉起或者计划性重启。看了下串口通信在 linux 下只需要 syscall 就行了,如果知道协议纯自己写的话,挺方便的,不用引用 so 库。如果要引用的话 cgo 是有点麻烦的,可以看下 SWIG

注意一下处理器架构, 如果引用库的话可能不兼容

行肯定是行的,更多是省不省心,例如 golang 并不是一个对 interprop 友好的语言,要引非 golang 的库会比较麻烦。如果你熟悉 golang ,需求又不存在调三方库全部自己写的那就无太大所谓。

大概看了下 FsuOS 的文档……好口语化啊……

不建议你在上面开发了,毕竟 Go 已经开始升级最低要求的 Linux 版本(貌似大于 3.0?),硬要开发的话,可以通过“联通白盒化标准”那里的东西进行采集和上报

嗯 不基于他们, 他们也是 C 写的打包成了系统, 我的软件是在 Linux4.9 上面跑, 就是使用 go 语言实现他们类似的功能,采集数据+告警+上报 就行了

翻了一眼,同感:

> “当作为仪表控制器软件时,由于 SMDDevice 只是负载采集告警和控制,具体仪表的业务逻辑还需要一个控制器实现,就是这个。”

TinyGo 有内存管理缺陷

要不直接买个能采集动环数据的盒子呢?也不贵来着,肯定比开发便宜

用 C 实现呗,如果只是读数据、通讯,多简单啊。。。

给我活的人,就是想卖钱的,他咋可能去采购呢 🤣🤣

实在有 C 的需求,又想有 Go 的语法,嗯……

可以用 v ( 80%跟 Go 很像),就是内存管理得自己配置一下。

https://vlang.io

需求这么简单建议和 AI 一起写会儿 C 就好了

#7 要纯原生开发了,github 代码要 copy 出来精简了。

golang 嵌入式,最后还是会回到 cgo 上,那不如一开始就用 c/c++。话又说回来了,嵌入式不用 c/c++,那也得是 rust 顶上,无论如何也轮不到 golang 啊。哪怕是 microopython 和 tiny go ,也都是 demo 尺度上的东西,商业上也没几个人有胆子用。

nuc980 感觉大概率用 nor flash ,这个反而是瓶颈

如果功能就是你说的那么简单,并且系统中也没有其他程序抢内存,是没有问题的,因为我做过

而且也用不到 cgo ,didoaiao 都是文件,go 直接读写文件就行,上传数据都是网络协议了,和 cgo 也没关系

#29 感谢 我看看

建议使用 Java21 + graalvm.org 开发

做过, 可行! 可以参考 gobot 项目 https://gobot.io/ 现成的代码示例

看需求更接近开发一个上报监控指标的 agent ,逻辑上应该比较简单。
解决资源问题(内存)可以看下 tinygo ,算是针对嵌入式环境的一个 go 编译器实现,如果没有用不到 go 关键字、反射等特性的话应该问题不大。

当然可以!在Golang(Go语言)中开发一套监控系统是完全可行的,并且Go语言的一些特性使其成为构建高效、可扩展监控系统的理想选择。

首先,Go语言具有强大的并发处理能力,通过goroutines和channels,可以轻松实现高并发的数据采集和处理,这对于监控系统来说至关重要,因为监控系统通常需要处理大量的实时数据。

其次,Go语言的标准库和第三方库提供了丰富的网络编程支持,包括HTTP、WebSocket等协议,这使得构建基于Web的监控界面和API变得简单高效。

此外,Go语言的性能优化和垃圾回收机制也使其在资源消耗方面表现出色,这对于需要在长时间内稳定运行的监控系统来说尤为重要。

在开发监控系统时,你可以考虑使用一些成熟的开源框架和库来加速开发过程,比如Prometheus(一个开源的系统监控和警报工具包)就提供了丰富的监控功能和API,可以很容易地与Go语言集成。

总之,使用Go语言开发监控系统是一个很好的选择,它不仅能够满足监控系统对性能和并发性的要求,还能够提供灵活的开发环境和丰富的生态系统支持。如果你对Go语言有一定的了解,那么开发一套监控系统将是一个既有趣又有挑战性的项目。

回到顶部