Skip to content

OceanBase 日志分析与诊断

日志类型与位置

1. 主要日志类型

OceanBase 数据库包含多种日志类型,用于记录不同层面的系统行为:

日志类型描述主要用途
业务日志记录 SQL 执行情况业务分析、性能优化
审计日志记录用户操作审计安全审计、合规检查
错误日志记录系统错误信息故障排查、问题定位
告警日志记录系统告警信息异常监控、问题预警
性能日志记录系统性能指标性能分析、优化调整
事务日志记录事务执行过程事务分析、一致性检查
复制日志记录副本同步信息复制状态监控、故障排查

2. 日志文件位置

OceanBase 日志文件默认存储在以下位置:

txt
# 集群级日志
oceanbase_data_dir/log/observer.log          # 主日志文件
oceanbase_data_dir/log/election.log           # 选举日志
oceanbase_data_dir/log/storage.log            # 存储层日志
oceanbase_data_dir/log/rootservice.log        # RootService 日志

# 租户级日志
oceanbase_data_dir/log/tenant/tenant_id/      # 租户日志目录
oceanbase_data_dir/log/tenant/tenant_id/sql_audit.log  # SQL 审计日志
oceanbase_data_dir/log/tenant/tenant_id/slow_query.log # 慢查询日志

# OBProxy 日志
oceanbase_proxy_dir/log/obproxy.log           # OBProxy 主日志
oceanbase_proxy_dir/log/obproxy_error.log     # OBProxy 错误日志

日志查看与检索

1. 使用内置命令查看日志

sql
-- 查看系统日志
ALTER SYSTEM FLUSH LOGS;

-- 查看错误日志
SELECT * FROM oceanbase.GV$OB_ERROR_LOG ORDER BY log_time DESC LIMIT 100;

-- 查看慢查询日志
SELECT * FROM oceanbase.GV$OB_SLOW_QUERY ORDER BY query_time DESC LIMIT 100;

-- 查看审计日志
SELECT * FROM oceanbase.GV$OB_AUDIT_LOG ORDER BY event_time DESC LIMIT 100;

2. 使用日志查看工具

bash
# 查看最新日志
tail -f oceanbase_data_dir/log/observer.log

# 搜索关键字
grep -i "error" oceanbase_data_dir/log/observer.log

# 查看特定时间范围的日志
grep "2024-01-18 10:" oceanbase_data_dir/log/observer.log

# 实时监控多个日志文件
multitail oceanbase_data_dir/log/observer.log oceanbase_data_dir/log/storage.log

3. 日志轮转与归档

bash
# 手动触发日志轮转
ob_admin log_rotate

# 查看日志轮转配置
cat oceanbase_data_dir/etc/observer.config.bin | grep log_rotate

# 设置日志保留时间
ALTER SYSTEM SET max_syslog_file_count = 100;
ALTER SYSTEM SET max_syslog_keep_time = 7;

日志分析方法

1. 错误日志分析

错误日志是故障排查的主要依据,分析步骤:

  1. 定位错误时间:根据业务故障时间点查找对应日志
  2. 识别错误类型:区分是业务错误还是系统错误
  3. 提取错误码:根据错误码查找相关文档
  4. 分析错误上下文:查看错误前后的日志,了解完整场景
  5. 关联其他日志:结合性能日志、事务日志等进行综合分析

2. 慢查询日志分析

慢查询日志分析步骤:

  1. 排序慢查询:按执行时间降序排列
  2. 分析执行计划:查看慢查询的执行计划
  3. 识别瓶颈点:确定是 CPU、IO 还是锁等待
  4. 优化建议:根据分析结果提出优化方案
  5. 验证优化效果:执行优化后验证性能提升

3. 性能日志分析

性能日志分析重点:

  • CPU 使用率:查看 CPU 瓶颈
  • 内存使用:分析内存泄漏或过度使用
  • IO 统计:查看磁盘读写瓶颈
  • 网络流量:分析网络瓶颈
  • 连接数:查看连接池使用情况
  • 锁等待:分析锁竞争情况

日志分析工具

1. 内置分析工具

sql
-- 查看系统负载
SELECT * FROM oceanbase.GV$OB_SYSLOAD ORDER BY sample_time DESC LIMIT 10;

-- 查看会话信息
SELECT * FROM oceanbase.GV$OB_SESSIONS WHERE state = 'ACTIVE';

-- 查看事务状态
SELECT * FROM oceanbase.GV$OB_TRANSACTIONS WHERE status = 'RUNNING';

-- 查看锁等待
SELECT * FROM oceanbase.GV$OB_LOCK_WAITS;

2. 命令行工具

bash
# 使用 obdiag 工具分析日志
obdiag analyze log --cluster observer.log

# 使用 obadmin 工具查看日志
obadmin log show --type error --limit 100

# 使用 obclient 执行内置视图查询
obclient -h127.0.0.1 -P2881 -uroot -p -Doceanbase -e "SELECT * FROM GV$OB_ERROR_LOG LIMIT 10;"

3. 第三方分析工具

  • ELK Stack:Elasticsearch + Logstash + Kibana,用于日志集中管理和分析
  • Prometheus + Grafana:用于性能指标监控和可视化
  • Splunk:企业级日志分析平台
  • Graylog:开源日志管理平台

故障排查流程

1. 故障分类与定位

根据日志特征,将故障分为以下几类:

  • 连接类故障:连接超时、连接拒绝等
  • SQL 执行故障:SQL 语法错误、执行超时等
  • 性能类故障:响应缓慢、吞吐量下降等
  • 数据一致性故障:数据丢失、不一致等
  • 硬件故障:磁盘损坏、网络中断等

2. 故障排查步骤

  1. 收集信息

    • 故障发生时间
    • 故障现象描述
    • 相关业务影响
    • 系统配置信息
  2. 检查日志

    • 查看错误日志
    • 查看告警日志
    • 查看性能日志
    • 查看相关业务日志
  3. 分析问题

    • 识别错误类型和错误码
    • 分析错误上下文
    • 关联相关日志和指标
    • 确定根本原因
  4. 制定解决方案

    • 提出临时解决方案
    • 制定长期修复方案
    • 评估方案风险和影响
  5. 实施修复

    • 执行修复操作
    • 验证修复效果
    • 监控系统状态
  6. 总结与预防

    • 记录故障原因和解决方案
    • 提出预防措施
    • 更新监控和告警配置

常见故障场景分析

1. 连接失败故障

故障现象:应用无法连接到 OceanBase 数据库

排查步骤

  1. 检查 OBProxy 和 OceanBase 服务状态
  2. 查看连接拒绝日志
  3. 检查网络连通性
  4. 检查用户权限和密码
  5. 检查连接数限制

解决方案

sql
-- 查看连接数限制
SHOW PARAMETERS LIKE 'max_connections';

-- 调整连接数限制
ALTER SYSTEM SET max_connections = 10000;

-- 查看当前连接数
SELECT COUNT(*) FROM oceanbase.GV$OB_SESSIONS;

2. 慢查询故障

故障现象:SQL 查询执行缓慢

排查步骤

  1. 查看慢查询日志
  2. 分析执行计划
  3. 检查索引使用情况
  4. 查看锁等待情况
  5. 检查资源使用情况

解决方案

sql
-- 查看慢查询
SELECT * FROM oceanbase.GV$OB_SLOW_QUERY ORDER BY query_time DESC LIMIT 10;

-- 分析执行计划
EXPLAIN SELECT * FROM large_table WHERE column1 = 'value';

-- 创建索引优化查询
CREATE INDEX idx_column1 ON large_table(column1);

3. 副本同步故障

故障现象:副本同步延迟或失败

排查步骤

  1. 查看复制日志
  2. 检查网络连接
  3. 查看副本状态
  4. 检查磁盘空间
  5. 查看系统负载

解决方案

sql
-- 查看副本状态
SELECT * FROM oceanbase.GV$OB_REPLICA_STATUS WHERE status != 'NORMAL';

-- 查看同步延迟
SELECT * FROM oceanbase.GV$OB_REPLICA_LAG;

-- 修复副本
ALTER SYSTEM REPAIR REPLICA ON table_name PARTITION partition_name;

日志分析最佳实践

1. 日志配置最佳实践

  • 合理设置日志级别:生产环境建议使用 WARNING 或 ERROR 级别
  • 配置适当的日志保留策略:根据磁盘空间和合规要求设置保留时间
  • 启用必要的审计日志:根据安全需求配置审计日志
  • 设置合理的慢查询阈值:根据业务特点调整慢查询阈值

2. 日志监控最佳实践

  • 实时监控日志:配置实时日志监控和告警
  • 定期分析日志:建立定期日志分析机制
  • 设置关键指标告警:对重要日志事件设置告警
  • 建立日志基线:了解正常情况下的日志模式

3. 故障排查最佳实践

  • 保持冷静,系统分析:避免盲目操作,系统分析问题
  • 从外到内,逐步深入:从业务层开始,逐步深入到系统层
  • 收集完整信息:确保收集足够的信息进行分析
  • 记录排查过程:详细记录排查步骤和结果
  • 验证解决方案:修复后务必验证效果

常见问题(FAQ)

Q1: 如何快速定位日志中的错误信息?

A1: 快速定位错误信息的方法:

  • 使用 grep 命令搜索关键字(ERROR、FATAL、WARN)
  • 根据时间范围过滤日志
  • 使用日志分析工具进行可视化分析
  • 建立错误日志告警机制

Q2: 如何处理大量日志文件?

A2: 处理大量日志文件的方法:

  • 配置合理的日志轮转策略
  • 设置适当的日志保留时间
  • 使用日志压缩减少存储空间
  • 定期归档历史日志
  • 使用分布式日志系统集中管理

Q3: 如何区分业务错误和系统错误?

A3: 区分业务错误和系统错误的方法:

  • 业务错误通常包含 SQL 错误码和业务逻辑信息
  • 系统错误通常包含内部错误码和系统组件信息
  • 查看错误上下文,了解错误发生的场景
  • 结合其他日志进行综合分析

Q4: 如何优化日志性能?

A4: 优化日志性能的方法:

  • 降低不必要的日志级别
  • 减少日志输出频率
  • 使用异步日志写入
  • 优化日志文件存储配置
  • 合理设置日志缓冲大小

Q5: 如何建立有效的日志分析体系?

A5: 建立有效日志分析体系的步骤:

  1. 明确日志分析目标和需求
  2. 配置全面的日志收集
  3. 建立日志存储和管理机制
  4. 配置日志监控和告警
  5. 建立定期日志分析流程
  6. 培养专业的日志分析人员
  7. 持续优化日志分析体系