使用 pm2 运行服务器时如何轮换日志文件?

Jax*_*Jax 10 logging pm2 pm2-logrotate nodejs-server

我们使用节点模块 pm2 来运行服务器并捕获应用程序日志。

但由于流量非常巨大,大量数据被存储在单个文件中,大约超过 100Gb。

我们是否有可能在不重新启动服务器的情况下每 1 小时或每 1Gb 文件更改一次文件?

目前我们正在手动执行此操作,重新启动服务器并重命名造成问题的现有文件。

Jas*_*son 26

我个人不使用 pm2-logrotate,因为它不再维护,更糟糕的是,它有很多 bug。有一次,我在生产服务器上使用它,它立即重复创建大型日志文件,导致空间为 0%,并使服务器崩溃。那日子不太好过。

PM2 网站有一个名为“设置本机 logrotate”的部分,其中它告诉您运行:

sudo pm2 logrotate -u user

显然将用户更改为运行 pm2 的实际用户。它将在 /etc/logrotate.d/pm2-user 中创建一个文件并对其进行编辑,使其如下所示:

/home/user/.pm2/pm2.log /home/user/.pm2/logs/*.log {
        su user user
        rotate 12
        weekly
        missingok
        notifempty
        compress
        delaycompress
        copytruncate
        create 0640 user user
}

Run Code Online (Sandbox Code Playgroud)

最重要的部分是su user user部分。Logrotate 以 root 身份运行,并且它不喜欢创建非 root 用户可以查看的日志文件,因此它会失败,而且通常会默默失败。这违背了 npm 的理念,npm 更喜欢在没有 sudo 权限的情况下运行事物。通过在 logrotate 配置文件中指定用户,您可以解决此问题。

我花了一段时间才弄清楚这一点 - 希望它对某人有所帮助。

  • @AndyLorenz,您好,这是该部分链接:https://pm2.keymetrics.io/docs/usage/log-management/#setting-up-a-native-logrotate (2认同)

小智 10

您可以使用pm2-logrotate

pm2 install pm2-logrotate

# max log size is 1GB
pm2 set pm2-logrotate:max_size 1G

# compress logs when rotated (optional)
pm2 set pm2-logrotate:compress true

# force rotate every hours
pm2 set pm2-logrotate:rotateInterval '0 * * * *'
Run Code Online (Sandbox Code Playgroud)