MySQL 里的INFORMATION_SCHEMA
内存表,可以将 MySQL 运行时信息以表的形式展示出来,并且可以随着数据的变化动态更新,可以通过标准的 SQL 进行查询
于是在想如果可以把程序内部的一些状态也直接映射到类似的这样的表里,肯定比日志好用,查起来也方便。但是搜了一圈,可能是关键词没找对,没有看到类似的技术文章。所以有类似实现的思路吗?还是说有更好的办法来暴露和查询程序的内部状态?
1
Pantheoon 2022-11-10 13:29:09 +08:00
如果你想做的是监控的话,很多工具可以做到
|
2
sujin190 2022-11-10 13:39:27 +08:00
状态报告啊,其实他不是个表,只是接受用表的接口查询吧,实时的状态报告肯定是要融入到程序各处逻辑的,那么性能是个优先考虑项,最终需要读取时怎么把这些数据收集过滤显示或者接口 sql 查询就是另外一回事了
|
3
zmqiang OP @sujin190 就是想了解下,现在有没有类似的库或者组件,可以实现把自建程序的内部状态,以可供 SQL 查询的形式展示出来
|
5
lmshl 2022-11-10 13:59:35 +08:00
以 Jaba 为例,过去这玩意儿叫:JFR - Java Flight Recorder
现在通用了,叫 Prometheus exporter |
6
lambdaq 2022-11-10 14:02:36 +08:00
linux 有这招啊。你向一个进程脑门拍一个 SIGABRT 信号,它就吐一个 core dump 文件出来,文件内容就是程序内部状态,整整齐齐的啥都有。
|
7
sujin190 2022-11-10 15:16:49 +08:00
@zmqiang #3 如果是这样的话不就是监控系统么,Prometheus 也支持用类似 sql 查询,influxdb 官方也有一套监控系统,数据保存在 influxdb 里,也支持 sql 查询,组件的话估计不好找,其实就是个可组件使用的内存数据库,比较能适配又不影响你自己程序运行可行性太小了
|
8
masterclock 2022-11-10 15:44:34 +08:00
tracing ?
有各种各样的工具采集、存储、查询、展示数据,如 Prometheus 一系 采集的话,有推的有拉的,有基于 log 的不基于 log 的,Linux 下还有基于 BPF/eBPF 采集应用信息的 |
9
linuxyz 2022-11-11 00:26:19 +08:00
如果你用 Linux, 可以看看 /sys 或者 /proc 就是直接把 kernel 的状态映射到文件系统的方式访问。 如果是你自己开发的程序可以用 fuse 也可以很方便的把 app 的状态映射到 文件系统上。
早年间的 SNMP MIB Table 就直接提供了类似表的功能,只是访问和操作需要通过 SNMP 协议。 应用程序需要相应的实现接口。 |