如何将 Docker 容器日志从 Azure 应用服务发送到 Seq 日志服务器?

Tys*_*ams 16 azure docker azure-web-app-service docker-logs seq-logging

我的网站使用 Docker 容器,并使用 Azure 应用服务将其托管在 Azure 上。我使用 Seq 日志服务器来集中记录日志。

如何将 Docker 容器日志从 Azure 应用服务发送到 Seq 日志服务器?

恐怕答案可能是:这是不可能的。将 Docker 容器日志发送到 Seq 日志服务器的“正确”方法包括向命令添加一些参数docker run,但我找不到任何方法在 Azure 应用服务或相应的Azure Web 应用服务容器任务中提供此类参数我用它来将新的容器映像部署到该服务。

我希望将 docker 日志发送到 Seq 的原因之一是我认为 Azure 对日志的处理令人困惑。 这个问题包含许多关于如何从 Azure 中获取一些 docker 日志的答案,但没有一个比在 Seq 日志服务器中搜索“docker”更简单或完整。


也许 Azure 应用服务不是完成这项工作的正确工具。相反,也许我应该使用 Azure 容器实例 (ACI)。 与 Docker 的集成似乎很强大。然而,这个答案说

Azure Web App for Containers 的目标是长时间运行的东西(始终运行),而 ACI 的目标是计划\突发\短期工作负载(类似于 Azure Functions)。

我的网站应该始终运行,因此这让我认为我正确使用了 Azure 应用服务。


也许我应该使用Docker 任务部署到我的 Azure 应用服务。然而,有两件事让我有不同的想法。首先是任务说:

使用此任务可以使用 Docker 注册表服务连接构建 Docker 映像并将其推送到任何容器注册表。

[...]

此任务还可用于控制作业和服务容器。这种用法并不常见,但偶尔用于特殊情况。

此外,我的 Azure 应用服务在执行时包含许多参数docker run。我不知道他们都做什么,也不知道我需要包含什么才能使事情正常工作。


也许这些可通过参数配置的选项docker run可以在创建 Docker 映像时对其进行硬编码。但是,我还没有发现任何建议表明这是可能的。


docker run我关心的论点之一是--log-driver。Docker 容器的默认日志驱动程序可以通过配置文件设置daemon.json。也许可以通过此配置文件配置与我的 Azure 应用服务关联的 Docker 容器。但是,我还没有找到任何方法来做到这一点。

lia*_*nan 0

配置 Seq 以接受 GELF 格式日志(请注意,如果您不想运行第二个容器,可以使用Seq.Input.Gelf应用程序)。

然后将容器配置为使用 GELF 日志记录,如下所示:

docker run \
    --rm \
    -it \
    --log-driver gelf \
    --log-opt gelf-address=udp://seq.example.com:12201 \
    hello-world:latest
Run Code Online (Sandbox Code Playgroud)

(来自 Seq 文档)

在此示例中,--log-driver gelf指示 Docker 使用 GELF 日志记录驱动程序输出日志,同时--log-opt gelf-address=udp://seq.example.com:12201指示 Docker 通过 UDP 将日志发送到指定的主机/端口对。