Elasticsearch

為什麼 filebeat 中的 exclude_lines 會排除所有日誌?

  • January 27, 2021

我正在使用ELK Stack,並且我的大多數伺服器都執行良好。例外情況是我有一個 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

下面是日誌文件的範例,我想阻止PUT來自gitlab-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)"

我希望刪除以 ** 開頭的行,其餘的要通過,但這沒有發生(這些行現在都沒有通過)。如果我刪除正則表達式,一切都會再次出現。

如果您將exclude_lines-configuration 簡化為以下內容,它將由 filebeat 匹配。

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

我已經閱讀了exclude_linesregexp-support文件,但我沒有弄清楚您的初始正則表達式與這三行不匹配的原因,因為當我將其添加到 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 不匹配的條目時,找出原因會容易得多。

我希望這個答案能幫助你一路走好!

引用自:https://serverfault.com/questions/896103