为什么filebeat中的这个exclude_lines会排除所有日志?

为什么filebeat中的这个exclude_lines会排除所有日志?

我在用着ELK 堆栈,并且它在我的大多数服务器上都运行得很好。例外情况是,我的 gitlab 服务器在 gitlab-access 日志中发生与 gitlab-ci 服务器的 ping。这种情况每秒都会发生,我想忽略它。我的正则表达式与我使用的正则表达式测试器中的这些行匹配,但它似乎已停止来自该文件的所有日志,而不是预期的单行。

filebeat:
  prospectors:
    paths:
      - /var/log/gitlab/nginx/gitlab_access.log
    input_type: log
    exclude_lines: ['(.*\bPUT\b)(.*\bgitlab-ci-multi-runner).*']
    document_type: gitlab_access

下面是日志文件的一个示例,我想阻止来自 的每一PUTgitlab-ci-multi-runner

**192.168.1.105 - - [07/Feb/2018:07:53:36] "PUT /ci/api/v1/builds/1738.json HTTP/1.1" 404 3082 "" "gitlab-ci-multi-runner 1.3.0 (1-6-stable; go1.3.3; linux/amd64)"**
192.168.1.110 - - [07/Feb/2018:07:53:37] "POST /api/v4/jobs/request HTTP/1.1" 204 0 "" "gitlab-ci-multi-runner 9.2.0 (7-2-stable; go1.7.5; windows/amd64)"
**192.168.1.105 - - [07/Feb/2018:07:53:39] "PUT /ci/api/v1/builds/1738.json HTTP/1.1" 404 3082 "" "gitlab-ci-multi-runner 1.3.0 (1-6-stable; go1.3.3; linux/amd64)"**
192.168.1.110 - - [07/Feb/2018:07:53:40] "POST /api/v4/jobs/request HTTP/1.1" 204 0 "" "gitlab-ci-multi-runner 9.2.0 (7-2-stable; go1.7.5; windows/amd64)"
192.168.1.55 - - [07/Feb/2018:07:53:40] "GET / HTTP/2.0" 200 45895 "" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36"
192.168.1.55 - - [07/Feb/2018:07:53:41] "GET /assets/favicon-075eba763121a0c1f89a89ee81678bcde72e2a47cd3a42.ico HTTP/2.0" 200 1384 "https://gitlab.com/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.78 Safari/537"
192.168.1.55 - - [07/Feb/2018:07:53:41] "GET /uploads/-/system/user/avatar/21/yodaProfile.jpg HTTP/2.0" 304 0 "https://gitlab.com/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36"
**192.168.1.105 - - [07/Feb/2018:07:53:42] "PUT /ci/api/v1/builds/1738.json HTTP/1.1" 404 3082 "" "gitlab-ci-multi-runner 1.3.0 (1-6-stable; go1.3.3; linux/amd64)"**
192.168.1.110 - - [07/Feb/2018:07:53:43] "POST /api/v4/jobs/request HTTP/1.1" 204 0 "" "gitlab-ci-multi-runner 9.2.0 (7-2-stable; go1.7.5; windows/amd64)"

我期望删除以 ** 开头的行,其余行通过,但这并没有发生(现在这些行都没有通过)。如果我删除正则表达式,所有内容都会再次通过。

答案1

如果您将exclude_lines配置简化为以下内容,它将与 filebeat 匹配。

exclude_lines: ['\"PUT.*gitlab-ci-multi-runner']

我已经阅读过排除行正则表达式支持文档,但我没有弄清楚为什么你的初始正则表达式与这三行不匹配,因为当我将它添加到 regexr.com 并选择 PCRE 作为正则表达式引擎时它们匹配。

如果您想找出导致它不匹配的原因,我建议您从正则表达式中删除一个元素,直到它匹配为止。

首先删除分组

exclude_lines: ['.*\bPUT\b.*\bgitlab-ci-multi-runner.*']

然后尝试删除\b条目

exclude_lines: ['.*PUT.*gitlab-ci-multi-runner.*']

那么你应该得到与我的答案类似的结果。

exclude_lines: ['PUT.*gitlab-ci-multi-runner']

您还可以一次删除一个条目,而不是所有\b元素。当您找出导致 exclude_lines 不匹配的条目时,找出原因将变得容易得多。

我希望这个答案能够对你有所帮助!

相关内容