使用logstash文件输入时出现意外异常 - “exception”=&gt;#<nomethoderror:undefined =“”method =“”'split'=“”for =“”nil:nilclass =“”> </nomethoderror:>

时间:2014-08-06 08:47:38

标签: logstash

我在使用Fortimail日志文件时遇到了麻烦。

当我使用stdin输入时,一切正常,没有任何问题。但是当我使用文件输入时,我有一个例外&#34;未定义的方法`split&#39;为零:NilClass&#34;:

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字段的值为空

我现在如何解决问题?

1 个答案:

答案 0 :(得分:1)

你不需要经历整个红宝石的事情。只需将配置更改为以下内容:

if [message] =~ "type=statistics" {
   grok { 
       // stats grok here
   }
} else if [message] =~ "type=spam" {
   grok { 
       // spam grok here
   }
}