0

我使用 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).)*

4

1 回答 1

0

我不确定您为什么没有收到错误消息,但不幸的是 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 存储库上打开一个问题以返回错误消息。

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

于 2016-12-16T17:22:28.247 回答