【问题标题】:How to setup pm2-logrotate for docker with nodejs running pm2?如何使用运行 pm2 的 nodejs 为 docker 设置 pm2-logrotate?
【发布时间】:2020-09-30 17:02:21
【问题描述】:

我有来自 keymetrics/pm2:8-jessie 的 docker 映像,并使用 pm2 很好地运行我的 nodejs 应用程序。我尝试添加 pm2-logrotate 来调整带有日期的日志。我在 Dockerfile 中添加了以下内容。可以启动模块 pm2-logrotate 但目标 PID 为空。有人可以帮忙吗?

FROM keymetrics/pm2:8-jessie

RUN npm install
RUN pm2 install pm2-logrotate
RUN pm2 set pm2-logrotate:retain 90
RUN pm2 set pm2-logrotate:dateFormat YYYY-MM-DD_HH-mm-ss
RUN pm2 set pm2-logrotate:max_size 10M
RUN pm2 set pm2-logrotate:rotateInterval 0 0 * * *
RUN pm2 set pm2-logrotate:rotateModule true
RUN pm2 set pm2-logrotate:workerInterval 10

ENV NODE_ENV=$buildenv
ENV NPM_CONFIG_LOGLEVEL warn

CMD ["sh", "-c", "pm2-runtime start pm2.${NODE_ENV}.config.js"]

pm2

┌──────────────┬────┬─────────┬─────────┬─────┬────────┬─────────┬────────┬─────┬────────────┬──────┬──────────┐
│ App name     │ id │ version │ mode    │ pid │ status │ restart │ uptime │ cpu │ mem        │ user │ watching │
├──────────────┼────┼─────────┼─────────┼─────┼────────┼─────────┼────────┼─────┼────────────┼──────┼──────────┤
│  app_server  │ 1  │ 1.0.0   │ cluster │ 150 │ online │ 1       │ 2h     │ 0%  │ 104.4 MB   │ root │ disabled │
└──────────────┴────┴─────────┴─────────┴─────┴────────┴─────────┴────────┴─────┴────────────┴──────┴──────────┘
Module
┌───────────────┬────┬─────────┬─────┬────────┬─────────┬─────┬───────────┬──────┐
│ Module        │ id │ version │ pid │ status │ restart │ cpu │ memory    │ user │
├───────────────┼────┼─────────┼─────┼────────┼─────────┼─────┼───────────┼──────┤
│ pm2-logrotate │ 2  │ 2.7.0   │ 205 │ online │ 0       │ 0%  │ 44.5 MB   │ root │
└───────────────┴────┴─────────┴─────┴────────┴─────────┴─────┴───────────┴──────┘

【问题讨论】:

    标签: docker dockerfile pm2 pm2-logrotate


    【解决方案1】:

    其中一个原因是pm2 logrotate 不是 Docker 容器的主进程,而是 pm2 的托管进程,因此您可以通过停止定义 pm2.${NODE_ENV}.config.js 的主进程来验证此行为,无论您的容器是否会死pm2-logrotate 正在运行。

    另外,我认为它不应该为空,它应该是这样的

    pm2 ls
    ┌─────┬──────────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
    │ id  │ name             │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
    ├─────┼──────────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
    │ 1   │ www              │ default     │ 0.0.0   │ fork    │ 26       │ 13s    │ 0    │ online    │ 0%       │ 40.3mb   │ root     │ disabled │
    └─────┴──────────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
    Module
    ┌────┬───────────────────────────────────────┬────────────────────┬───────┬──────────┬──────┬──────────┬──────────┬──────────┐
    │ id │ module                                │ version            │ pid   │ status   │ ↺    │ cpu      │ mem      │ user     │
    ├────┼───────────────────────────────────────┼────────────────────┼───────┼──────────┼──────┼──────────┼──────────┼──────────┤
    │ 0  │ pm2-logrotate                         │ 2.7.0              │ 17    │ online   │ 0    │ 0.5%     │ 43.1mb   │ root     │
    └────┴───────────────────────────────────────┴────────────────────┴───────┴──────────┴──────┴──────────┴──────────┴──────────┘
    

    另外会建议使用alpine基础镜像,因为上图看起来很重,下图是150MB,而上图是1GB左右。

    FROM node:alpine
    RUN npm install pm2 -g
    
    RUN npm install
    RUN pm2 install pm2-logrotate
    RUN pm2 set pm2-logrotate:retain 90
    RUN pm2 set pm2-logrotate:dateFormat YYYY-MM-DD_HH-mm-ss
    RUN pm2 set pm2-logrotate:max_size 10M
    RUN pm2 set pm2-logrotate:rotateInterval 0 0 * * *
    RUN pm2 set pm2-logrotate:rotateModule true
    RUN pm2 set pm2-logrotate:workerInterval 10
    
    ENV NODE_ENV=$buildenv
    ENV NPM_CONFIG_LOGLEVEL warn
    WORKDIR /app
    COPY . /app
    
    CMD ["sh", "-c", "pm2-runtime start confi"]
    

    【讨论】:

    • 嗯.. 我刚刚将 Dockerfile 修改为您的,但仍然无法正常工作。 :(
    • 可以发pm2 ls的回复吗?
    • 我在问题中发布了回复。谢谢。
    • 我没有看到任何arget PID is null?正如你提到的
    • 似乎 PID 是 pm2-logrotate 该进程的 pid 而不是目标 pid
    猜你喜欢
    • 2018-06-12
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    • 2019-08-13
    • 1970-01-01
    • 2021-08-25
    相关资源
    最近更新 更多