注意
本文档适用于 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)。例如,要增加名为 osd.0 的特定 ceph-osd 守护程序的调试日志记录,请运行以下命令
ceph tell osd.0 config set debug_osd 0/5
ceph tell 命令通过监视器进行。但是,如果您无法绑定到监视器,则可以使用另一种方法来激活 Ceph 的调试输出:使用 ceph daemon 命令登录到特定守护程序的主机并更改守护程序的配置。例如
sudo ceph daemon osd.0 config set debug_osd 0/5
有关可用设置的详细信息,请参阅子系统、日志和调试设置。
启动时
要在启动时激活 Ceph 的调试输出(即 dout() 日志记录函数),您必须将设置添加到 Ceph 配置文件中(或在中心配置存储中设置相应的值)。所有守护程序共有的子系统在配置文件中的 [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
有关详细信息,请参阅子系统、日志和调试设置。
加速日志轮换
如果主机的日志文件系统几乎已满,您可以通过修改位于 /etc/logrotate.d/ceph 的 Ceph 日志轮换文件来加速日志轮换。要增加日志轮换的频率(这将防止文件系统达到容量),请在 weekly 频率指令之后添加 size 指令。为了平滑音量峰值,请考虑将 weekly 更改为 daily,并考虑将 rotate 更改为 30。添加 size 设置的过程如下所示。
请注意
/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 到 20 的范围内运行,其中 1 是简洁的,20 是详细的。在少数情况下,存在可以采用大于 20 的值的日志记录级别。生成的日志非常详细。
除非满足以下一个或多个条件,否则内存中日志不会发送到输出日志
已引发致命信号或
Ceph 代码中的断言已被触发或
已手动触发将内存中日志发送到输出日志。有关详细信息,请参阅“Ceph 管理工具”文档中提供如何提交管理套接字命令示例的部分。
日志级别和内存级别可以一起设置或单独设置。如果子系统被分配一个值,那么该值将同时决定日志级别和内存级别。例如,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 |
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
集群日志文件的位置。
- 类型:
str- 另请参阅:
log_to_file、log_to_stderr、err_to_stderr、log_to_syslog、err_to_syslog
- log_max_new
新日志条目的最大数量。
- 类型:
int- 默认值:
1000- 另请参阅:
- log_max_recent
此选项的目的是仅将较高调试级别的日志记录到内存缓冲区中,并且仅在发生崩溃时才写入详细日志消息。只有低于较低日志级别的日志条目才会被无条件地写入日志。例如,debug_osd=1/5 将无条件地将所有 <= 1 的内容写入日志,但将级别 2-5 的条目保留在内存中。如果发生段错误或断言失败,所有条目都将转储到日志中。
- 类型:
int- 默认值:
500- min:
1
- log_to_stderr
确定日志消息是否应出现在
stderr中。- 类型:
bool- 默认值:
true
- err_to_stderr
确定错误消息是否应出现在
stderr中。- 类型:
bool- 默认值:
false
- log_to_syslog
确定日志消息是否应出现在
syslog中。- 类型:
bool- 默认值:
false
- err_to_syslog
确定错误消息是否应出现在
syslog中。- 类型:
bool- 默认值:
false
- log_flush_on_exit
确定 Ceph 是否应在退出后刷新日志文件。
- 类型:
bool- 默认值:
false
- clog_to_monitors
确定
clog消息是否应发送到监视器。- 类型:
str- 默认值:
default=true
- clog_to_syslog
确定
clog消息是否应发送到 syslog。- 类型:
str- 默认值:
false
监视器
- mon_cluster_log_level
用于控制集群日志文件以及所有外部实体的集群日志消息详细程度的日志级别。
- 类型:
str- 默认值:
debug- 另请参阅:
- mon_cluster_log_file
集群日志文件的位置。Ceph 中有两个通道:
cluster和audit。此选项表示从通道到日志文件的映射,其中该通道的日志条目发送到该日志文件。default条目是未明确指定的通道的回退映射。因此,以下默认设置会将集群日志发送到$cluster.log,并将审核日志发送到$cluster.audit.log,其中$cluster将替换为实际的集群名称。- 类型:
str- 默认值:
default=/var/log/ceph/$cluster.$channel.log cluster=/var/log/ceph/$cluster.log- 另请参阅:
- mon_cluster_log_to_file
使监视器将集群日志消息发送到文件
- 类型:
bool- 默认值:
true- 另请参阅:
- mon_cluster_log_to_syslog
确定集群日志是否应输出到 syslog。
- 类型:
str- 默认值:
default=false
- mon_cluster_log_to_syslog_facility
集群日志消息的 Syslog 设施
- 类型:
str- 默认值:
daemon- 另请参阅:
- mon_cluster_log_to_stderr
使监视器将集群日志消息发送到 stderr(以通道为前缀)
- 类型:
bool- 默认值:
false- 另请参阅:
log_stderr_prefix
- mon_cluster_log_to_journald
使监视器将集群日志发送到 journald
- 类型:
str- 默认值:
false
- mon_cluster_log_to_graylog
使监视器将集群日志发送到 graylog
- 类型:
str- 默认值:
false
- mon_cluster_log_to_graylog_host
集群日志消息的 Graylog 主机
- 类型:
str- 默认值:
127.0.0.1- 另请参阅:
- mon_cluster_log_to_graylog_port
集群日志消息的 Graylog 端口
- 类型:
str- 默认值:
12201- 另请参阅:
- mon_log_max
要保留的最近集群日志消息数
- 类型:
uint- 默认值:
10000
- mon_health_to_clog
启用定期将健康摘要发送到集群日志。
- 类型:
bool- 默认值:
true
- mon_health_to_clog_interval
监视器将健康摘要发送到集群日志的频率(以秒为单位)(非正数禁用)。无论健康摘要是否与上一个摘要不同,监视器都会始终将摘要发送到集群日志。
- 类型:
int- 默认值:
10 minutes- 另请参阅:
OSD
- osd_debug_drop_ping_probability
N/A
- 类型:
float- 默认值:
0.0
- osd_debug_drop_ping_duration
N/A
- 类型:
int- 默认值:
0
Filestore
- filestore_debug_omap_check
对同步进行调试检查。这是一个昂贵的操作。
- 类型:
bool- 默认值:
false