诊断日志查找方法
1. 首先需要确定诊断日志的位置,使用sdblist -l命令:

可以看到,根据节点的Role可以查到对应的DBPath,一个节点的诊断日志就位于DBPath下的/diaglog/sdbdiag.log中。
2. 打开诊断日志,确定具体错误所在:
在诊断日志中,从后往前搜索ERROR,所有的错误都带有ERROR标签,由于错误是函数堆栈最里面那一层一直往外层打印,所以要慢慢找到最开始附近的ERROR,才是错误的根源。
3. SequoiaDB的架构是(如下图),用户先连接协调节点,再由协调节点将命令发送到数据节点或编目节点执行,所以有时会遇到错误在协调节点之外发生的情况,此时应继续到错误发生的节点查找问题根源。

4. 确定错误后,如果错误的原因是由其它节点引起的,那么继续通过sdblist -l命令,找到对应节点的诊断日志,确认错误原因。
示例:
1. 发生错误:

当向db.foo.bar插入时发生错误。
2. 确定诊断日志位置:
首先通过输入节点名查看出错的节点信息:
可以看到出错的节点是11810
通过sdblist -l查看出错节点的诊断日志位置:
可以看到节点11810是协调节点(Role-coord),且诊断日志在:
/opt/sequoiadb/database/coord/11810/diaglog/sdbdiag.log
3. 查看诊断日志:
查看日志并从后向前找到开始发生错误时附近的ERROR:
可以看到提示错误发生在节点GroupID:1000, NodeID:1001。
4. 再次查找诊断日志位置:
同样通过sdblist -l找到GroupID:1000, NodeID:1001的节点,是数据节点(Role-data):

诊断日志位于:
/opt/sequoiadb/database/data/11830/diaglog/sdbdiag.log
查看日志:
5. 分析原因:
可以看到,是复制组group1中的主节点11830无法连接到11931的从节点造成的,联想到foo.bar的ReplSize设定为0,且11930节点占用接下来的3个端口,可以得出错误原因是,11930节点下线。