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

结构化日志中的指标,怎么输出给 prometheus?

  •  
  •   1800x · 79 天前 via Android · 1656 次点击
    这是一个创建于 79 天前的主题,其中的信息可能已经有所发展或是发生改变。
    程序主要是 go 写的。
    程序中已经准备好结构化日志。绝大部分日志中有下面字段:traceid 、时间、耗时、查询入口、错误,等。
    现在要收集这些数据,形成监控。

    我猜大概两种方案:
    一、每个节点部署某个专用服务收集日志,提取日志中的指标数据,输出给 prometheus 。
    二、不增加服务,结构化日志后端 /输出端,通过某个开源库,处理后,直接通过网络输出给 prometheus

    但具体自己没操作过,请教各位 v 友。还望指教。

    日志系统暂定使用 LOKI 。
    18 条回复    2023-03-19 07:05:28 +08:00
    q1angch0u
        1
    q1angch0u  
       79 天前 via iPhone
    前司是按一定格式输出到硬盘,之后由 sre 使用方案 1 汇报至时序数据库。原因我猜测是因为此方案对代码的侵入性相对较小,且不用限制项目实现语言。
    JoDragon
        2
    JoDragon  
       79 天前
    pushgateway 满足你的需求
    cxshun
        3
    cxshun  
       79 天前
    可以考虑用 fluentd/logstash 直接处理日志数据后再通过 push gateway 给到 prometheus
    seers
        4
    seers  
       79 天前 via Android   ❤️ 1
    通过接口暴露,然后 Prometheus 抓取
    saka0609
        5
    saka0609  
       79 天前
    既然用了 Loki ,那就可以把你输出的日志给 Loki ,让 loki 帮你转成 metrics
    ql562482472
        7
    ql562482472  
       79 天前
    我觉得你遇到的问题有两个,一个是 log 怎么转化为 metric 。就是 logs 怎么转化为 Counter (计数器)、Gauge (仪表盘)、Histogram (直方图)、Summary (摘要)
    另一个是如何进行 metric 的定义
    pkoukk
        8
    pkoukk  
       79 天前   ❤️ 1
    第一点,确认需求,日志里的东西能满足现在以及后续的全部监控需求么?
    一定有部分核心业务是单独需要监控指标的吧,所以还不如直接在 go 里接 prom ,让 prom 从 go 服务直接采集 metric
    BQsummer
        9
    BQsummer  
       79 天前
    1. 日志转指标需求是合理的,是应用通用指标的一部分。
    2. 我司是有专门的应用和 Flink 消费所有应用的日志,统一处理并产出指标,对于单体应用可能不合适。
    3. 部分应用日志在 sls ,我们平台可以定时查询 sls 产出指标。
    joesonw
        10
    joesonw  
       79 天前 via iPhone
    你用的什么日志库,大部分日志库都可以自己实现 Collector ,记录相关 metrics ,prometheus.Register 一下,就一起采走了。
    killva4624
        11
    killva4624  
       79 天前
    把 log 转成 prometheus 的识别样式,生成和刷新文件到指定目录,然后 node-exporter 加上 --collector.textfile.directory 参数,再走常规的 prometheus 数据采集就可以。
    lanjz
        12
    lanjz  
       79 天前
    1800x
        13
    1800x  
    OP
       78 天前 via Android
    @ql562482472 谢谢。查询了有关信息。
    如果我要收集同一接口处理逻辑的处理量、耗时分布、错误率,好像还得定义不同的 Observer ?
    winglight2016
        14
    winglight2016  
       78 天前
    1. 把日志写到 ES
    2. 用 grafana 连接,然后自己定义 dashboard
    我们就是这样处理 log 的,其他有 Prometheus 的服务,也可以接入 grafana
    ql562482472
        15
    ql562482472  
       78 天前
    @1800x 我不太清楚其他回答者的身份,然后我个人也做过短暂的半年多 devops ,后来的感受就是,ops 角色其实并不关心业务,只有 dev 在关心业务。
    我现在回来继续做 dev ,感觉很多指标光凭 ops 从业务无关的地方抽,抽死都抽不出有深度的信息。想要具有深度,还是得开发自行定义 metric ,比如你要的这个处理量,耗时分布,错误率,我感觉是需要有 metric 的埋点:

    key = biz.usage 的累加器,tag 是 method-full-name
    key = biz.cost.time 的直方图或者 Summary ,tag 也是 method-full-name
    key = biz.success 的累加器
    key = biz.fail 的累加器

    我的认知也很浅,也没有大厂的实践参考,我觉得可能需要自行定义一些 metric ,也许专业的 ops 或者 Prometheus 开发者有其他的方案,仅供参考
    1800x
        16
    1800x  
    OP
       78 天前
    @ql562482472
    以前公司,搞了一套监控,有业务层的指标,也有运维层的指标。我们主要看的是业务层的指标。
    想在目前公司重新搞一套,目前已经在业务层收集了有关指标,但接下来的处理细节,我并不清楚。
    ql562482472
        17
    ql562482472  
       78 天前
    @1800x 如果指标已经有了 那就是套到 metric 上去,然后用 http 之类的 /metrics 接口暴露出去,prometheus 去定时拉这一个接口,然后用 grafana 做 dashboard 了么
    1800x
        18
    1800x  
    OP
       77 天前 via Android
    @ql562482472 还没到那步。
    已经埋点,不需要再改业务代码。
    现在需要在埋点代码里加 metric 输出
    关于   ·   帮助文档   ·   博客   ·   nftychat   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1209 人在线   最高记录 5634   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 17:27 · PVG 01:27 · LAX 10:27 · JFK 13:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.