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