如何通过Filebeat爬行Nginx容器日志?

时间:2018-07-09 07:47:22

标签: docker nginx containers filebeat

问题陈述

默认情况下,NGINX映像配置为将主要NGINX访问和错误日​​志发送到Docker日志收集器。通过将它们链接到stdout和stderr来完成,这会将来自两个日志的所有消息存储在Docker主机上的文件/var/lib/docker/containers/<container id>/<container id>-json.log中。

既然已经将辛苦工作从容器中取出日志并送到主机中了,那么也许我们应该尝试利用它?但是/var/lib/docker/containers/

中有许多无法区分的文件夹
# ls -alrt /var/lib/docker/containers/
total 84
drwx--x--x 14 root root 4096 Jul  4 13:40 ..
drwx------  4 root root 4096 Jul  4 13:55 a4ee4224c3e4c68a8023eb63c01b2a288019257440b30c4efb7226eb83629956
drwx------  4 root root 4096 Jul  6 16:24 59d1465b5c42f2ce6b13747c39ff3995191d325d641b6ef8cad1a8446247ef24
...
drwx------  4 root root 4096 Jul  9 06:34 cab3407af18d778b259f54df16e60f5e5187f14b01a020b30f6c91c6f8003bdd
drwx------  4 root root 4096 Jul  9 06:35 0b99140af456b29af6fcd3956a6cdfa4c78d1e1b387654645f63b8dc4bbf049c
drwx------ 21 root root 4096 Jul  9 06:35 .

即使我们通过/var/lib/docker/containers/递归搜索-json.log并包含字符串upstream_response_time的任何文件来narrow them down

# grep -lr "upstream_response_time" /var/lib/docker/containers/ --include "*-json.log"
/var/lib/docker/containers/cfe8...fe18/cfe8...fe18-json.log
/var/lib/docker/containers/c3c3...6662/c3c3...6662-json.log

...仍然使我们处于一种情况,由于容器的启动/停止,我们将不得不不断介入以找到正确的文件夹...我们将不得不重新配置FileBeat来抓取它们。

  

问题:那么如何重命名docker容器日志文件夹以给它们一个可预测的名称?

替代品

以下是我已经排除的其他某些方法,但请随时有所不同。

设置named volume

$ tree /var/lib/docker/volumes/*nginx-log-volume
/var/lib/docker/volumes/my_swarm_stack_nginx-log-volume
└── _data
    ├── access.log -> /dev/stdout
    └── error.log -> /dev/stderr

命名卷作为stack名称和named volume名称my_swarm_stack_nginx-log-volume的组合而存在。但是,这些不是到常规文件,而是到std流的某种软链接/管道。所以我觉得这种方法是无效的。

1 个答案:

答案 0 :(得分:0)

我认为您使当前的问题过于复杂。 Filebeat已经有很多可配置的选项,您不需要重新发明这种东西。

我建议您只使用add_docker_metadata处理器。这将为容器生成的每个日志附加有用的信息,例如imagecontainer namedrop处理器可以对其进行检查,您可以在此处进行设置,使您仅接受日志只能从特定容器中获取。

processors:
- add_docker_metadata:
- drop_event:
    when:
      not:
         regexp:
            docker.container.name: "^nginx"

Adding Docker Metadata Documentation

Filtering Using Drop Processor