Как настроить pm2-logrotate для докера с nodejs, работающим с pm2?

У меня есть образ докера из keymetrics/pm2:8-jessie, и мое приложение nodejs хорошо работает с pm2. Я попытался добавить 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 ls

┌──────────────┬────┬─────────┬─────────┬─────┬────────┬─────────┬────────┬─────┬────────────┬──────┬──────────┐
│ 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 │
└───────────────┴────┴─────────┴─────┴────────┴─────────┴─────┴───────────┴──────┘

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, так как изображение выше кажется очень тяжелым, изображение ниже составляет 150 МБ, а изображение выше - около 1 ГБ.

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"]
Другие вопросы по тегам