我在使用Fortimail日志文件时遇到了麻烦。
当我使用stdin输入时,一切正常,没有任何问题。但是当我使用文件输入时,我有一个例外"未定义的方法`split'为零:NilClass":
Exception in filterworker
{"exception"=>#<NoMethodError: undefined method `split' for nil:NilClass>,
"backtrace"=>["(ruby filter code):1:in `register'", "org/jruby/RubyProc.java:271:in
`call'", "/opt/logstash/lib/logstash/filters/ruby.rb:38:in `filter'", "(eval):29:in
`initialize'", "org/jruby/RubyProc.java:271:in `call'",
"/opt/logstash/lib/logstash/pipeline.rb:262:in `filter'",
"/opt/logstash/lib/logstash/pipeline.rb:203:in `filterworker'",
"/opt/logstash/lib/logstash/pipeline.rb:143:in `start_filters'"], :level=>:error}
在fortimail日志文件中,我有两种类型的日志(垃圾邮件和统计信息)。每种类型都有适当的grok,所以我使用ruby过滤器来检查日志的类型(使用if语句)
ruby {
code => "event['type'] = event['message'].split('type=')[1].split(' ')[0]"
}
if [type] == "statistics" {
grok { grokparser -statistics }
}
if [type] == "spam" {
grok { grokparser -spam }
}
我觉得logstash没有读取日志文件。 Type字段的值为空
我现在如何解决问题?
答案 0 :(得分:1)
你不需要经历整个红宝石的事情。只需将配置更改为以下内容:
if [message] =~ "type=statistics" {
grok {
// stats grok here
}
} else if [message] =~ "type=spam" {
grok {
// spam grok here
}
}