如何使用 FileBeat 从日志行设置字段

How to set fields from the log line with FileBeat

在 Windows 服务器上,我有一个 FileBeat 进程,它获取我所有的 NCSA 日志(NCSA 格式的 HTTP 请求)并将它们发送到我们的 redis 数据库(用于 ELK 堆栈的缓冲区) .

我第一次执行 FileBeat 进程时,它获取了我所有的日志并将它们发送到 Redis,非常完美,除了 @timestamp 是在执行当天设置的,而不是日志本身的日期(我有6 个月历史)。 这在 Kibana 中看起来不太好,因为 6 个月的日志历史记录出现在同一时间(分钟)。

我每天有一个文件,我想知道是否可以在 filebeat 配置中从日志文件本身提取时间戳以设置 @timestamp,以便每个 line/file 都与正确时间?

日志行如下所示:

172.16.70.18 -  -  [03/Dec/2016:09:24:24 +0000] "GET /svc/product/v2/IDCDN8QH00?sid=mobile HTTP/1.1" 404 411 "-" "Jakarta Commons-HttpClient/3.1"
172.16.70.18 -  -  [03/Dec/2016:13:00:52 +0000] "GET /svc/asset/v2/560828?sid=mobile HTTP/1.1" 200 6670 "-" "Jakarta Commons-HttpClient/3.1"
172.16.82.232 -  -  [03/Dec/2016:15:15:55 +0000] "GET /svc/store/v1?sid=tutu&lang=en&lang=fr HTTP/1.1" 200 828 "-" "Apache-HttpClient/4.5.1 (Java/1.7.0_51)"
172.16.82.235 -  -  [02/Dec/2016:15:15:55 +0000] "GET /svc/asset/v1?sid=tutu&size=1 HTTP/1.1" 200 347 "-" "Apache-HttpClient/4.5.1 (Java/1.7.0_51)"
172.16.82.236 -  -  [02/Dec/2016:15:16:02 +0000] "GET /svc/product/v2?sid=tutu HTTP/1.1" 200 19226 "-" "Apache-HttpClient/4.5.1 (Java/1.7.0_51)"
172.16.82.237 -  -  [02/Dec/2016:15:16:14 +0000] "GET /svc/catalog/v2?sid=tutu HTTP/1.1" 200 223174 "-" "Apache-HttpClient/4.5.1 (Java/1.7.0_51)"
172.16.82.238 -  -  [02/Dec/2016:15:16:26 +0000] "GET /svc/store/v1?sid=tutu&lang=en&lang=fr HTTP/1.1" 200 3956 "-" "Apache-HttpClient/4.5.1 (Java/1.7.0_51)"
172.16.70.15 -  -  [01/Dec/2016:15:53:42 +0000] "GET /svc/product/v2/IDAB062200?sid=mobile HTTP/1.1" 200 5400 "-" "Jakarta Commons-HttpClient/3.1"
172.16.70.17 -  -  [01/Dec/2016:15:53:42 +0000] "GET /svc/product/v2/IDAB800851?sid=mobile HTTP/1.1" 200 3460 "-" "Jakarta Commons-HttpClient/3.1"
172.16.70.18 -  -  [01/Dec/2016:16:35:36 +0000] "GET /svc/product/v2/IDAB601071?sid=mobile HTTP/1.1" 404 400 "-" "Jakarta Commons-HttpClient/3.1"
172.16.70.18 -  -  [01/Dec/2016:16:35:36 +0000] "GET /svc/product/v2/IDCDN8QH00?sid=mobile HTTP/1.1" 401 400 "-" "Jakarta Commons-HttpClient/3.1"

此外,我想知道我是否可以使用处理器来处理,例如使用第一列的内容创建一个新字段 'IP'。

我看到了 ,但它看起来只能与 ElasticSearch 直接集成。 我的 FileBeat 输出是 Redis。

Filebeat 的唯一解析功能是 JSON 日志。因此,如果您可以将服务器更改为以 JSON 格式写入数据,则无需触及管道的其余部分(Redis -> Logstash -> Elasticsearch)即可完成此操作。

否则在将数据写入Redis 之前,您需要使用Logstash 进行解析。您可以 运行 Filebeat -> Logstash -> Redis 或者只是 Logstash -> Redis。

或者如果您可以修改上游 Logstash 配置,您可以在那里进行解析。