Logstash Kibana不在filebeat中显示grok过滤器中的字段
我想在Kibana中显示包含apache日志的日志文件。 日志以IP开头。我已经调试了我的模式,它通过了。 我试图在beats输入配置文件中添加字段,但即使在刷新字段后,这些字段也不会显示在Kibana中。 这是配置文件Logstash Kibana不在filebeat中显示grok过滤器中的字段,logstash,logstash-grok,Logstash,Logstash Grok,我想在Kibana中显示包含apache日志的日志文件。 日志以IP开头。我已经调试了我的模式,它通过了。 我试图在beats输入配置文件中添加字段,但即使在刷新字段后,这些字段也不会显示在Kibana中。 这是配置文件 filter { if[type] == "apache" { grok { match => { "message" => "%{HOST:log_host}%{GREEDYDATA:remaining}" } add_fiel
filter {
if[type] == "apache" {
grok {
match => { "message" => "%{HOST:log_host}%{GREEDYDATA:remaining}" }
add_field => { "testip" => "%{log_host}" }
add_field => { "data_left" => "%{remaining}" }
}
}
...
只需补充一点,我已经在新配置后重新启动了所有服务:logstash、elasticsearch、kibana。问题可能是您的
grok
模式使用的模式太死板了
- 根据
字段的名称,test\u ip
很可能是HOST
IPORHOST
filter {
if [type] == "apache" {
grok {
match => {
message => "%{IPORHOST:log_host}%{GREEDYDATA:remaining}"
}
add_field => {
testip => "%{log_host}"
data_left => "%{remaining}"
}
}
}
}
话虽如此,使用add_字段
是完全没有必要的。grok
模式本身正在创建两个字段:log\u host
和remaining
,因此不需要定义名为testip
和data\u left
的额外字段
也许更有用的是,您不需要编写自己的Apache web日志grok
模式,这将自动提供所有标准字段
filter {
if [type] == "apache" {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
# Set @timestamp to the log's time and drop the unneeded timestamp
date {
match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
remove_field => "timestamp"
}
}
}
您可以在。FYI中看到这一点,对于这种更改,重新启动非日志存储服务是不必要的。我只运行了%{GREEDYDATA:remaining}测试。这是Kibana中输出的JSON格式:
“_source”:{“message”:“/valid message Here/”,“@version”:“1”,“@timestamp”:“2016-06-21T09:19:12.770Z”,“offset”:406600,“beat”:{“hostname”:/name/”,“name”:/name/“},
剩余的
字段找不到了。我最喜欢的调试日志的方法是将您的消息放入文本文件,然后cat
将其放入日志:cat myfile.txt | bin/Logstash-f myconf.conf
。为此,我使用stdin
输入和stdout
输出。我猜您的类型
它不匹配,所以它甚至没有运行。一个简单的测试是删除类型检查,看看会发生什么(可能是grok解析失败)。这是向前迈出的一步。然而,现在我只使用%{IPORHOST}来获取ip字段,但在输出中我得到的正是输入中的内容。如果使用output{stdout{codec=>rubydebug},输出是什么
?这将显示整个事件,包括任何元字段。