Docker引擎不同的日志驱动配置以及通过Filebeat采集容器日志的两种解决方案
1、使用Docker容器日志
我们可以使用 docker logs 命令查看 Docker 容器内部应用程序运行时所产生的日志。
docker logs -f -t [容器id]
使用 docker logs 命令可以免除首先进入 Docker 容器,再打开应用程序的日志文件的过程。docker logs 会监控容器中操作系统的
标准输出设备(STDOUT),一旦 STDOUT 有数据产生,就会将这些数据传输到另一个“设备”中,该 Docker 的驱动被称为“日志驱动”(Logging Driver)
2、配置日志驱动
2.1、日志驱动
Docker 提供多种日志驱动程序,可以帮助你从正在运行的容器和服务中获取信息。
每个 Docker 守护进程都有一个默认的日志驱动程序,如果你没有将其配置为使用其他日志驱动程序,则每一个容器都会使用这个默认配置(默认的日志驱动程序 json-file)。
支持的日志驱动程序如下:
驱动程序 | 描述 |
---|---|
none | 容器没有日志可用,docker logs 什么都不返回 |
json-file | 日志格式化为 JSON。这是 Docker 默认的日志驱动程序。 |
syslog | 将日志消息写入 syslog 工具。syslog 守护程序必须在主机上运行。 |
journald | 将日志消息写入 journald。journald 守护程序必须在主机上运行。 |
gelf | 将日志消息写入 Graylog Extended Log Format (GELF) 终端,例如 Graylog 或 Logstash。 |
fluentd | 将日志消息写入 fluentd(forward input)。fluentd 守护程序必须在主机上运行。 |
awslogs | 将日志消息写入 Amazon CloudWatch Logs。 |
splunk | 将日志消息写入splunk使用HTTP事件收集器。 |
etwlogs | 将日志消息写为 Windows 的 Event Tracing 事件。仅在Windows平台上可用。 |
gcplogs | 将日志消息写入 Google Cloud Platform (GCP) Logging。 |
logentries | 将日志消息写入 Rapid7 Logentries。 |
2.2、配置默认的日志驱动程序
要配置 Docker 守护进程默认使用指定的日志驱动程序,我们需要将 daemon.json 文件(Linux 中一般位于 /etc/docker/,Windows 中一般位于 C:\ProgramData\docker\config\)中的 log-driver 值设为日志驱动程序的名字即可。默认的日志驱动程序 json-file。下面例子将其设置为 syslog:
{
"log-driver": "syslog"
}
2.3、日志驱动的可配置选项(log-opts)
如果日志驱动程序有可配置的选项,可以在 daemon.json 文件的关键字 log-opts 中以 JSON 格式设置。下面示例为 json-file 日志驱动程序设置了几个可配置选项:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3",
"labels": "production_status",
"env": "os,cu