注意
本文档适用于 Ceph 开发版本。
日志和调试
Ceph 组件的调试日志级别可以在服务运行时进行调整,而在某些情况下,您可能希望调整调试日志级别ceph.conf
或在中央配置存储中。如果您的集群在运行时遇到问题,增加调试日志记录可能很有用。默认情况下,Ceph 日志文件位于/var/log/ceph
; 容器化部署通常将日志记录/var/log
.
提示
请记住,调试输出可能会减慢您的系统,并且这种延迟有时会隐藏竞态条件。
调试日志记录是资源密集型的。如果您在集群的特定组件中遇到问题,请从仅为此组件启用日志记录开始进行故障排除。例如,如果您的 OSD 正在无错误运行,但您的 CephFS 元数据服务器(MDS)没有,请为出现问题的特定实例启用日志记录。然后,根据需要为每个子系统启用日志记录。
重要
详细日志记录有时每小时会生成超过 1 GB 的数据。如果您的操作系统所在的磁盘(您的“OS 磁盘”)已满,则与该磁盘关联的节点将停止工作。
每当您启用或提高调试日志记录的级别时,请确保您有足够的磁盘空间来存储日志文件,因为这可能显著增加它们的大小。有关轮转日志文件的详细信息,请参阅加速日志轮转.
有关可用设置的详细信息,请参阅子系统、日志和调试设置.
运行时
要查看运行时的配置设置,请登录到具有正在运行的守护进程的主机,并运行以下格式的命令:
ceph daemon {daemon-name} config show | less
例如:
ceph daemon osd.0 config show | less
要在启动时激活 Ceph 的调试输出(即dout()
日志记录功能)ceph
tell
命令的以下格式:
ceph tell {daemon-type}.{daemon id or *} config set {name} {value}
这里{daemon-type}
是osd
, mon
或mds
. 将运行时设置应用于特定守护进程(通过指定其 ID)或应用于特定类型的所有守护进程(使用*
通配符作为 ID)。例如,要为名为ceph-osd
的特定守护进程增加调试日志记录,请运行以下命令:osd.0
, run the
following command:
ceph tell osd.0 config set debug_osd 0/5
The ceph tell
命令通过监视器。但是,如果您无法绑定到监视器,则可以使用另一种方法来激活 Ceph 的调试输出:使用ceph daemon
命令登录到特定守护进程的主机并更改守护进程的配置。例如:
sudo ceph daemon osd.0 config set debug_osd 0/5
有关可用设置的详细信息,请参阅子系统、日志和调试设置.
启动时
要在启动时激活 Ceph 的调试输出(即dout()
日志记录功能)[global]
下设置。特定守护进程的子系统在配置文件的相应守护进程部分中设置(例如,[mon]
, [osd]
,
[mds]
)。以下示例显示了 Ceph 配置文件中可能的调试设置:
[global]
debug_ms = 1/5
[mon]
debug_mon = 20
debug_paxos = 1/5
debug_auth = 2
[osd]
debug_osd = 1/5
debug_filestore = 1/5
debug_journal = 1
debug_monc = 5/20
[mds]
debug_mds = 1
debug_mds_balancer = 1
有关详细信息,请参阅子系统、日志和调试设置.
加速日志轮转
如果主机的日志文件系统几乎已满,您可以通过修改 Ceph 日志轮转文件来加速日志轮转/etc/logrotate.d/ceph
。要增加日志轮转的频率(这将防止文件系统达到容量),请在size
指令。要平滑卷峰,请考虑更改weekly
频率指令后添加一个weekly
todaily
并考虑更改rotate
to30
。添加大小设置的步骤显示在下面。
注意
/etc/logrotate.d/ceph
文件:rotate 7 weekly compress sharedscripts
的默认设置。通过添加一个
size
设置:rotate 7 weekly size 500M compress sharedscripts
启动您的用户空间的 crontab 编辑器:
crontab -e
向 crontab 添加条目,指示 cron 检查
etc/logrotate.d/ceph
文件:30 * * * * /usr/sbin/logrotate /etc/logrotate.d/ceph >/dev/null 2>&1
在此示例中,etc/logrotate.d/ceph
文件将每 30 分钟检查并可能轮转。
Valgrind
当您调试集群的性能时,您可能会发现有必要跟踪内存和线程问题。Valgrind 工具套件可用于检测特定守护进程、特定类型守护进程或整个集群中的问题。由于 Valgrind 计算密集,它仅在开发或调试 Ceph 时使用,并且在其他时间使用时会减慢您的系统。Valgrind 消息记录到stderr
.
子系统、日志和调试设置
调试日志输出通常通过子系统启用。
Ceph 子系统
对于每个子系统,其输出日志(所谓的“日志级别”)和其内存日志(所谓的“内存级别”)都有一个日志级别。在不同的子系统中,这两个日志级别可以设置不同的值。Ceph 的日志级别在1
to20
,其中1
范围内,其中20
是详细的。在某些少数情况下,日志级别可以取大于 20 的值。生成的日志非常详细。
除非满足以下一个或多个条件,否则内存日志不会发送到输出日志:
已引发致命信号或
Ceph 代码中已触发断言或
已手动触发将内存日志发送到输出日志。“Ceph 管理工具文档”中提供如何提交管理套接字命令的示例。日志级别和内存级别可以一起或单独设置。如果子系统分配了一个值,则该值将决定日志级别和内存级别。例如,
Log levels and memory levels can be set either together or separately. If a
subsystem is assigned a single value, then that value determines both the log
level and the memory level. For example, debug ms = 5
将为ms
子系统提供一个日志级别为5
和内存级别为5
。另一方面,如果子系统分配了两个用正斜杠(/)分隔的值,则第一个值决定日志级别,第二个值决定内存级别。例如,debug ms = 1/5
将为ms
子系统提供一个日志级别为1
和内存级别为5
。请参阅以下内容:
debug {subsystem} = {log-level}/{memory-level}
#for example
debug mds balancer = 1/20
以下表格提供了 Ceph 子系统和它们默认日志和内存级别的列表。完成日志记录工作后,将每个子系统的值恢复为默认值或恢复为适合正常操作的级别。
子系统 |
日志级别 |
内存级别 |
---|---|---|
|
0 |
5 |
|
0 |
1 |
|
0 |
1 |
|
1 |
1 |
|
1 |
5 |
|
1 |
5 |
|
1 |
5 |
|
1 |
5 |
|
1 |
5 |
|
0 |
1 |
|
0 |
1 |
|
0 |
1 |
|
0 |
1 |
|
0 |
1 |
|
0 |
5 |
|
0 |
5 |
|
0 |
5 |
|
0 |
5 |
|
0 |
5 |
|
0 |
5 |
|
0 |
5 |
|
0 |
5 |
|
0 |
5 |
|
1 |
5 |
|
0 |
5 |
|
0 |
5 |
|
1 |
3 |
|
1 |
3 |
|
0 |
5 |
|
1 |
5 |
|
0 |
10 |
|
1 |
5 |
|
0 |
5 |
|
1 |
5 |
|
1 |
5 |
|
1 |
1 |
|
1 |
1 |
|
1 |
5 |
|
1 |
5 |
|
1 |
5 |
|
1 |
5 |
|
1 |
5 |
|
1 |
5 |
|
1 |
5 |
|
1 |
5 |
|
1 |
5 |
|
1 |
5 |
|
1 |
5 |
|
1 |
1 |
|
0 |
0 |
|
1 |
5 |
|
1 |
5 |
|
1 |
5 |
|
1 |
3 |
|
1 |
5 |
|
4 |
5 |
|
1 |
5 |
|
2 |
5 |
|
1 |
5 |
|
1 |
5 |
|
1 |
5 |
|
1 |
5 |
|
0 |
5 |
|
0 |
5 |
|
0 |
5 |
|
0 |
5 |
|
0 |
5 |
|
0 |
5 |
|
0 |
5 |
|
0 |
5 |
|
0 |
5 |
|
0 |
5 |
|
0 |
5 |
|
0 |
5 |
|
0 |
5 |
|
0 |
5 |
|
0 |
5 |
|
0 |
5 |
|
0 |
5 |
|
0 |
5 |
|
1 |
5 |
|
0 |
5 |
|
1 |
5 |
|
1 |
5 |
|
1 |
5 |
日志和调试设置
不需要在 Ceph 配置文件中指定日志和调试设置,但在需要时可以覆盖默认设置。Ceph 支持以下设置:
- log_file
您集群的日志文件位置。
- type:
str
- 参见:
log_to_file
,log_to_stderr
,err_to_stderr
,log_to_syslog
,err_to_syslog
- log_max_new
新日志文件的最大数量。
- type:
int
- default:
1000
- 参见:
- log_max_recent
此选项的目的是仅在内存缓冲区中记录较高调试级别,并且仅在发生崩溃时才写入详细的日志消息。只有低于较低日志级别的日志条目将无条件写入日志。例如,debug_osd=1/5 将无条件地将所有 <= 1 的内容写入日志,但将级别 2-5 的条目保留在内存中。如果发生段错误或断言失败,所有条目都将被转储到日志中。
- type:
int
- default:
500
- min:
1
- log_to_stderr
确定日志消息是否应出现在
stderr
.- type:
bool
- default:
true
- err_to_stderr
确定错误消息是否应出现在
stderr
.- type:
bool
- default:
false
- log_to_syslog
确定日志消息是否应出现在
syslog
.- type:
bool
- default:
false
- err_to_syslog
确定错误消息是否应出现在
syslog
.- type:
bool
- default:
false
- log_flush_on_exit
确定Ceph在退出后是否应刷新日志文件。
- type:
bool
- default:
false
- clog_to_monitors
确定是否
clog
消息应发送到监视器。- type:
str
- default:
default=true
- clog_to_syslog
确定是否
clog
消息应发送到syslog。- type:
str
- default:
false
Monitors
- mon_cluster_log_level
控制集群日志文件以及所有外部实体的集群日志消息详细程度的日志级别。
- type:
str
- default:
debug
- 参见:
- mon_cluster_log_file
集群的日志文件位置。Ceph 中有两个通道:
cluster
和audit
. 此选项表示从通道到日志文件的映射,其中该通道的日志条目被发送到。该default
条目是未明确指定的通道的备用映射。因此,以下默认设置将集群日志发送到$cluster.log
,并发送审计日志到$cluster.audit.log
,其中$cluster
将被替换为实际的集群名称。- type:
str
- default:
default=/var/log/ceph/$cluster.$channel.log cluster=/var/log/ceph/$cluster.log
- 参见:
- mon_cluster_log_to_file
使监视器将集群日志消息发送到文件
- type:
bool
- default:
true
- 参见:
- mon_cluster_log_to_syslog
确定集群日志是否应输出到syslog。
- type:
str
- default:
default=false
- mon_cluster_log_to_syslog_facility
集群日志消息的syslog设施
- type:
str
- default:
daemon
- 参见:
- mon_cluster_log_to_stderr
使监视器将集群日志消息发送到stderr(前缀为通道)
- type:
bool
- default:
false
- 参见:
log_stderr_prefix
- mon_cluster_log_to_journald
使监视器将集群日志发送到journald
- type:
str
- default:
false
- mon_cluster_log_to_graylog
使监视器将集群日志发送到graylog
- type:
str
- default:
false
- mon_cluster_log_to_graylog_host
集群日志消息的Graylog主机
- type:
str
- default:
127.0.0.1
- 参见:
- mon_cluster_log_to_graylog_port
集群日志消息的Graylog端口
- type:
str
- default:
12201
- 参见:
- mon_log_max
保留的最近集群日志消息的数量
- type:
uint
- default:
10000
- mon_health_to_clog
启用定期向集群日志发送健康摘要。
- type:
bool
- default:
true
- mon_health_to_clog_interval
监控器每隔多少秒(以秒为单位)向集群日志发送健康摘要(非正数禁用)。无论与上一个摘要是否不同,监控器都会始终向集群日志发送摘要。
- type:
int
- default:
10 minutes
- 参见:
OSD
- osd_debug_drop_ping_probability
N/A
- type:
float
- default:
0.0
- osd_debug_drop_ping_duration
N/A
- type:
int
- default:
0
Filestore
- filestore_debug_omap_check
同步调试检查。这是一个耗时的操作。
- type:
bool
- default:
false
MDS
RADOS Gateway
由 Ceph 基金会带给您
Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.