有把程序内部状态实时映射到表的实现思路吗?

2022-11-10 13:23:17 +08:00
 zmqiang

MySQL 里的INFORMATION_SCHEMA内存表,可以将 MySQL 运行时信息以表的形式展示出来,并且可以随着数据的变化动态更新,可以通过标准的 SQL 进行查询

于是在想如果可以把程序内部的一些状态也直接映射到类似的这样的表里,肯定比日志好用,查起来也方便。但是搜了一圈,可能是关键词没找对,没有看到类似的技术文章。所以有类似实现的思路吗?还是说有更好的办法来暴露和查询程序的内部状态?

1543 次点击
所在节点    程序员
10 条回复
Pantheoon
2022-11-10 13:29:09 +08:00
如果你想做的是监控的话,很多工具可以做到
sujin190
2022-11-10 13:39:27 +08:00
状态报告啊,其实他不是个表,只是接受用表的接口查询吧,实时的状态报告肯定是要融入到程序各处逻辑的,那么性能是个优先考虑项,最终需要读取时怎么把这些数据收集过滤显示或者接口 sql 查询就是另外一回事了
zmqiang
2022-11-10 13:46:40 +08:00
@sujin190 就是想了解下,现在有没有类似的库或者组件,可以实现把自建程序的内部状态,以可供 SQL 查询的形式展示出来
zmqiang
2022-11-10 13:47:26 +08:00
@Pantheoon 监控是有,我的想法是能不能暴露出可供 SQL 查询的形式,统一查询入口
lmshl
2022-11-10 13:59:35 +08:00
以 Jaba 为例,过去这玩意儿叫:JFR - Java Flight Recorder
现在通用了,叫 Prometheus exporter
lambdaq
2022-11-10 14:02:36 +08:00
linux 有这招啊。你向一个进程脑门拍一个 SIGABRT 信号,它就吐一个 core dump 文件出来,文件内容就是程序内部状态,整整齐齐的啥都有。
sujin190
2022-11-10 15:16:49 +08:00
@zmqiang #3 如果是这样的话不就是监控系统么,Prometheus 也支持用类似 sql 查询,influxdb 官方也有一套监控系统,数据保存在 influxdb 里,也支持 sql 查询,组件的话估计不好找,其实就是个可组件使用的内存数据库,比较能适配又不影响你自己程序运行可行性太小了
masterclock
2022-11-10 15:44:34 +08:00
tracing ?
有各种各样的工具采集、存储、查询、展示数据,如 Prometheus 一系
采集的话,有推的有拉的,有基于 log 的不基于 log 的,Linux 下还有基于 BPF/eBPF 采集应用信息的
linuxyz
2022-11-11 00:26:19 +08:00
如果你用 Linux, 可以看看 /sys 或者 /proc 就是直接把 kernel 的状态映射到文件系统的方式访问。 如果是你自己开发的程序可以用 fuse 也可以很方便的把 app 的状态映射到 文件系统上。

早年间的 SNMP MIB Table 就直接提供了类似表的功能,只是访问和操作需要通过 SNMP 协议。 应用程序需要相应的实现接口。
zmqiang
2022-11-11 10:11:35 +08:00
@linuxyz 对的,我想的就是类似的东西。现在的监控大多自有的组件进行收集、存储和查询,没有利用到现有的基础组件。你提到的这个 fuse 我了解看看

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/894113

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX