我是 ELK 堆栈的新手,我开始使用 Filebeat 和 Logstash 将 Windows Server 2012 应用程序服务器上的 IIS 日志推送到 Elastic Search。
我计划扩展它,以便它还推送由我们的应用程序(而不是 IIS(编写的自定义应用程序日志。为此,我需要在 Logstash 中区分一种类型的日志和另一种类型的日志。
因此,在filebeat.yml中,我添加了一个名为"log_type"的自定义字段:
type: log
enabled: true
paths:
- C:inetpublogsLogFiles**
fields:
log_type: iis
在我的 Logstash 中,我尝试根据"log_type"的值执行一些条件逻辑,但它不起作用。如果我删除条件逻辑,过滤器就可以工作。
filter {
if [fields.log_type] == "iis" {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:log_timestamp} %{IPORHOST:site} %{WORD:method} %{URIPATH:page} %{NOTSPACE:querystring} %{NUMBER:port} %{NOTSPACE:username} %{IPORHOST:clienthost} %{NOTSPACE:useragent} %{NOTSPACE:referer} %{NUMBER:response} %{NUMBER:subresponse} %{NUMBER:scstatus} %{NUMBER:timetaken:int}"}
}
date {
match => [ "log_timestamp", "ISO8601" ]
target => "@timestamp"
}
}
}
我已经搜索了又搜索,但找不到如何做到这一点。真的很感激一些帮助。
要访问 Logstash 中的字段,语法应该是[fields][log_type]
而不是[fields.log_type]
。
参考
- 日志字段引用
您的配置中有此行吗? fields_under_root: true
.如果是,您可以尝试简单地[log_type]
,没有任何前缀。