Как получить доступ к журналам PM2, когда я запускаю изображение приложения Node.Js, используя AWS ECS - PullRequest
0 голосов
/ 09 июля 2020
Приложение

My node.js запускается через AWS ECS. Для его запуска я использую изображение Docker в определении задачи, которое содержит следующую команду для запуска моего приложения:

pm2,ecosystem.config.js

Приложение запускается нормально, однако я не могу найти PM2 журналы.

Когда я пытаюсь получить к нему доступ непосредственно на экземпляре EC2, где служба ECS работает через

/home/ec2-user/.pm2/logs/my-log.log

, конечно, при запуске остаются только старые файлы журналов. мое приложение непосредственно в этом экземпляре - что имеет смысл, потому что, если PM2 будет работать в контейнере Docker, он также сохранит там файлы журнала.

Итак, есть ли способ запустить мой экземпляр таким образом, чтобы я мог иметь доступ к файлам журнала PM2 или, по крайней мере, я мог сохранить их в экземпляре в определенной папке c?

1 Ответ

1 голос
/ 09 июля 2020

У вас есть два варианта доступа к журналам процессов внутри контейнера.

  • Pu sh журналы в stdout / stderr контейнера и получение журналов контейнера в Cloudwatch (полезно в случае fargate ), а также на основе 12 факторов. будет выводить sh журналы в стандартный вывод.
    CMD ["pm2-runtime", "app.js"]
    #OR
    CMD ["pm2-runtime", "process.yml"]
    

    pm2-runtime предназначен для контейнера docker и поставляется в виде пакета с pm2.

    Что такое разница между pm2 и pm2-runtime?

    Сделав это, вы сможете получить доступ к журналам вне контейнера также в облачных часах, если они настроены в определении задачи.

    вам необходимо добавьте это в определение задачи

    "logConfiguration": {
                    "logDriver": "awslogs",
                    "options": {
                        "awslogs-group": "awslogs-pm2",
                        "awslogs-region": "us-west-2",
                        "awslogs-stream-prefix": "awslogs-nodejs"
                    }
                }
    

    visit https://console.aws.amazon.com/cloudwatch/ и найдите awslogs-pm2

    enter image description here using_awslogs

    Это стандартный подход к работе с журналами в контейнере. enter image description here

    Mount logs folder

    This the other option is not recommended in production system,

    • set log path in pm2 config file, suppose it set to /app/logs/myapp.log
    • Map host path /home/ec2-user/container-logs with /app/logs/myapp.log

    then you will able to find container on host under /app/logs/myapp.log process.yml

    apps:
      - script : myapp.js
        name   : 'api-server'
        error_file : './logs/myapperror.log'
        out_file : './logs/myappoutput.log'
    

    Mount config

      "containerDefinitions": [
        {
          "name": "database1",
          "image": "my-repo/database",
          "cpu": 100,
          "memory": 100,
          "essential": true,
          "mountPoints": [
            {
              "sourceVolume": "database_scratch",
              "containerPath": "/var/scratch"
            }
          ]
        },
        {
          "name": "database2",
          "image": "my-repo/database",
          "cpu": 100,
          "memory": 100,
          "essential": true,
          "mountPoints": [
            {
              "sourceVolume": "database_scratch",
              "containerPath": "/var/scratch"
            }
          ]
        }
      ]
    

    Крепления ECS

...