自定义模式在将日志导入 influxdb 时删除机器人

custom pattern to drop bots when importing logs into influxdb

我使用 telegraf 和 logparser 插件将 apache 日志导入 influxdb

我想过滤掉来自机器人的所有日志,所以我使用正则表达式设置了一个自定义模式,该正则表达式仅匹配不包含单词 "bot" 和 "crawl" 的用户代理:

NOBOT ((?!bot|crawl).)*
CUSTOM_LOG_FORMAT %{CLIENT:client_ip} %{NOTSPACE:ident} %{NOTSPACE:auth} \[%{HTTPDATE:ts:ts-httpd}\] "(?:%{WORD:verb:tag} %{NOTSPACE:request}(?: HTTP/%{NUMBER:http_version:float})?|%{DATA})" %{NUMBER:resp_code:tag} (?:%{NUMBER:resp_bytes:int}|-) %{QS:referrer} "%{NOBOT:agent}"

但它不起作用,正在将零指标导入 influxdb

正则表达式似乎没问题,当我在这里测试时它工作正常:http://grokconstructor.appspot.com/do/match

为了确保我尝试了一个更简单的正则表达式:

BOT .*?bot.*?
CUSTOM_LOG_FORMAT %{CLIENT:client_ip} %{NOTSPACE:ident} %{NOTSPACE:auth} \[%{HTTPDATE:ts:ts-httpd}\] "(?:%{WORD:verb:tag} %{NOTSPACE:request}(?: HTTP/%{NUMBER:http_version:float})?|%{DATA})" %{NUMBER:resp_code:tag} (?:%{NUMBER:resp_bytes:int}|-) %{QS:referrer} "%{BOT:agent}"

它有效,telegraf 只从机器人导入日志,但我想要相反的东西,我不明白 ((?!bot|crawl).)*

有什么问题

我不确定您为什么没有收到错误消息,但不幸的是,Go 不支持否定前瞻:

https://play.golang.org/p/Kq5N2FgG6_

Hello, playground
panic: regexp: Compile(`((?!bot|crawl).)*`): error parsing regexp: invalid or unsupported Perl syntax: `(?!`

goroutine 1 [running]:
panic(0x133400, 0x1050a140)
    /usr/local/go/src/runtime/panic.go:500 +0x720
regexp.MustCompile(0x149f1b, 0x11, 0x1, 0xb)
    /usr/local/go/src/regexp/regexp.go:237 +0x1a0
main.main()
    /tmp/sandbox426143344/main.go:10 +0xe0

在这些情况下,我建议在 github 回购上打开一个问题以 return 一条错误消息。

至于进行匹配,这可能会有所帮助:Negative Look Ahead Go regular expressions