Filter 如何从logstash中的日志文件中提取CPU使用情况详细信息

Filter 如何从logstash中的日志文件中提取CPU使用情况详细信息,filter,cpu-usage,logstash,grok,Filter,Cpu Usage,Logstash,Grok,我试图从消息中提取CPU使用率和时间戳: 2015-04-27T11:54:45.036Z| vmx| HIST ide1 IRQ 4414 42902 [ 250 - 375 ) count: 2 (0.00%) min/avg/max: 250/278.50/307 我正在使用logstash,这是我的logstash.config文件: input { file { path => "/home/xyz/Downloads/vmware.log"

我试图从消息中提取CPU使用率和时间戳:

2015-04-27T11:54:45.036Z| vmx| HIST ide1 IRQ 4414 42902 [  250 -   375 ) count:    2 (0.00%) min/avg/max: 250/278.50/307
我正在使用logstash,这是我的logstash.config文件:

input {
    file {
    path => "/home/xyz/Downloads/vmware.log"
    start_position => beginning
    }
}

 filter {
    grok{
            match => ["message", "%{@timestamp}"]
    }
}
 output{
    stdout {
    codec => rubydebug
    }
    }

但它给了我格罗克解析错误,任何帮助都将不胜感激。谢谢。

根据Magnus的消息,您错误地使用了grok match函数,@timestamp是logstash用作接收消息的时间戳的系统字段的名称,而不是grok模式的名称

首先,我建议您看看可以使用的一些默认grok模式,然后我还建议您使用最后,如果所有其他模式都失败,请进入#logstash irc频道(在freenode上),我们在那里非常活跃,因此我相信有人会帮您

为了进一步帮助您,这是我创建的一个快速grok模式,它应该与您的示例相匹配(我只使用grok调试器来测试它,所以生产中的结果可能并不完美—所以请测试它!)

稍微解释一下,%{TIMESTAMP_ISO8601}是一个默认的grok模式,它与示例中的时间戳匹配

您会注意到\的使用相当多,因为后面的字符需要转义(因为我们使用的是正则表达式引擎,空格、管道等都有意义,通过转义,我们禁用了该意义并按字面意思使用它们)

我使用了%{GREEDYDATA}模式,因为它可以捕获任何内容,当您只想捕获消息的其余部分时,这非常有用,如果您将它放在grok模式的末尾,它将捕获所有剩余的文本。 然后,我从您的示例(min/avg/max)中提取了一些内容,以阻止GREEDYDATA捕获消息的其余部分,因为我们需要之后的数据

%{NUMBER}显然将捕获数字,但花括号内:后面的位定义了该字段将由logstash给出的名称,并随后保存在elasticsearch中


我希望这有帮助

你的表情是无效的
@timestamp
是字段的名称,而不是模式。但是消息中的CPU使用率在哪里?“0.00%”?最小/平均/最大值表示CPU使用率。如何编写模式以获取这些值?
filter {
  grok {
    match => [ "message", "%{TIMESTAMP_ISO8601}\|\ %{WORD}\|\ %{GREEDYDATA}\ min/avg/max:\ %{NUMBER:minimum}/%{NUMBER:average}/%{NUMBER:maximum}" ]
  }
}