Skip to content

监控与可观测性

**本文引用的文件** - [[logger.go]](../file/bi-common/observability/logger/logger.go) - [[json_logger.go]](../file/bi-common/observability/logger/json-logger.go) - [[options.go]](../file/bi-common/observability/logger/options.go) - [[setup.go]](../file/bi-common/observability/logger/setup.go) - [[tracer.go]](../file/bi-common/observability/logger/tracing/tracer.go) - [[metrics.go]](../file/bi-common/observability/metrics/metrics.go) - [[values.yaml]](../file/bi-intra/charts/grafana/values.yaml) - [[_config.tpl]](../file/bi-intra/charts/grafana/templates/config.tpl) - [[apisix-prometheus-global-rule.json]](../file/bi-intra/apisix/apisix-prometheus-global-rule.json) - [[application-dev.yaml]](../file/bi-analysis/configs/application-dev.yaml) - [[config.go]](../file/bi-common/registry/nacos/config.go)

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 组件详解
  6. 依赖关系分析
  7. 性能考量
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件面向BI分析平台的监控与可观测性体系,围绕日志系统、分布式链路追踪、指标采集与告警、Grafana仪表盘与数据源配置、性能关键指标与阈值、日志聚合与检索、运维部署与维护、故障诊断与性能分析、以及扩展与自定义开发进行系统化说明。目标是帮助开发者与运维人员快速理解并落地可观测性能力。

项目结构

可观测性相关能力主要分布在以下模块:

  • 日志系统:统一的日志配置、JSON格式化输出、本地与阿里云SLS双写、轮转与清理
  • 链路追踪:OpenTelemetry TracerProvider初始化、全局字段注入(trace.id/span.id)
  • 指标系统:Prometheus指标定义与记录工具
  • 可视化与告警:Grafana Helm Chart配置、数据源与告警模板
  • 网关与外部集成:APISIX Prometheus插件、Nacos配置中心

图表来源

章节来源

核心组件

  • 结构化日志与JSON规范
    • 支持JSON与文本两种格式;JSON模式下统一输出时间戳、级别与键值对字段
    • 提供多输出Writer(stdout/file),可选每日轮转与压缩
    • 支持本地日志与阿里云SLS双写,失败不影响本地日志
  • 分布式链路追踪
    • 初始化TracerProvider,设置服务资源信息(名称、版本、环境、实例ID)
    • AlwaysSample采样策略,便于日志关联
    • 全局注入trace.id与span.id字段
  • 指标采集与告警
    • 定义HTTP请求、数据库、缓存、业务等指标向量
    • 提供记录函数,便于在业务层埋点
    • Grafana Helm Chart内置数据源与告警模板配置入口
  • 可视化与数据源
    • Grafana数据源配置(Prometheus等)与告警规则模板
    • APISIX全局启用Prometheus插件,暴露网关指标
  • 配置中心与环境
    • Nacos客户端配置与DataIDs管理
    • 开发环境配置示例

章节来源

架构总览

整体可观测性由“日志—追踪—指标—可视化”四层组成,形成闭环:日志承载事件与上下文,追踪串联请求链路,指标量化性能与健康度,可视化呈现并触发告警。

图表来源

组件详解

日志系统:结构化与JSON规范

  • 配置项
    • 日志级别、格式、输出方式(stdout/file/both)、文件轮转参数、阿里云SLS接入
  • 输出行为
    • JSON模式:统一输出时间戳、级别、键值对字段;线程安全写入
    • 文本模式:key=value格式,便于人类阅读
    • 多输出合并:stdout与文件同时输出
    • 每日轮转:基于日期的滚动与清理
  • 阿里云SLS
    • 可选启用,失败不影响本地日志
  • 全局字段
    • 服务信息(名称、版本、实例ID、环境)
    • 调用位置、时间戳
    • 追踪字段(trace.id/span.id)

图表来源

章节来源

分布式链路追踪:初始化与字段注入

  • 初始化
    • 创建TracerProvider,设置服务资源(名称、版本、环境、实例ID)
    • AlwaysSample采样策略,确保日志关联
    • 设置为全局TracerProvider
  • 字段注入
    • 在日志中自动注入trace.id与span.id
    • 通过Kratos中间件Tracing提取上下文

图表来源

章节来源

指标采集与监控告警

  • 指标定义
    • HTTP请求总量/耗时直方图
    • 数据库查询总量/耗时直方图/错误计数
    • 缓存命中/未命中/操作耗时
    • 业务操作总量(模块/操作/状态)
  • 记录方法
    • 提供Record系列函数,按标签维度上报
  • Grafana配置
    • values.yaml中预留datasources与alerting模板入口
    • _config.tpl负责模板渲染与密钥注入

图表来源

章节来源

Grafana仪表板与数据源配置

  • 数据源
    • Prometheus数据源可通过values.yaml配置
    • 支持代理访问与默认数据源设置
  • 告警与通知
    • 通过alerting与notifiers配置文件模板化
    • 支持从文件、Secret或内联配置
  • 下载仪表盘与模板
    • downloadDashboards镜像与环境变量可选

图表来源

章节来源

日志聚合与检索

  • 本地与SLS双写:本地日志用于快速定位,SLS用于集中检索与长期归档
  • JSON结构化:便于解析与检索
  • 轮转与清理:避免磁盘膨胀,支持压缩与按天轮转

章节来源

性能监控关键指标与阈值建议

  • HTTP请求
    • 指标:http_requests_total、http_request_duration_seconds
    • 建议:P95/P99延时阈值按业务SLA设定;错误率(status>=500)阈值接近0
  • 数据库
    • 指标:db_query_total、db_query_duration_seconds、db_query_errors_total
    • 建议:慢查询阈值(如>500ms)与错误率阈值
  • 缓存
    • 指标:cache_hits_total、cache_misses_total、cache_operation_duration_seconds
    • 建议:命中率目标(如>95%),异常抖动阈值
  • 业务
    • 指标:business_operations_total
    • 建议:吞吐量基线与异常波动阈值

章节来源

部署与维护指南

  • 初始化与清理
    • 启动阶段调用MustSetup或Setup,defer Shutdown优雅关闭
    • 通过全局cleanup与shutdown统一管理资源
  • 配置中心
    • Nacos客户端配置与DataIDs管理,开发环境示例见application-dev.yaml
  • 网关指标
    • APISIX启用Prometheus插件,统一暴露网关指标

章节来源

依赖关系分析

  • 组件耦合
    • Setup依赖Tracing与Logger,统一注入服务信息与追踪字段
    • Logger依赖JSON/文本输出与文件轮转
    • 指标与可视化解耦,通过Prometheus导出
  • 外部依赖
    • OpenTelemetry TracerProvider、Kratos日志与中间件
    • Prometheus/Grafana、APISIX、Nacos

图表来源

章节来源

性能考量

  • 日志写入
    • JSON序列化与互斥锁保护,建议在高并发场景控制字段数量与大小
    • 文件轮转采用lumberjack或每日轮转,合理设置MaxSize/MaxAge避免频繁IO
  • 追踪
    • AlwaysSample策略保证日志关联,但会增加trace开销;生产可评估采样率
  • 指标
    • 标签基数控制(如path、table、operation),避免高基数导致内存增长
    • 直方图桶设置应覆盖典型延迟分布

[本节为通用指导,无需特定文件引用]

故障排查指南

  • 日志无法输出/轮转异常
    • 检查输出配置与文件权限;确认轮转参数合理
  • SLS写入失败
    • 查看阿里云SLS配置是否正确;关注初始化错误日志
  • 追踪字段缺失
    • 确认TracerProvider已初始化且为全局;检查中间件是否生效
  • 指标无数据
    • 检查Prometheus抓取配置与服务端点暴露;核对Grafana数据源URL
  • Grafana告警未触发
    • 校验alerting与notifiers模板渲染结果;确认规则表达式与阈值

章节来源

结论

本可观测性方案以“结构化日志+链路追踪+Prometheus指标+Grafana可视化”为核心,结合APISIX与Nacos完善边缘与配置治理,既满足日常问题定位,也支撑生产级监控告警与容量规划。建议在各服务中统一使用MustSetup/Setup初始化,并在业务关键路径埋点指标,持续优化标签与阈值,提升可观测性价值。

[本节为总结,无需特定文件引用]

附录

JSON日志字段规范(建议)

  • 必填字段
    • ts:RFC3339时间戳
    • level:日志级别
    • service.name/service.version/service.id/service.env:服务元信息
    • trace.id/span.id:追踪上下文
  • 可选字段
    • module、operation、status:业务语义
    • region、cluster:运行环境
    • caller:调用位置
    • 其他上下文键值对

章节来源

指标埋点清单(建议)

  • HTTP层:method、path、status
  • DB层:table、operation
  • 缓存层:cache_type、operation
  • 业务层:module、operation、status

章节来源