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

时间:2015-04-28 02:27:47

标签: 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"
    start_position => beginning
    }
}

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

但是它给了我grok解析错误,任何帮助都会非常感激。感谢。

1 个答案:

答案 0 :(得分:2)

根据来自Magnus的消息,您正在错误地使用grok匹配功能,@ timestamp是logstash用作收到消息的时间戳的系统字段的名称,而不是grok模式的名称

首先,我建议您查看一些可以使用的默认grok模式here,然后我还建议您最终使用grok debugger,如果其他所有操作都失败,请获取你自己在#logstash irc频道(在freenode上),我们在那里非常活跃,所以我相信有人会帮助你。

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

filter {
  grok {
    match => [ "message", "%{TIMESTAMP_ISO8601}\|\ %{WORD}\|\ %{GREEDYDATA}\ min/avg/max:\ %{NUMBER:minimum}/%{NUMBER:average}/%{NUMBER:maximum}" ]
  }
}

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

你会注意到使用\非常多,因为后面的字符需要被转义(因为我们正在使用正则表达式引擎和空格,管道等有意义,通过逃避它们我们禁用了这个含义并按字面意思使用它们。

我使用了%{GREEDYDATA}模式,因为它会捕获任何内容,当你只想捕获其余的消息时,这可能很有用,如果你把它放在grok模式的末尾,它将捕获所有剩余的文本。 然后我从你的例子中取了一点(min / avg / max)来阻止GREEDYDATA捕获剩下的消息,因为我们想要之后的数据。

显然,

%{NUMBER}会捕获数字,但是花括号内的位置定义了logstash给出的字段名称,随后保存在elasticsearch中。

我希望有所帮助!