首批通过分布式安全可靠测评,为关键业务系统打造
日志
更新时间:2024-07-11 11:41:00
OBServer 的日志存放在 observer 的安装目录的 log 目录下面,分为四种日志 observer.log、rootservice.log、 election.log 和 trace.log,分别对应 OBServer 日志、RS 日志、选举日志和全链路追踪日志。
对于每一种日志,如 observer.log,按照文件名大致分为以下几种:
observer.log
observer.log.20210901123456
observer.log.wf
observer.log.wf.20210901123456
当 observer.log 达到 256M 时,会将其 rename 为第二种日志,后面的数字为时间戳。wf 日志的含义见下文 enable_syslog_wf 配置项。
日志格式
日志格式
[时间] 日志级别 [所属模块] 文件:行号 [线程 ID] [0] [trace_id] [lt] [丢弃日志数量]日志参数信息
参数 描述 时间 记录的时间戳,记录了日志生成的具体日期和时间 日志级别 日志的重要程度或级别 所属模块 日志所属的模块或组件,标识了日志发生的位置和来源 文件:行号 日志记录的源代码文件路径和行号,用于定位日志的源代码位置 线程 ID 生成该日志的线程的唯一标识符,用于区分不同线程产生的日志 0 记录事务 ID 或标识其他与日志相关的信息,[0] 表示该字段的值为 0 trace_id 表示该日志事件的跟踪 ID lt lt 是一个标签,表示该标签的值为上一条日志记录耗费的时间(微秒),表示上一条日志的执行时间 丢弃日志数量 用于记录在生成该条日志之前已经被丢弃的日志数量,表示之前的日志条目因为某种原因被丢弃或没有被记录 日志示例
[2021-09-01 11:31:18.605433] INFO [STORAGE] ob_pg_sstable_garbage_collector.cpp:170 [38715][0][Y0-0000000000000000-0-0] [lt=15] [dc=0] do one gc free sstable by queue(ret=0, free sstable cnt=0)
CRASH 日志
Crash 日志不同于其他日志,该日志只有在系统或应用程序崩溃时生成的日志文件,它记录了崩溃发生时的详细信息。
Crash 日志格式
CRASH ERROR!!! IP=xxx, RBP=xxx, sig=xxx, sig_code=xxx, sig_addr=xxx, RLIMIT_CORE=xxx, timestamp=xxx, tid=xxx, tname=xxx, trace_id=xxx, extra_info=xxx, lbt=xxx, SQL_ID=xxx, SQL_STRING==xxxCrash 日志参数信息
参数 描述 IP 当前正在执行的指令的地址 RBP 标识栈帧的基址,用于定位堆栈的区域 sig 信号,表示触发崩溃的特定信号 sig_code 引发信号的额外信息,提供有关信号类型和原因的详细信息 sig_addr 引发信号的内存地址,指示崩溃发生的位置 RLIMIT_CORE 程序能产生的核心转储(Core Dump)文件的最大大小限制 timestamp 记录 Crash 事件的时间戳,标识崩溃发生的确切时间 tid 线程 ID,标识触发 Crash 的线程的唯一标识符 tname 线程名,表示触发 Crash 的线程的名称 trace_id Crash 事件的跟踪 ID,例如 YXXXXXXXX-000XXXXXXXXXX-0-0 extra_info 额外信息,可能包括与崩溃相关的其他调试信息或上下文信息 lbt Crash 线程的堆栈信息,记录了崩溃发生时的函数调用堆栈 SQL_ID Crash 线程正在执行的 SQL 语句的 SQL ID SQL_STRING Crash 线程正在执行的 SQL 语句的字符串表示 Crash 日志示例
CRASH ERROR!!! IP=7f4b4e45b277, RBP=7f4ae82cbdd0, sig=6, sig_code=-6, sig_addr=0x1505ee0005978f, RLIMIT_CORE=unlimited, timestamp=1712749024610833, tid=505088, tname=T1004_PX_G0, trace_id=YXXXXXXXX-000XXXXXXXXXX-0-0, extra_info=(), lbt=0x35c17118 0x34dd048b 0x7f4b4e80261f 0x7f4b4e45b277 0x7f4b4e45c967 0xa059fee 0x999ce0c 0x35ac9e92 0x97bbee4 0x979ea08 0x977dcf5 0x1d3afab8 0x1d8dde16 0x1d3aeed8 0x94017c7 0x9388f30 0x17dcc38c 0x17dc5492 0x17dc2ab8 0x9388351 0x1a4bbc2c 0x1a4bc772 0x9388351 0x12172da8 0x9388351 0x1217c0c1 0x12412b67 0x1214fa3a 0x1216d567 0x1a63f595 0x1a63d304 0x1a63934b 0x1a63b20d 0x1a6bd01c 0xf73acd7 0x9b598d6 0xf73b301 0x35bf9d0e 0x35bf87c2 0x7f4b4e7fae24 0x7f4b4e522f1c, SQL_ID=AEAB26B02AF74B951385BC00D988E5AC, SQL_STRING=SELECT * FROM (SELECT IFNULL(NULL, (((CAST((NULL) AND (CAST(((-9223372036854775808,7.404792285453929,1729790173) IN ((-922337203
日志级别
从低到高有 7 种:DEBUG、TRACE、WDIAG、EDIAG、INFO、WARN、ERROR。
其中 ERROR 日志比较特殊,会将打日志时所在的堆栈打印出来(需要通过符号表解析)。
注意
开启 DEBUG 日志将耗费大量资源,在较新版本中,DEBUG 日志在 Release 编译下会自动去掉,即使开启也无法生效。
所属模块
有很多种,可以大致区分日志所属模块。
线程 ID
打印日志所在的线程的 ID,可以用于跟踪对应线程的行为,对排查线程 Hang 住、超时等问题比较有用。
TRACE_ID
OceanBase 数据库内部的 SQL 级别的 ID,默认为 Y0-0000000000000000-0-0,可以通过 trace_id 来找到一条 SQL 的执行过程,是排查问题的重要手段。
日志压缩
通过配置项来配置系统日志的压缩,包括设置压缩算法、磁盘空间上限和每种日志不压缩的文件数量。有关日志压缩的详细信息请参见 日志压缩。
日志解压
有以下几种方式可以查看压缩后的日志文件:解压后查看、直接查看压缩文件和使用 obdiag 工具进行搜索。有关日志压缩的详细信息请参见 日志解压。
相关配置项
以下所有配置项均为集群级别,需要在系统租户下使用。可以通过以下方法修改。
obclient> ALTER SYSTEM SET enable_syslog_recycle = False;
enable_syslog_recycle
用于设置是否打开记录启动前的旧日志的开关,默认为 False。与
max_syslog_file_count配合使用,决定回收逻辑是否考虑旧的日志文件。开启后将会自动删除多余的日志,有关
enable_syslog_recycle的详细信息请参见 enable_syslog_recycle。enable_syslog_wf
是否启用 wf 日志,默认为 True。
开启后会每种日志中 WARN 级别以上的日志复制到 wf 日志中,如
observer.log.wf。enable_async_syslog
是否启用异步写日志功能,默认为 True。
关闭后将使用同步方式写日志,可以保证 observer 宕机前写完所有日志,但性能较差,不建议关闭。
max_syslog_file_count
每种日志的最大日志数量,默认为 0。当且仅当该配置项大于 0 且该值大于等于
syslog_file_uncompressed_count值,同时enable_syslog_recycle为 True 时才生效。注意
尽管该配置项的范围是 [0, +∞),但 observer 源码中约束了该值不能超过
MAX_LOG_FILE_COUNT,即 10240,超过时依然可以设置成功但实际生效值为 MAX_LOG_FILE_COUNT。syslog_io_bandwidth_limit
日志限流量,默认为 30M。
注意
当日志打印速度超过限制时,将打印以下信息。
REACH SYSLOG RATE LIMITsyslog_level
打印的日志的最低级别,日志级别见上文,默认为 WDIAG。
syslog_disk_size
系统日志的磁盘空间上限,默认值为 0M。日志可用空间由
syslog_disk_size和实际磁盘空间共同决定,为两者中的最小值。当剩余可用磁盘空间少于 2GB 时,最旧的部分日志文件将会被删除。此外如果开启了日志压缩功能,当剩余可用磁盘空间少于 4GB 时,就会开始压缩日志文件。syslog_compress_func
设置系统日志的压缩算法,默认值为 none,表示关闭压缩功能。可选的压缩算法有
zstd_1.0和zstd_1.3.8算法,设置可用的算法表示开启压缩功能。注意
压缩功能只会压缩以
.log.{timestamp}为后缀的日志,timestamp表示创建文件时的时间戳,带有wf后缀的文件和没有时间戳的文件则不压缩。syslog_file_uncompressed_count
设置系统日志不压缩的文件数量。只在
syslog_compress_func不为 none 时生效,每一种系统日志文件单独计算数量,不包括没有时间戳的日志文件。配置项syslog_compress_func与 配置项syslog_file_uncompressed_count、syslog_disk_size、max_syslog_file_count之间的关系:syslog_compress_func =none:syslog_file_uncompressed_count取值无效;syslog_disk_size和max_syslog_file_count共同控制日志文件上限,同时满足数量和大小限制。
syslog_compress_func !=none:max_syslog_file_count取值无效;- 日志个数超过
syslog_file_uncompressed_count取值的部分进行压缩,整体接近syslog_disk_size取值时开始删除最旧的日志。