跳到主要内容

日志分析与监控

目录

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

简介

本指南面向 yudao-cloud 项目的运维与开发人员,系统讲解日志与监控体系,涵盖系统日志、应用日志、数据库日志、中间件日志的查看与分析方法;详解操作日志(Operate Log)与 API 访问日志(Api Access Log)的结构与含义;提供 Elasticsearch、TDengine 等检索与时序数据库的使用要点;说明 Prometheus 与 Grafana 的对接与配置;并通过真实案例给出日志分析思路与性能优化建议。

项目结构

围绕日志与监控的关键位置与文件:

  • 文档与说明
    • docs/infra/api-log.md:API 日志模块的使用与字段说明
    • docs/infra/monitor.md:监控中心概览与 Redis/MySQL 面板说明
    • docs/test/tdengine.md:TDengine 乱序写入导致存储膨胀与归档方案
  • 配置与接入
    • deploy/yml/prod/application-common.yaml:Actuator、日志级别、ES 连接、Kafka 主题等
    • deploy/yml/prod/datasource.yaml:Druid 监控、多数据源、TDengine 连接串
  • 组件与控制器
    • yudao-module-infra/infra-biz/.../PrometheusController.java:Prometheus 服务发现与告警接收
    • yudao-framework/.../HttpLogConfig.java:HTTP 请求日志开关与动态刷新
  • 检索与时序
    • sql/elasticsearch/*.json:ES 索引模板与示例数据
    • sql/tdengine/*.sql:TDengine 表结构与监控表

Mermaid Diagram Code:

graph TB
subgraph "文档与说明"
A1["docs/infra/api-log.md"]
A2["docs/infra/monitor.md"]
A3["docs/test/tdengine.md"]
end
subgraph "配置与接入"
C1["application-common.yaml"]
C2["datasource.yaml"]
end
subgraph "组件与控制器"
P1["PrometheusController.java"]
W1["HttpLogConfig.java"]
end
subgraph "检索与时序"
E1["elasticsearch/base.json"]
E2["elasticsearch/app_install_device.json"]
T1["tdengine/app_runtime.sql"]
T2["tdengine/device_runtime.sql"]
T3["tdengine/monitor.sql"]
end
A1 --> C1
A2 --> C2
A3 --> T1
A3 --> T2
A3 --> T3
C1 --> P1
C1 --> E1
C1 --> E2
C2 --> T1
C2 --> T2
C2 --> T3

图表来源

章节来源

核心组件

  • API 日志模块:提供访问日志与错误日志的查询、筛选、导出与处理状态管理,支撑接口性能与异常追踪。
  • 监控中心:集成 Redis、MySQL(Druid)监控面板,并预留其他中间件(Jenkins、Kafka、Elasticsearch、Nacos、XXL-Job、Grafana、Docker)的接入点。
  • Prometheus 对接:通过 Actuator 暴露端点与服务发现接口,支持 Prometheus 抓取与告警回调。
  • Elasticsearch 集成:配置 ES 连接与索引策略,结合 Easy-Es 自动化索引与同步。
  • TDengine 时序:提供 app_runtime、device_runtime、monitor 等表结构,支撑设备与应用运行时长、访问监控等场景。
  • 日志级别与动态开关:通过 HttpLogConfig 动态控制需要打印详细日志的 URL 列表,便于问题定位与性能权衡。

章节来源

架构总览

下图展示日志与监控在 yudao-cloud 中的整体交互:API 日志与访问日志由各业务模块产生并通过统一入口呈现;Prometheus 通过 Actuator 与服务发现抓取指标;Elasticsearch 与 TDengine 分别承载搜索与时序数据;Druid 监控 MySQL 性能与慢 SQL。

Mermaid Diagram Code:

graph TB
subgraph "应用层"
M1["业务模块"]
M2["基础设施模块"]
end
subgraph "日志与检索"
L1["API 日志/访问日志"]
L2["Elasticsearch"]
L3["TDengine"]
end
subgraph "监控与告警"
P["Prometheus"]
G["Grafana"]
D["Druid(MySQL)"]
R["Redis 监控"]
end
M1 --> L1
M2 --> L1
L1 --> L2
L1 --> L3
M1 --> D
M2 --> R
P --> M1
P --> M2
G --> P

图表来源

详细组件分析

API 日志(访问日志与错误日志)

  • 访问日志:记录正常请求的用户、应用、请求方法、URL、时间、耗时、结果、模块、操作名与类型等字段,支持按用户、用户类型、应用名、请求时间、执行时长、结果码等条件检索。
  • 错误日志:记录异常发生时间、异常名、处理状态(未处理/已处理/已忽略),支持查看详情与处理操作。
  • 导出与注意事项:支持导出 Excel;建议定期清理日志数据,及时处理错误日志以保证系统稳定性。

Mermaid Diagram Code:

sequenceDiagram
participant U as "用户"
participant UI as "API 日志界面"
participant S as "后端服务"
participant DB as "日志存储"
U->>UI : 查询访问/错误日志
UI->>S : 发起查询请求(含筛选条件)
S->>DB : 读取日志数据
DB-->>S : 返回日志列表
S-->>UI : 呈现列表与详情
UI-->>U : 展示字段与导出

图表来源

章节来源

监控中心(Redis、MySQL/Druid、其他中间件)

  • Redis 监控:展示版本、运行模式、端口、客户端数、运行时长、内存/CPU、持久化状态、Key 数量、网络入口/出口等基本信息与命令统计、内存使用仪表盘。
  • MySQL/Druid:提供数据源、SQL 监控(含慢 SQL)、SQL 防火墙、Web 应用、URI 监控、Session 监控等功能。
  • 其他集成:Jenkins、Kafka、Elasticsearch、Nacos、XXL-Job、Grafana、Docker 等面板(需额外配置)。

Mermaid Diagram Code:

flowchart TD
Start["进入监控中心"] --> Choice{"选择监控类型"}
Choice --> |Redis| R["Redis 监控面板"]
Choice --> |MySQL/Druid| D["Druid 监控面板"]
Choice --> |其他| O["第三方监控面板"]
R --> End["查看指标与图表"]
D --> End
O --> End

图表来源

章节来源

Prometheus 与 Grafana 对接

  • 服务发现:PrometheusController 暴露 /actuator/prometheus/sd,返回服务实例列表与标签,供 Prometheus 抓取。
  • 告警回调:接收外部告警消息并记录日志,便于审计与二次处理。
  • Actuator 暴露:application-common.yaml 中开启 /actuator 暴露所有端点,便于 Prometheus 抓取健康与指标。

Mermaid Diagram Code:

sequenceDiagram
participant P as "Prometheus"
participant C as "PrometheusController"
participant DC as "DiscoveryClient"
participant S as "服务实例"
P->>C : GET /actuator/prometheus/sd
C->>DC : 获取服务列表与实例
DC-->>C : 返回实例列表
C-->>P : 返回 targets 与 labels
P->>S : 抓取指标
P->>C : POST /actuator/prometheus/alerts
C-->>P : 200 OK

图表来源

章节来源

Elasticsearch 检索与索引

  • 连接与配置:application-common.yaml 中配置 ES 地址、认证、超时、连接数、索引策略(平滑/非平滑、刷新策略、是否跟踪 total hits 等)。
  • 索引模板:sql/elasticsearch/base.json 与 app_install_device.json 提供基础索引结构与示例,便于快速建模与查询。
  • 使用建议:结合业务字段设计 mapping,合理设置刷新策略与批量写入,避免频繁重建索引造成抖动。

Mermaid Diagram Code:

flowchart TD
A["业务数据"] --> B["Easy-Es 自动索引"]
B --> C["ES 索引"]
C --> D["查询与分析"]

图表来源

章节来源

TDengine 时序与归档

  • 表结构:app_runtime、device_runtime、monitor 等表支撑设备与应用运行时长、访问监控等场景。
  • 乱序写入问题:TDengine 对时间有序性高度敏感,乱序写入会导致压缩比恶化、磁盘占用飙升。
  • 归档方案:通过 XXL-Job 调度,按天导出 CSV 并压缩,再以多线程批量有序重写入归档库,实现“热数据乱序写入 -> 定期 ETL 清洗 -> 归档数据有序重写”。

Mermaid Diagram Code:

flowchart TD
S["XXL-Job 调度中心"] --> J["Java 归档任务"]
J --> B["按天导出与压缩"]
B --> W["有序批量重写入"]
W --> M["MySQL 记录归档状态"]

图表来源

章节来源

日志级别与动态开关

  • HttpLogConfig:通过 http.log.printUrls 配置需要打印详细日志的 URL 列表,支持 Nacos 动态刷新,便于在问题定位与性能之间平衡。

Mermaid Diagram Code:

flowchart TD
Cfg["http.log.printUrls"] --> Init["初始化加载"]
Init --> Refresh["环境变更事件触发刷新"]
Refresh --> Apply["SpringUtils.NEED_LOG_URL 更新"]

图表来源

章节来源

依赖关系分析

  • 配置依赖
    • application-common.yaml 中的 management.endpoints.web.exposure.include:* 与 easy-es.、spring.kafka.、spring.redis.* 等配置直接影响日志采集、检索与监控抓取。
    • datasource.yaml 中的 druid 与多数据源配置决定 MySQL/Druid 监控与慢 SQL 记录。
  • 组件耦合
    • PrometheusController 依赖 DiscoveryClient 获取服务实例,耦合服务注册中心。
    • HttpLogConfig 依赖 Spring Environment 与 Nacos 动态刷新,耦合配置中心。
  • 外部依赖
    • Elasticsearch 与 TDengine 作为外部存储,通过 JDBC/RESTful 驱动接入,受网络与认证影响。

Mermaid Diagram Code:

graph LR
AC["application-common.yaml"] --> PC["PrometheusController"]
AC --> ES["Elasticsearch 配置"]
AC --> KF["Kafka 主题"]
DS["datasource.yaml"] --> DR["Druid 监控"]
DS --> TD["TDengine 连接"]
HC["HttpLogConfig"] --> APP["应用日志输出"]

图表来源

章节来源

性能考量

  • Elasticsearch
    • 合理设置刷新策略与批量写入,避免频繁重建索引;根据业务字段设计 mapping,减少字段爆炸。
    • 使用 app_install_device.json 等模板快速建模,统一字段命名与类型。
  • TDengine
    • 尽量保持写入时间有序,避免乱序导致压缩比恶化与磁盘膨胀;对“隔天上报”类数据采用归档方案,定期 ETL 清洗并有序重写。
    • 利用 TTL 自动过期与关键数据抽样,降低实时库压力。
  • MySQL/Druid
    • 开启慢 SQL 记录与 SQL 防火墙,定期巡检慢查询;合理配置连接池参数,避免连接风暴。
  • 日志与监控
    • 通过 HttpLogConfig 精准控制日志输出范围,避免过度 IO;结合 Prometheus/Grafana 实时观测 CPU、内存、磁盘、网络等指标,提前预警。

[本节为通用指导,无需列出具体文件来源]

故障排查指南

  • API 日志
    • 若访问日志缺失:检查日志模块是否启用、筛选条件是否过严、导出权限是否具备。
    • 错误日志未及时处理:关注处理状态字段,定期巡检未处理/已忽略状态,形成闭环。
  • Elasticsearch
    • 索引重建卡顿:检查 application-common.yaml 中的索引策略与刷新策略,必要时切换为非平滑模式。
    • 查询性能差:核对 mapping 与查询 DSL,避免 wildcard 与 nested 查询滥用。
  • TDengine
    • 存储膨胀:确认是否存在大量乱序写入,评估归档方案执行频率与数据清洗质量。
    • 写入延迟:检查 Kafka 主题与消费者组配置,确保消息队列不堆积。
  • 监控与告警
    • Prometheus 抓取失败:确认 /actuator 暴露端点与服务发现接口返回的 targets 正确;检查网络连通与认证。
    • Grafana 仪表盘空白:核对 Prometheus 数据源配置与查询语句,确保指标标签一致。

章节来源

结论

yudao-cloud 的日志与监控体系以 API 日志与监控中心为基础,结合 Prometheus/Grafana 实现可观测性,通过 Elasticsearch 与 TDengine 满足搜索与时序需求。针对 TDengine 的乱序写入问题,建议采用“热数据乱序写入 + 定期 ETL 清洗 + 归档库有序重写”的归档方案,并配合 Druid 监控与日志动态开关,实现稳定高效的线上运维。

[本节为总结性内容,无需列出具体文件来源]

附录

章节来源

用户文档
AI 助手
Agent 列表
请选择一个 Agent 开始对话
AI 问答