Docker -- 日志
阅读原文时间:2023年07月08日阅读:5

docker 的两总日志

  1. 引擎日志
  2. 容器日志

引擎日志

  • Docker 引擎日志就是 dockerd 运行时的日志
  • 在CentOS 7系统中,Docker 引擎日志一般是交给 systemd来管理
  • 查询方法:journalctl -u docker
# journalctl -u docker

容器日志

  • 容器的日志即容器内的服务产生的日志
  • 对于一个运行的容器,Docker 会将日志发送到 容器的 标准输出设备(STDOUT)和标准错误设备(STDERR),STDOUT 和 STDERR 实际上就是容器的控制台终端

Docker 提供了多种日志机制帮助用户从运行的容器中提取日志信息,这些机制被称作 logging driver

Docker 的默认 logging driver 是json-file

╭─root@du-z ~
╰─➤  docker info | grep Logging
 Logging Driver: json-file

Docker支持的日志驱动列表

Driver

Description

none

运行的容器没有日志,docker logs也不返回任何输出。

local

日志以自定义格式存储,旨在实现最小开销。

json-file

日志格式为JSON。Docker的默认日志记录驱动程序。

syslog

将日志消息写入syslog。该syslog守护程序必须在主机上运行。

journald

将日志消息写入journald。该journald守护程序必须在主机上运行。

gelf

将日志消息写入Graylog扩展日志格式(GELF)端点,例如Graylog或Logstash。

fluentd

将日志消息写入fluentd(转发输入)。该fluentd守护程序必须在主机上运行。

awslogs

将日志消息写入Amazon CloudWatch Logs。

splunk

使用HTTP事件收集器将日志消息写入splunk。

etwlogs

将日志消息写为Windows事件跟踪(ETW)事件。仅适用于Windows平台。

gcplogs

将日志消息写入Google Cloud Platform(GCP)Logging。

logentries

将日志消息写入Rapid7 Logentries。

Driver网址:https://docs.docker.com/config/containers/logging/configure/

方法一:

# docker logs CONTAINER

# docker logs -f CONTAINER
  • docker logs能够打印出自容器启动以来完整的日志,并且-f 参数可以实时监控
  • 当日志量比较大的时候,我们使用 docker logs 来查看日志,会对 docker daemon 造成比较大的压力,容器导致容器创建慢等一系列问题
  • 只有使用了 local 、json-file、journald 的日志驱动的容器才可以使用 docker logs 捕获日志

在开源的日志管理方案中,最出名的莫过于 ELK 了。ELK 是三个软件的合称:Elasticsearch、Logstash、Kibana。

Elasticsearch

一个近乎实时查询的全文搜索引擎。Elasticsearch 的设计目标就是要能够处理和搜索巨量的日志数据。

Logstash

读取原始日志,并对其进行分析和过滤,然后将其转发给其他组件(比如 Elasticsearch)进行索引或存储。Logstash 支持丰富的 Input 和 Output 类型,能够处理各种应用的日志。

Kibana

一个基于 JavaScript 的 Web 图形界面程序,专门用于可视化 Elasticsearch 的数据。Kibana 能够查询 Elasticsearch 并通过丰富的图表展示结果。用户可以创建 Dashboard 来监控系统的日志