我想为每个部署的docker容器配置多行模式。我知道我可以配置不同的filebeat输入,但事实是我不知道我使用的是哪个容器,因为容器日志的路径类似于/ var / lib / docker / containers / {id} / [{id} .log
有什么想法吗?
答案 0 :(得分:0)
您可以在文件拍配置中使用glob模式:
这样的设置
/var/lib/docker/containers/*/*.log
应该匹配您要查找的任何文件吗?
https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-log.html#input-paths
请确保文件没有被多个路径设置匹配。
根据添加的要求在下面进行编辑。
例如,您将运行以下两个容器:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
77e87b8e772e yadayada "/hihihi" 2 weeks ago Up 19 seconds 0.0.0.0:9080->9080/tcp container1
99e87b8e772e blablabla "/hahaha" 2 weeks ago Up 19 seconds 0.0.0.0:9080->9080/tcp container2
根据提供的信息,假设是:
container1登录/var/lib/docker/containers/77e87b8e772e/77e87b8e772e.log
container2登录/var/lib/docker/containers/99e87b8e772e/99e87b8e772e.log
这可能是配置:
filebeat.inputs:
- type: log
paths: /var/lib/docker/containers/${CONTAINERID1}/${CONTAINERID1}.log
multiline.pattern: '^=[A-Z]+|^$'
multiline.negate: true
multiline.match: after
- type: log
paths: /var/lib/docker/containers/${CONTAINERID2}/${CONTAINERID2}.log
multiline.pattern: '^=[1-9]+|^$'
multiline.negate: true
multiline.match: after
因此,在启动filebeat时,您需要在实际运行filebeat之前做一些其他事情:
export CONTAINERID1=$(docker ps|grep "container1$" | cut -d ' ' -f1)
export CONTAINERID2=$(docker ps|grep "container2$" | cut -d ' ' -f1)
./filebeat
这样,只要容器名称相同,ID就可以不同,并且仍然可以使用。请注意,当您启动一个新版本(a版)时 容器,则必须重新启动Filebeat才能选择新路径。
还请注意,如果您在Docker容器本身中运行Filebeat,则导出变量很可能不够,您必须使用来编辑文件
sed
或其他东西,然后再将其传递到filebeat-container