将日志导入Influxdb

时间:2016-12-16 09:15:42

标签: influxdb logparser telegraf

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

的错误

1 个答案:

答案 0 :(得分: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 repo上打开一个问题,以便在这些情况下返回错误消息。

至于你正在尝试做的比赛,这可能会有所帮助:Negative Look Ahead Go regular expressions