注意

本文档适用于 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, monmds. 将运行时设置应用于特定守护进程(通过指定其 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频率指令后添加一个weeklytodaily并考虑更改rotateto30。添加大小设置的步骤显示在下面。

  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 的日志级别在1to20,其中1范围内,其中20是详细的。在某些少数情况下,日志级别可以取大于 20 的值。生成的日志非常详细。

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

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 子系统和它们默认日志和内存级别的列表。完成日志记录工作后,将每个子系统的值恢复为默认值或恢复为适合正常操作的级别。

子系统

日志级别

内存级别

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

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

您集群的日志文件位置。

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

log_max_recent

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

type:

int

default:

500

min:

1

log_to_file

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

type:

bool

default:

true

参见:

log_file

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

mon_cluster_log_file

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

mon_cluster_log_to_file

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

type:

bool

default:

true

参见:

mon_cluster_log_file

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_syslog

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

mon_cluster_log_to_graylog_port

集群日志消息的Graylog端口

type:

str

default:

12201

参见:

mon_cluster_log_to_graylog

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

参见:

mon_health_to_clog

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. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.