V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zmqiang
V2EX  ›  程序员

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

  •  
  •   zmqiang · 2022-11-10 13:23:17 +08:00 · 1536 次点击
    这是一个创建于 743 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    早年间的 SNMP MIB Table 就直接提供了类似表的功能,只是访问和操作需要通过 SNMP 协议。 应用程序需要相应的实现接口。
    zmqiang
        10
    zmqiang  
    OP
       2022-11-11 10:11:35 +08:00
    @linuxyz 对的,我想的就是类似的东西。现在的监控大多自有的组件进行收集、存储和查询,没有利用到现有的基础组件。你提到的这个 fuse 我了解看看
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5273 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 09:08 · PVG 17:08 · LAX 01:08 · JFK 04:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.