注意

本文档适用于 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}osdmonmds。将运行时设置应用于特定的守护程序(通过指定其 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 设置的过程如下所示。

  1. 请注意 /etc/logrotate.d/ceph 文件的默认设置

    rotate 7
    weekly
    compress
    sharedscripts
    
  2. 通过添加 size 设置来修改它们

    rotate 7
    weekly
    size 500M
    compress
    sharedscripts
    
  3. 启动您的用户空间的 crontab 编辑器

    crontab -e
    
  4. 向 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 的日志记录级别在 120 的范围内运行,其中 1 是简洁的,20 是详细的。在少数情况下,存在可以采用大于 20 的值的日志记录级别。生成的日志非常详细。

除非满足以下一个或多个条件,否则内存中日志不会发送到输出日志

日志级别和内存级别可以一起设置或单独设置。如果子系统被分配一个值,那么该值将同时决定日志级别和内存级别。例如,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 子系统及其默认日志级别和内存级别的列表。完成日志记录工作后,将每个子系统的值恢复为其默认值或适合正常操作的级别。

子系统

日志级别

内存级别

default

0

5

lockdep

0

1

context

0

1

crush

1

1

mds

1

5

mds balancer

1

5

mds log

1

5

mds log expire

1

5

mds migrator

1

5

buffer

0

1

timer

0

1

filer

0

1

striper

0

1

objecter

0

1

rados

0

5

rbd

0

5

rbd mirror

0

5

rbd replay

0

5

rbd pwl

0

5

journaler

0

5

objectcacher

0

5

immutable obj cache

0

5

client

0

5

osd

1

5

optracker

0

5

objclass

0

5

filestore

1

3

journal

1

3

ms

0

5

mon

1

5

monc

0

10

paxos

1

5

tp

0

5

auth(认证)

1

5

crypto

1

5

finisher

1

1

reserver

1

1

heartbeatmap

1

5

perfcounter

1

5

rgw

1

5

rgw sync

1

5

rgw datacache

1

5

rgw access

1

5

rgw dbstore

1

5

rgw lifecycle

1

5

rgw notification

1

5

rgw bucket logging

1

5

javaclient

1

5

asok

1

5

throttle

1

1

refs

0

0

compressor

1

5

bluestore

1

5

bluefs

1

5

bdev

1

3

kstore

1

5

rocksdb

4

5

fuse

1

5

mgr

2

5

mgrc

1

5

dpdk

1

5

eventtrace

1

5

prioritycache

1

5

test

0

5

cephfs mirror

0

5

cephsqlite

0

5

seastore

0

5

seastore onode

0

5

seastore odata

0

5

seastore ompap

0

5

seastore tm

0

5

seastore t

0

5

seastore cleaner

0

5

seastore epm

0

5

seastore lba

0

5

seastore fixedkv tree

0

5

seastore cache

0

5

seastore journal

0

5

seastore device

0

5

seastore backref

0

5

alienstore

0

5

mclock

1

5

cyanstore

0

5

ceph exporter

1

5

memstore

1

5

trace

1

5

日志记录和调试设置

没有必要在 Ceph 配置文件中指定日志记录和调试设置,但您可以在需要时覆盖默认设置。Ceph 支持以下设置

log_file

集群日志文件的位置。

类型:

str

另请参阅:

log_to_filelog_to_stderrerr_to_stderrlog_to_syslogerr_to_syslog

log_max_new

新日志条目的最大数量。

类型:

int

默认值:

1000

另请参阅:

log_max_recent

log_max_recent

此选项的目的是仅将较高调试级别的日志记录到内存缓冲区中,并且仅在发生崩溃时才写入详细日志消息。只有低于较低日志级别的日志条目才会被无条件地写入日志。例如,debug_osd=1/5 将无条件地将所有 <= 1 的内容写入日志,但将级别 2-5 的条目保留在内存中。如果发生段错误或断言失败,所有条目都将转储到日志中。

类型:

int

默认值:

500

min:

1

log_to_file

确定日志消息是否应出现在文件中。

类型:

bool

默认值:

true

另请参阅:

log_file

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

mon_cluster_log_file

集群日志文件的位置。Ceph 中有两个通道:clusteraudit。此选项表示从通道到日志文件的映射,其中该通道的日志条目发送到该日志文件。 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

mon_cluster_log_to_file

使监视器将集群日志消息发送到文件

类型:

bool

默认值:

true

另请参阅:

mon_cluster_log_file

mon_cluster_log_to_syslog

确定集群日志是否应输出到 syslog。

类型:

str

默认值:

default=false

mon_cluster_log_to_syslog_facility

集群日志消息的 Syslog 设施

类型:

str

默认值:

daemon

另请参阅:

mon_cluster_log_to_syslog

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

mon_cluster_log_to_graylog_port

集群日志消息的 Graylog 端口

类型:

str

默认值:

12201

另请参阅:

mon_cluster_log_to_graylog

mon_log_max

要保留的最近集群日志消息数

类型:

uint

默认值:

10000

mon_health_to_clog

启用定期将健康摘要发送到集群日志。

类型:

bool

默认值:

true

mon_health_to_clog_interval

监视器将健康摘要发送到集群日志的频率(以秒为单位)(非正数禁用)。无论健康摘要是否与上一个摘要不同,监视器都会始终将摘要发送到集群日志。

类型:

int

默认值:

10 minutes

另请参阅:

mon_health_to_clog

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

MDS

RADOS 网关

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入