将 docker logs 添加到 ELK

前提:必须对 docker log 有所了解,不了解的前往>> logging

示例代码

Docker logging driver

对 Docker 而言,其默认的 logging driverjson-file,如果在启动时没有特别指定,都会使用这个默认的 logging driver

json-file 会将我们在控制台通过 docker logs 命名看到的日志都保存在一个 json 文件中,我们可以在服务器 Host 上的容器目录中找到这个 json 文件。

日志路径

1
/var/lib/docker/containers/<container-id>/<container-id>-json.log

安装 Filebeat

注意这里下载和我们ELK对应的版本.

安装 Filebeat

配置 Filebeat

这里我们需要告诉 Filebeat 要监控哪些日志文件及将日志发送到哪里去,因此我们需要修改一下 Filebeat 的配置:

1
2
cd /etc/filebeat
vim filebeat.yml

要修改的内容为:

监控哪些日志?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
filebeat.inputs:

# Each - is an input. Most options can be set at the input level, so
# you can use different inputs for various configurations.
# Below are the input specific configurations.

- type: log

# Change to true to enable this input configuration.
enabled: true # 开启 filebeat

# Paths that should be crawled and fetched. Glob based paths.
paths:
- /var/lib/docker/containers/*/*.log # 添加 docker logs 日志文件路径
- /var/log/syslog

这里指定 paths:/var/lib/docker/containers/*/*.log,另外需要注意的是将 enabled 设为 true

将日志发到哪里?

1
2
3
4
5
6
7
8
9
#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["127.0.0.1:9200"]

# Optional protocol and basic auth credentials.
protocol: "http"
#username: "elastic"
#password: "changeme"

这里指定直接发送到 ElasticSearch,配置一下ES的接口地址即可。

启动 Elasticsearch

克隆 示例代码 并启动

1
docker-compose up -d

启动 Filebeat

1
./filebeat -c filebeat.yml &

验证数据

打开网址 看到索引为 filebeat- 开头表示数据传输成功。