observer日志格式文档内容不完整

【 使用环境 】测试环境
【 OB or 其他组件 】observer
【 使用版本 】4.2.1.8
【问题描述】目前尝试将observer.log传到内部elk,需要进行字段解析,参考官方文档 https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000218588, 发现官方文档中有部分字段的描述未给出, 希望能给出完整的字段描述。同时希望给出obproxy.log,obproxy_slow.log的日志描述,感谢

【复现路径】问题出现前后相关操作
【附件及日志】

  • 官方文档给出了以下字段

  • 实际字段
[2025-05-19 20:22:42.885612] INFO  [PALF] inner_append_log (palf_handle_impl.cpp:2219) [5974][T1_IOWorker][T1][Y0-0000000000000000-0-0] [lt=8] [PALF STAT INNER APPEND LOG SIZE](this={palf_id:1, self:"10.191.143.82:2882", has_set_deleted:false}, accum_size=3672)
[2025-05-19 20:22:42.889611] INFO  [SERVER] runTimerTask (ob_eliminate_task.cpp:222) [6094][T1_ReqMemEvict][T1][Y0-0000000000000000-0-0] [lt=26] sql audit evict task end(request_manager_->get_tenant_id()=1, evict_high_mem_level=323254704, evict_high_size_level=9000000, evict_batch_count=0, elapse_time=0, size_used=155360, mem_used=293243904)
[2025-05-19 20:22:42.900194] INFO  [STORAGE.BLKMGR] inspect_bad_block (ob_block_manager.cpp:1700) [5795][BlkMgr][T0][Y0-0000000000000000-0-0] [lt=19] check macro block(block_info={ref_cnt:1, is_free:false, access_time:1747159259819524}, time_interval=498103080668)
1 个赞

@论坛小助手

根据您的问题描述,您希望获取更详细的 observer.logobproxy.logobproxy_slow.log 的日志格式说明。以下是基于现有文档和信息的解答:


1. 关于 observer.log 的字段解析

根据您提供的实际日志内容和官方文档中的部分字段描述,以下是对 observer.log 日志格式的详细解析:

日志基本结构

[时间戳] 日志级别 [模块名] 函数名 (文件名:行号) [线程ID][子线程类型][子线程ID][全局事务ID] [lt=延迟时间] 日志内容

字段含义

  • 时间戳:日志生成的时间,格式为 [YYYY-MM-DD HH:MM:SS.ssssss]
  • 日志级别:日志的严重程度,从低到高有以下几种:DEBUGTRACEWDIAGEDIAGINFOWARNERROR
    • 特别注意:ERROR 级别的日志会打印堆栈信息(需要通过符号表解析)。
  • 模块名:日志所属的功能模块,例如 [PALF][SERVER][STORAGE.BLKMGR] 等。
  • 函数名:触发日志的函数名称,例如 inner_append_logrunTimerTask 等。
  • 文件名:行号:触发日志的代码位置,例如 palf_handle_impl.cpp:2219
  • 线程ID:日志生成时所在的线程 ID。
  • 子线程类型:线程的具体类型,例如 T1_IOWorkerT1_ReqMemEvict 等。
  • 子线程ID:子线程的唯一标识。
  • 全局事务ID:格式为 Y0-XXXXXXXXXXXXXXXX-XXXXXX-XXXXXX,表示全局事务的唯一标识。
  • lt=延迟时间:日志记录的延迟时间(单位为毫秒)。
  • 日志内容:具体的日志信息,包含变量值、状态等。

示例解析

以您提供的日志为例:

[2025-05-19 20:22:42.885612] INFO  [PALF] inner_append_log (palf_handle_impl.cpp:2219) [5974][T1_IOWorker][T1][Y0-0000000000000000-0-0] [lt=8] [PALF STAT INNER APPEND LOG SIZE](this={palf_id:1, self:"10.191.143.82:2882", has_set_deleted:false}, accum_size=3672)
  • 时间戳:2025-05-19 20:22:42.885612
  • 日志级别:INFO
  • 模块名:[PALF]
  • 函数名:inner_append_log
  • 文件名:行号:palf_handle_impl.cpp:2219
  • 线程ID:5974
  • 子线程类型:T1_IOWorker
  • 子线程ID:T1
  • 全局事务ID:Y0-0000000000000000-0-0
  • 延迟时间:8ms
  • 日志内容:PALF STAT INNER APPEND LOG SIZE,包含变量 palf_id:1self:"10.191.143.82:2882"has_set_deleted:falseaccum_size=3672

2. 关于 obproxy.logobproxy_slow.log 的日志描述

obproxy.log

obproxy.log 是 OBProxy 的主要日志文件,记录了 OBProxy 的运行状态和请求处理过程。其日志格式如下:

[时间戳] [日志级别] [模块名] [线程ID] [客户端IP:端口] [逻辑库名] [物理库信息(cluster:tenant:database)] [数据库类型] [SQL命令] [SQL类型] [SQL语句]

字段含义

  • 时间戳:日志生成的时间。
  • 日志级别:同 observer.log
  • 模块名:OBProxy 的功能模块,例如 [PROXY][ROUTER] 等。
  • 线程ID:日志生成时所在的线程 ID。
  • 客户端IP:端口:发起请求的客户端地址和端口。
  • 逻辑库名:客户端连接的逻辑数据库名称。
  • 物理库信息:格式为 cluster:tenant:database,表示物理数据库的集群、租户和数据库名称。
  • 数据库类型:取值为 OBRDS
  • SQL命令:SQL 请求的类型,例如 COM_QUERYCOM_STMT_PREPARE 等。
  • SQL类型:SQL 的操作类型,例如 SELECTINSERT 等。
  • SQL语句:具体的 SQL 请求内容。

示例解析

2020-03-18 21:26:54.871053 [INFO] [PROXY] [1234] [192.168.1.1:3306] [test_db] [cluster1:tenant1:db1] [OB] [COM_QUERY] [SELECT] SELECT id, gmt_create FROM table WHERE id = 1;
  • 时间戳:2020-03-18 21:26:54.871053
  • 日志级别:INFO
  • 模块名:[PROXY]
  • 线程ID:1234
  • 客户端IP:端口:192.168.1.1:3306
  • 逻辑库名:test_db
  • 物理库信息:cluster1:tenant1:db1
  • 数据库类型:OB
  • SQL命令:COM_QUERY
  • SQL类型:SELECT
  • SQL语句:SELECT id, gmt_create FROM table WHERE id = 1;

obproxy_slow.log

obproxy_slow.log 记录了 OBProxy 处理的慢查询日志,其格式与 obproxy.log 类似,但额外包含执行时间和 Trace 信息。

[时间戳] [日志级别] [模块名] [线程ID] [客户端IP:端口] [逻辑库名] [物理库信息(cluster:tenant:database)] [数据库类型] [SQL命令] [SQL类型] [SQL语句] [执行时间] [Trace信息]

字段含义

  • 执行时间:SQL 请求的执行时间(单位为毫秒)。
  • Trace信息:慢查询的 Trace 信息,用于定位性能瓶颈。

示例解析

2020-03-18 21:26:54.871053 [WARN] [PROXY] [1234] [192.168.1.1:3306] [test_db] [cluster1:tenant1:db1] [OB] [COM_QUERY] [SELECT] SELECT id, gmt_create FROM table WHERE id = 1; [执行时间=100ms] [Trace信息=...]

3. 总结

  • 对于 observer.log,您可以参考上述字段解析进行 ELK 中的日志字段提取。
  • 对于 obproxy.logobproxy_slow.log,提供了详细的日志格式和字段含义。
  • 如果仍有未覆盖的字段或特殊场景,请提供更多具体日志示例,我们将进一步分析。

如需更详细的日志格式说明,建议参考官方文档或联系 OceanBase 技术支持团队获取最新资料。

具体信息可参考以下文档:

  1. 遇到问题如何向技术支持同学提问
  2. Redo 日志
  3. OceanBase 生态工具介绍
  4. 迁移同步相关生态组件介绍
  5. 内存相关日志
  6. GV$SQL_PLAN_MONITOR
  7. 日志与监控
  8. 日志归档概述
1 个赞

参考小助手的回答即可

obproxy.log 内容示例

[2025-05-20 15:38:22.792848] INFO  [PROXY.SS] do_io_close (ob_mysql_client_session.cpp:828) [4955][Y0-00007FF54D5175D0] [lt=0] [dc=0] client session do_io_close(client session do_io_close(*this={this:0x7ff54d9525b0, is_proxy_mysql_client:false, is_waiting_trans_first_request:false, need_delete_cluster:false, is_first_dml_sql_got:false, vc_ready_killed:false, active:true, magic:19132429, conn_decrease:true, current_tid:4955, cs_id:60132, proxy_sessid:0, session_info:{is_inited:true, priv_info:{has_all_privilege:false, cs_id:4294967295, user_priv_set:-1, cluster_name:"", tenant_name:"", user_name:""}, version:{common_hot_sys_var_version:0, common_sys_var_version:0, mysql_hot_sys_var_version:0, mysql_sys_var_version:0, hot_sys_var_version:0, sys_var_version:0, user_var_version:0, db_name_version:0, last_insert_id_version:0, sess_info_version:0}, hash_version:{common_hot_sys_var_version:0, common_sys_var_version:0, mysql_hot_sys_var_version:0, mysql_sys_var_version:0, hot_sys_var_version:0, sys_var_version:0, user_var_version:0, db_name_version:0, last_insert_id_version:0, sess_info_version:0}, val_hash:{common_hot_sys_var_hash:0, common_cold_sys_var_hash:0, mysql_hot_sys_var_hash:0, mysql_cold_sys_var_hash:0, hot_sys_var_hash:0, cold_sys_var_hash:0, user_var_hash:0}, global_vars_version:-1, is_global_vars_changed:false, is_trans_specified:false, is_user_idc_name_set:false, is_read_consistency_set:false, idc_name:"", cluster_id:-1, real_meta_cluster_name:"", safe_read_snapshot:0, syncing_safe_read_snapshot:0, route_policy:1, proxy_route_policy:7, user_identity:0, global_vars_version:-1, is_read_only_user:false, is_request_follower_user:false, obproxy_force_parallel_query_dop:1, ob20_request:{remain_payload_len:0, ob20_request_received_done:false, ob20_header:{ob 20 protocol header:{compressed_len:0, seq:0, non_compressed_len:0}, magic_num:0, header_checksum:0, connection_id:0, request_id:0, pkt_seq:0, payload_len:0, version:0, flag_.flags:0, reserved:0}}, client_cap:0, server_cap:0, last_server_addr:{*Not IP address [0]*:0}, last_server_sess_id:0, init_sql:"", lock_session_num:0}, dummy_ldc:{use_ldc:false, idc_name:"", item_count:0, site_start_index_array:[[0]0, [1]0, [2]0, [3]0], item_array:null, pl:null, ts:null, readonly_exist_status:"READONLY_ZONE_UNKNOWN"}, dummy_entry:null, server_state_version:0, cur_ss:null, bound_ss:null, lii_ss:null, lock_ss:null, closed_key_ss:null, cluster_resource:NULL, client_vc:0x7ff54d510080, using_ldg:false, using_service_name:false, trace_stats:NULL}, client_vc_=0x7ff54d510080, this=0x7ff54d9525b0)
[2025-05-20 15:38:22.792905] INFO  [PROXY.CS] destroy (ob_mysql_client_session.cpp:98) [4955][Y0-00007FF54D5175D0] [lt=0] [dc=0] client session destroy(cs_id=60132, proxy_sessid=0, client_vc=NULL)
[2025-05-20 15:38:22.792920] INFO  [PROXY.SM] kill_this (ob_mysql_sm.cpp:10438) [4955][Y0-00007FF54D5175D0] [lt=0] [dc=0] deallocating sm(sm_id=298340)
  • 另外求一下rootservice.log的字段描述,在github没有找到

日志格式描述

OceanBase 数据库的日志格式采用统一结构,其头部内容包含以下字段:

[时间] 日志级别 [所属模块] 函数名 (源文件路径:行号) [线程 ID] [协程 ID] [Trace ID] [lt=上一条日志耗时(微秒)] [dc=丢弃日志数量]

字段含义

  1. 时间
  • 记录了日志生成的具体日期和时间,精确到微秒。
  • 示例:[2022-04-29 16:39:55.186527]
  1. 日志级别
  • 表示日志的重要程度或级别,从低到高有如下几种:
    • DEBUG、TRACE、WDIAG、EDIAG、INFO、WARN、ERROR。
  • 示例:INFO, WARN, ERROR
  1. 所属模块
  • 标识了日志发生的位置和来源,例如 COMMONSTORAGE 等。
  • 示例:[COMMON]
  1. 函数名
  • 打印日志的函数名称。
  • 示例:get_file_id_range
  1. 源文件路径:行号
  • 日志记录的源代码文件路径及行号,用于定位日志对应的代码位置。
  • 示例:(ob_log_file_group.cpp:127)
  1. 线程 ID
  • 生成该日志的线程唯一标识符。
  • 示例:[103594]
  1. 协程 ID
  • 协程 ID,如果无特别需求一般为 [0]
  • 示例:[0]
  1. Trace ID
  • 用于跟踪任务的唯一标识符,可以通过此 ID 跟踪一个任务的所有日志数据。
  • 示例:[Y0-0000000000000000-0-0]
  1. 上一条日志耗时 (lt)
  • 上一条日志处理的时间(单位:微秒),包括异步日志写入磁盘的时间。
  • 示例:[lt=17]
  1. 丢弃日志数量 (dc)
  • 在本条日志生成之前被丢弃的日志条目数。
  • 示例:[dc=0]

日志消息体

在头部之后是具体的日志信息,通常由描述文本和参数组成,形式如下:

max file does not exist(max_file_id=4, b_exist=false)

这部分主要描述事件的原因、解决方案以及相关的键值对参数。

典型日志示例

下面是典型的 rootservice.log 中一行日志的内容:

[2022-04-29 16:39:55.186527] WARN [COMMON] get_file_id_range (ob_log_file_group.cpp:127) [103594] [0] [Y0-0000000000000000-0-0] [lt=17] [dc=0] max file does not exist(max_file_id=4, b_exist=false)

obproxy的参考这篇文章
https://open.oceanbase.com/blog/10900324