旋转日志文件
概述
当与--logpath 选项或systemLog.path 设置,mongod 和 mongos 实例会将所有活动和操作实时记录到日志文件中。在将活动数据记录到日志文件时,默认情况下,MongoDB 只在响应 logRotate 命令,或者当 mongod 或 mongos 进程收到操作系统发出的 SIGUSR1 信号时进行日志轮换。服务器日志和 审计日志 都可以使用 logRotate 命令进行轮换,可以是同时或独立进行。
MongoDB 的标准日志轮换方法会将当前日志文件存档并启动一个新的日志文件。为此,mongod 或 mongos 实例会通过在文件名后附加 UTC 时间戳来重命名当前日志文件,格式为 ISODate。然后,它打开一个新的日志文件,关闭旧的日志文件,并将所有新的日志条目发送到新的日志文件中。
您还可以配置 MongoDB 以支持 Linux/Unix 的 logrotate 工具,通过设置 systemLog.logRotate 或 --logRotate 为 reopen。使用 reopen,mongod 或 mongos 关闭日志文件,然后重新打开一个同名的日志文件,预期在轮换之前另一个进程已重命名了文件。
最后,您可以使用 mongod 的 --syslog 选项将日志数据发送到 syslog。在这种情况下,您可以利用其他日志轮换工具。
要轮换日志文件,您必须执行以下步骤之一
请参阅此页后面的示例。
默认日志轮转行为
默认情况下,MongoDB使用--logRotate rename行为。使用rename,mongod或mongos会将当前日志文件重命名,在文件名后添加UTC时间戳,打开一个新的日志文件,关闭旧的日志文件,并将所有新的日志条目发送到新日志文件。
启动一个mongod实例。
mongod -v --logpath /var/log/mongodb/server1.log
您还可以明确指定--logRotate rename。
旋转日志文件。
通过从 admin 数据库发出 logRotate 命令来旋转日志文件。mongosh:
db.adminCommand( { logRotate : "server" } )
如果启用了 审计,您可以指定 1 到 logRotate(而不是 server),以同时旋转服务器和审计日志(如果需要)。审计日志将按照与服务器日志相同的模式旋转,根据 --logRotate 设置。
注意
您不能在已验证副本集的仲裁者上运行此命令。
使用 --logRotate reopen 进行日志轮换
使用 --logRotate reopen 进行日志轮换时,会按照典型的 Linux/Unix 日志轮换行为关闭和打开日志文件。
启动一个 mongod 实例,指定 reopen --logRotate 行为。
mongod -v --logpath /var/log/mongodb/server1.log --logRotate reopen --logappend
使用 --logappend 选项与 --logRotate reopen 一起使用。
系统日志轮换
在系统日志轮换中,mongod 将日志数据发送到系统日志而不是写入文件。
MongoDB 在其日志消息中包含 组件 并将其发送到 syslog。
使用 SIGUSR1 强制日志轮转
对于基于 Linux 和 Unix 的系统,您可以使用 SIGUSR1 信号来为一个单个进程轮转日志。
例如,如果一个正在运行的 mongod 实例的进程 ID (PID) 为 2200,以下命令将在 Linux 上轮转该实例的日志文件
kill -SIGUSR1 2200