【问题标题】:Getting logs out of Laravel Horizon running in docker in supervisor从 Laravel Horizo​​n 中获取日志,在主管的 docker 中运行
【发布时间】:2020-05-18 14:40:33
【问题描述】:

在 Supervisor 的帮助下,我使用 Laravel Horizon 在我的 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 处理的作业中获取日志?

【问题讨论】:

    标签: laravel docker supervisord laravel-horizon


    【解决方案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...
    

    【讨论】:

    • 没错,但我如何才能访问仪表板?
    猜你喜欢
    • 2022-11-07
    • 2022-12-30
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多