我应该在哪里存储在Container(docker / kubernetes)中运行的应用程序的日志文件?

时间:2018-12-12 06:41:52

标签: docker kubernetes containers

我必须将应用程序(C / C ++)移植到Docker容器。该应用程序写入文件系统中的日志文件。 当应用程序在容器中运行时,如何以及在何处存储日志文件?

2 个答案:

答案 0 :(得分:1)

您有两种选择:

  1. 您的应用程序是否已写入/dev/stdout和/或/dev/stderr
  2. 写入文件系统上的日志文件。

其归结为“日志收集”以及如何收集这些数据。登录到stdout和stderr可能是最简单的方法,但是如果您想获取和分析有关应用程序的非常特定的日志数据,则无济于事。

Docker支持多个“日志驱动程序”,这将有助于提取,转换日志数据并将其提升到外部源(“ ETL”)。参见:https://docs.docker.com/config/containers/logging/configure/

对于我所有的应用程序,我都使用FluentD和docker日志收集器,因此我可以对数据(https://fluentd.org)进行“智能”处理。

答案 1 :(得分:0)

我建议以下内容来编写应用程序的日志文件,并在运行命令时查看日志的stdout和stderr

$docker logs <docker-name>

这需要更改Dockerfile,这是您在大多数Docker(如nginx,httpd)中都能看到的。

 # forward request and error logs to docker log collector
 RUN ln -sf /dev/stdout /var/log/<app-name>/access.log \
    && ln -sf /dev/stderr /var/log/<app-name>/error.log