Filebeat多行模式

时间:2018-11-15 14:35:51

标签: docker logstash filebeat

我想为每个部署的docker容器配置多行模式。我知道我可以配置不同的filebeat输入,但事实是我不知道我使用的是哪个容器,因为容器日志的路径类似于/ var / lib / docker / containers / {id} / [{id} .log

有什么想法吗?

1 个答案:

答案 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