0

在 Supervisor 的帮助下,我使用Laravel Horizo​​n来处理我的 Laravel 应用程序中的作业。整个设置在 ECS 中的 docker 上运行。在 ECS 的主机节点(由 Fargate 管理)上,我运行了 datadog 代理,它将获取容器的 stdout/stderr 并将其放入 datadog 中(这样我就可以集中访问日志)。

我注意到的是,我没有从正在处理的作业中获取任何日志。即使是简单print("test");的工作代码也不会进入标准输出。

这是我的设置:

Dockerfile

FROM alpine:3.11

RUN apk add \
        --no-cache \
        --update \
        ...snipped...
        py-pip \
    && pip install supervisor \
    && pip install supervisor-stdout

WORKDIR /app

...snipped...

yaml 中这个的服务定义如下所示:

version: '2'

    services:

      my-app-horizon:
        container_name: my-app-horizon
        image: ${DOCKER_IMAGE}
        mem_limit: 1024M
        command: "supervisord -c /etc/supervisor/conf.d/horizon.conf"
        ...snipped...

这是我的内容horizon.conf

[supervisord]
nodaemon=true

[program:horizon]
priority = 100
process_name=%(program_name)s
command=php /app/artisan horizon
autostart=true
autorestart=true
user=apache
stopwaitsecs=3600
stdout_events_enabled=true
stderr_events_enabled=true

[eventlistener:stdout]
priority = 1
command = supervisor_stdout
buffer_size = 100
events = PROCESS_LOG
result_handler = supervisor_stdout:event_handler

知道我可能会错过什么吗?我无法通过主管从 docker 中的 Horizo​​n 处理的作业中获取日志?

4

1 回答 1

1

我的一位同事告诉我,由于我们使用的是 docker,我们可以绕过 supervisor,直接运行 Horizo​​n artisan 命令作为容器的入口点。

因此,我删除了与主管相关的所有内容,并且我的服务 yaml 被简化为以下内容,并且日志正在进入 datadog:

version: '2'

    services:

      my-app-horizon:
        container_name: my-app-horizon
        image: ${DOCKER_IMAGE}
        mem_limit: 1024M
        command: "/app/artisan horizon"
        ...snipped...
于 2020-05-18T15:57:42.263 回答