Skip to content

[讨论] 补全dubbo-go的可观测性 #3292

@Alanxtl

Description

@Alanxtl

当前能力

  1. Metrics 指标
    核心在 /metrics/filter/metrics/filter.go
    支持:

    • RPC 指标:provider/consumer QPS、请求总数、处理中请求数、成功/失败数、RT、P50/P90/P95/P99。
    • 细粒度错误分类:timeout、limit、service unavailable、business failed、unknown。
    • Registry 指标:register/subscribe/notify/directory/service-level register 等。
    • Metadata 指标:metadata push/sub/store provider/subscribe service RT 等。
    • Config Center 指标:配置变更次数,按 key/group/config center/change type 打标签。
    • Application info 指标:应用名、版本、host、ip 等。
    • 聚合窗口指标:sliding window aggregate RT/counter。
  2. Prometheus 暴露与 Pushgateway
    实现在 /metrics/prometheus/registry.go
    支持:

    • Pull 模式:启动 HTTP endpoint,默认 :9090/metrics
    • Push 模式:推送到 Prometheus Pushgateway,支持 job、username/password、push interval。
    • Counter/Gauge/Histogram/Summary/RT registry 抽象,Prometheus 是默认实现。
    • 优雅关闭时关闭 exporter server。
  3. OpenTelemetry Tracing
    核心在 /otel/trace/filter/otel/trace/filter.go
    支持:

    • client/server trace filter:自动创建 span、注入/提取 trace context、设置 RPC semantic attributes。
    • exporters:stdoutjaegerzipkinotlp-httpotlp-grpc
    • propagator:w3cb3
    • sampling:alwaysneverratio
    • OTLP HTTP 支持 insecure 选项。
    • 使用 OpenTelemetry semconv/v1.21.0
  4. 日志与 trace 关联
    这是你提到的 apache/dubbo-go#3195 / issue #3182 对应能力。
    当前代码在 /logger

    • 新增 logger.CtxLogger 接口。
    • CtxInfo/CtxDebug/CtxWarn/CtxError 及格式化版本可从 context.Context 提取 trace_idspan_idtrace_flags
    • 支持 zap 和 logrus 适配。
    • 可配置 trace-integration.enabled
    • 可配置 record-error-to-span,把 error log 记录到当前 OTel span。

    注意:本地代码里 ZapCtxLogger / LogrusCtxLogger 目前没有实现 OpsLogger.SetLoggerLevel,所以开启 trace integration 后动态调日志级别可能无法通过 logger.SetLoggerLevel 生效。这也是 PR review 里曾指出的问题之一。

  5. Access Log
    /filter/accesslog/filter.go
    支持:

    • 按 service/reference 配置 accesslog
    • true/default 写入默认 logger。
    • 文件路径写入指定 access log 文件。
    • 采集 interface、method、version、group、timestamp、local/remote addr、args/type 等调用信息。
    • 后台异步写入,有 buffer、超时、关闭 drain、文件句柄缓存和按日期轮转。
  6. Kubernetes Probe
    /metrics/probe
    支持:

    • /live/ready/startup,默认端口 22222
    • 可注册自定义 liveness/readiness/startup check。
    • 可使用内部状态:server Serve() 后设置 startup/ready。
    • 优雅关闭时会把 ready 置 false。
  7. 旧 OpenTracing 能力仍保留
    /filter/tracing/filter.go 和 Dubbo/GRPC 相关路径还保留 OpenTracing/Jaeger 逻辑,但 /config/tracing_config.go 已标注 deprecated,方向上是用 OtelConfig 替代。

配置入口

New API 入口主要是:

YAML/Old API 配置入口主要是:

  • dubbo.metrics.*
  • dubbo.otel.tracing.*
  • dubbo.logger.trace-integration.*
  • service/reference 的 accesslog

Samples 状态

apache/dubbo-go-samples#1030 已合并,增加了 logger/trace-integration 示例,展示 log.WithTraceIntegration(true)CtxLogger 用法。

你给的 metrics/prometheus_grafana 当前覆盖:

  • Prometheus + Grafana + Pushgateway + ZooKeeper docker compose。
  • Push 模式:应用 -> Pushgateway -> Prometheus -> Grafana。
  • Pull 模式:应用 -> Prometheus -> Grafana。
  • Grafana dashboard:QPS、成功率、延迟等。
  • Pushgateway “僵尸指标”处理说明,包括应用侧 graceful exit DELETE 和 pgw-cleaner 工具。

整体看,dubbo-go 现在的可观测能力已经比较完整:指标采集和导出是最成熟的一块,OTel trace 已经标准化,最近补上了日志 trace correlation;probe/accesslog 则补齐运行时可诊断和 K8s 运维场景。

Metadata

Metadata

Assignees

No one assigned

    Labels

    3.3.2version 3.3.2improveRefactor or improve
    No fields configured for Feature.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions