1

我正在使用 prima/filebeat 映像在 docker 容器上运行 Filebeat(以前称为“logstash-forwarder”)。

日志文件位于加载到容器的卷中,我希望能够删除容器并重新运行它,而无需将日志重新发送到 logstash。

我尝试将 /.filebeat 注册表文件作为卷加载,以便在启动时重新加载,但我得到的只是这些错误:

2016/02/03 13:47:29.107457 file_other.go:39: ERR Rotate error: rename /.filebeat.new /.filebeat: device or resource busy
2016/02/03 13:47:29.107788 registrar.go:105: ERR Writing of registry returned error: rename /.filebeat.new /.filebeat: device or resource busy. Continuing..

有没有人碰巧知道如何做这样的事情?

4

1 回答 1

1

使用 Filebeat 版本 1.2.3(其他版本可能相同,版本 1.3 前几天刚出,我还没有尝试过),您需要指定注册表文件的路径。注册表文件是 Filebeat 保存其读取偏移量的文件(换句话说,它正在处理的日志文件中的当前读取点)。

您需要在filebeat.yml文件中指定该prospectors部分之后的注册表路径。

就像是:

filebeat:
  prospectors:
    -
      document_type: wildfly-server
      input_type: log
      paths:
        - /path/to/my/log.log
      multiline:
         pattern: 'your pattern'
         negate: true
         match: after

  registry_file: /data/.filebeat

logging:
  level: debug
  to_syslog: true

output:
  logstash:
    hosts:
      - "127.0.0.1:5000"

然后在您的 docker compose 文件中,您需要安装一个指向您的registry_file路径的卷。就像是:

filebeat:
  image: prima/filebeat:latest
  volumes:
     - /data/filebeat:/data
  hostname: qa

然后您应该在主机中看到.filebeat位于/data/filebeat文件夹中的文件。

于 2016-09-09T11:04:46.357 回答