【问题标题】:How to extract CPU Usage details from the log file in logstash如何从 logstash 的日志文件中提取 CPU 使用率详细信息
【发布时间】:2015-04-28 02:27:47
【问题描述】:

我正在尝试从消息中提取 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 解析错误,任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 你的grok表达式无效; @timestamp 是字段的名称,而不是模式。但是消息中的 CPU 使用率在哪里? “0.00%”?
  • min/avg/max 值代表 CPU 使用率。如何编写模式来获取这些值?

标签: filter cpu-usage logstash grok


【解决方案1】:

根据 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 模式的末尾,它将捕获所有剩余的文本。 然后,我从您的示例(最小/平均/最大)中提取了一些信息,以阻止 GREEDYDATA 捕获消息的其余部分,因为我们想要之后的数据。

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

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 2023-01-09
    • 1970-01-01
    相关资源
    最近更新 更多