外观
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.log3. 日志轮转与归档
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. 错误日志分析
错误日志是故障排查的主要依据,分析步骤:
- 定位错误时间:根据业务故障时间点查找对应日志
- 识别错误类型:区分是业务错误还是系统错误
- 提取错误码:根据错误码查找相关文档
- 分析错误上下文:查看错误前后的日志,了解完整场景
- 关联其他日志:结合性能日志、事务日志等进行综合分析
2. 慢查询日志分析
慢查询日志分析步骤:
- 排序慢查询:按执行时间降序排列
- 分析执行计划:查看慢查询的执行计划
- 识别瓶颈点:确定是 CPU、IO 还是锁等待
- 优化建议:根据分析结果提出优化方案
- 验证优化效果:执行优化后验证性能提升
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. 连接失败故障
故障现象:应用无法连接到 OceanBase 数据库
排查步骤:
- 检查 OBProxy 和 OceanBase 服务状态
- 查看连接拒绝日志
- 检查网络连通性
- 检查用户权限和密码
- 检查连接数限制
解决方案:
sql
-- 查看连接数限制
SHOW PARAMETERS LIKE 'max_connections';
-- 调整连接数限制
ALTER SYSTEM SET max_connections = 10000;
-- 查看当前连接数
SELECT COUNT(*) FROM oceanbase.GV$OB_SESSIONS;2. 慢查询故障
故障现象:SQL 查询执行缓慢
排查步骤:
- 查看慢查询日志
- 分析执行计划
- 检查索引使用情况
- 查看锁等待情况
- 检查资源使用情况
解决方案:
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. 副本同步故障
故障现象:副本同步延迟或失败
排查步骤:
- 查看复制日志
- 检查网络连接
- 查看副本状态
- 检查磁盘空间
- 查看系统负载
解决方案:
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: 建立有效日志分析体系的步骤:
- 明确日志分析目标和需求
- 配置全面的日志收集
- 建立日志存储和管理机制
- 配置日志监控和告警
- 建立定期日志分析流程
- 培养专业的日志分析人员
- 持续优化日志分析体系
