sdbdiag.log 是 SequoiaDB 的诊断日志。它记录了数据库系统里边发生的事件、警告和错误。
sdbdiag.log 在每个节点目录下都可以找到。每个节点目录下的 sdbdiag.log 只记录该节点发生的事件。
sdbdiag.log诊断日志的内容非常有助于诊断故障。能够读懂sdbdiag.log,就能够快速定位问题,甚至能够找到解决问题的方法。
sdbdiag.log的内容是严格格式化的。它的每个段落就是一条记录。
我们看一个记录样例:
根据样例,我们很容易看出来它的构成:
时间戳, Level:记录等级,
PID:进程ID, TID:线程ID,
Function:源代码中的函数名, Line:源代码中的行号
File:源代码所在的文件,
Message:具体的详细的信息内容
从上面样例来看,这个节点的dms模块(数据管理)创建索引文件成功。
其中,Level 记录等级分为 EVENT、WARNING 和 ERROR。
关于Level,需要注意的是:
-- EVENT有可能有助于为故障原因提供线索,不一定总是没用的;
-- WARNING 和 ERROR 不一定总是代表有问题,也可能只是一个普通的无关痛痒的小小事件。
再看一个报错的样例:
从File来看,这个记录是OM服务相关的。从Function来看,这个函数是要获取一个任务策略记录。我们先不用管“什么是任务策略记录”。
再看一下Message,“Getmore failed” 传达的信息必须到源代码里边去查看,所以它基本无效。不过不着急,还有“(rc=-29)”。 “rc”一般都是函数中的return code,即返回代码的意思。 -29这个负数,一般情况下都是代表有异常。
那么怎么知道 (rc=-29) 是什么错误呢?
一般情况下,SequoiaDB的源代码中的返回码都会遵照预先编制的错误代码表。那我们去文档中心查看一下错误码表:
http://doc.sequoiadb.com/cn/index/cat_id/1432190985/edition_id/0
在错误码里边,-29代表“集合结尾”。再结合Message里边提到的“Getmore failed”,我们可以理解这是OM在获取TaskStrategyRecord时遇到了集合结尾。所以这条ERROR记录应该没有造成任何后果。而且OM还在运转正常的状态中。我们不用担忧这条ERROR消息。
再看一个WARNING的样例:
“type:RestAgent” 告诉我们,这个 EDU 是一个 RestAgent 。也许是 REST 服务?暂且不管它。
“Name:192.168.137.1:42445” 这个IP地址是一个远程地址,不是集群内部的服务器。那么很可能是客户端。也就很可能是REST服务。
“exit with -16”意思是这个RestAgent EDU因为-16的返回码退出的。还是去文档中心的错误码中寻找错误码-16。
-16的含义是网络已经从远程关闭。
所以,最终我们知道这条WARNING message的意思是REST服务(从名字上猜测出来的)因为远程客户端(应用端)关闭了连接而退出了。所以没有什么好担心的。