【发布时间】:2018-06-04 09:09:44
【问题描述】:
我在获取 filebeat 以从 apache2 的访问日志中排除行时遇到一些问题。我启用了 apache2.yml 配置,它确实排除了日志 files 但不排除行。这是我要排除的行的示例:
example.site.com:80 192.168.0.1 - - [20/Dec/2017:10:18:37 -0500] "GET /server-status?auto= HTTP/1.1" 301 522 "-" "Go-http-client/1.1"
以下是我尝试将正则表达式格式与 apache2.yml 文件中的 exclude_lines: 选项一起使用的方法:
exclude_lines: ['.*server-status.*']
exclude_lines: ['(?i:/server-status\?auto=)']
exclude_lines: ['GET /server-status']
以及其他一些变体。我还在主 filebeat 配置文件和 apache2 模块配置中尝试了一个处理器,如下所示:
- module: apache2
# Access logs
access:
enabled: true
processors:
- drop_event:
when:
regexp:
apache2.access.url: "server-status"
我用contains: 代替regexp: 进行了尝试,但这似乎也不起作用。但是这个:
exclude_files: [".gz$"] 有效;来自日志文件:
017-12-21T10:15:27-05:00 DBG [prospector] Exclude file: /var/log/apache2/example.site.com/access.log.10.gz
这一切都让我有点发疯。不管我用哪种方式尝试表达式或处理器,上面的示例日志行仍然被提供给 elasticsearch。我在 Discussion.elastic.co 论坛上发布了一个类似的问题,但到目前为止还没有人回复。
有没有人有排除日志行的经验? Filebeat、Elasticsearch 和 Logstash 都是 6.1.0 版本。
提前致谢!
【问题讨论】:
-
试试这个 exclude_lines: ['.*server-status.*','(?i:/server-status\?auto=)','GET /server-status'] in filebeat。 yml
-
感谢您的回复。不幸的是,即使将您的建议添加到 filebeat.yml 配置文件并重新启动服务,这些事件仍然会传递到 ES。
-
我几乎感觉到它甚至没有读取/使用 exclude_lines 选项。我决定尝试删除日志文件中的所有内容,无论使用 ['.'] 的内容如何,但所有内容仍会进入 ES。
-
我发现了问题所在。我注意到即使我已经注释掉了 exclude_files 行,它仍然排除了 .gz 日志文件,即使它不应该这样做。于是我去挖了。事实证明,这里有一个 access.yml 文件: /usr/share/filebeat/module/apache2/access/config 仍然设置了 exclude_files 选项以忽略 .gz 文件。在该行下方,我添加了: exclude_lines: ['.*(?:server-status).*'] 并重新启动服务。看了日志文件,宾果游戏,现在正在删除行。
标签: elasticsearch apache2 filebeat