首页 > 解决方案 > 使用 AWS ECS 运行 Node.Js 应用程序映像时如何访问 PM2 日志

问题描述

我的 node.js 应用程序通过 AWS ECS 运行。要启动它,我通过任务定义使用 Docker 映像,其中包含以下命令来启动我的应用程序:

pm2,ecosystem.config.js

该应用程序启动正常,但是,我找不到 PM2 日志。

当我尝试直接在运行 ECS 服务的 EC2 实例上访问它时

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

当然,当我直接在该实例上启动我的应用程序时,只有旧的日志文件存在——这是有道理的,因为如果 PM2 在 Docker 容器中运行,它也会将日志文件保存在那里。

那么有没有办法以我可以访问 PM2 日志文件的方式启动我的实例,或者至少我可以将它们保存在特定文件夹中的实例上?

标签: node.jsamazon-web-servicesamazon-ecspm2

解决方案


您有两个选项可以访问容器内的进程日志。

  • 将日志推送到容器的 stdout/stderr 并在 Cloudwatch 中获取容器的日志(在 Fargate 的情况下很有用),并且还基于 12 因素应用程序。
  • 使用容器日志路径挂载主机文件夹

在第一个选项中,您需要对 Dockerfile 进行一些更改,CMD以便将日志推送到标准输出。

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"
                }
            }

访问https://console.aws.amazon.com/cloudwatch/并查找awslogs-pm2

在此处输入图像描述 使用_awslogs

这是在容器中处理日志的标准方法。 在此处输入图像描述

挂载日志文件夹

在生产系统中不推荐使用另一个选项,

  • 在 pm2 配置文件中设置日志路径,假设它设置为/app/logs/myapp.log
  • 使用 /app/logs/myapp.log 映射主机路径 /home/ec2-user/container-logs

然后您将能够在主机上找到容器/app/logs/myapp.log process.yml

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

挂载配置

  "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 绑定挂载


推荐阅读