Logstash grok 过滤器帮助 - 十六进制?

use*_*411 3 hex logstash logstash-grok

好吧,我用 grok 过滤器从日志行中找出唯一 ID 的第一段,就像这样(这只是我关心的第一段,扔掉其余的)。该段是十六进制的,我想要它是二进制的。

该行:

Transaction: 000178ec-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Run Code Online (Sandbox Code Playgroud)

过滤器就像:

Transaction: %{BASE16NUM:transaction_id}-%{GREEDYDATA:otherpartsidontcareabout}
Run Code Online (Sandbox Code Playgroud)

但它只是给了我这个结果:

{
  "transaction_id": [
  [
    "000178ec"
  ],
  "otherpartsidontcareabout":
  [
    "XXXX-XXXX-XXXX-XXXXXXXXXXXX"
  ]]
}
Run Code Online (Sandbox Code Playgroud)

我原以为它会被转换成十进制:

{
  "transaction_id": [
  [
    "96492"
  ],
  "otherpartsidontcareabout":
  [
    "XXXX-XXXX-XXXX-XXXXXXXXXXXX"
  ]]
}
Run Code Online (Sandbox Code Playgroud)

我这样做错了吗?我真的被困住了。

Alc*_*zar 5

BASE16NUM仅指示文本的模式。要将其转换为整数,您必须执行以下操作:

filter { 
  ruby { 
    code => "event['transaction_id'] = event['transaction_id'].hex"
  } 
}
Run Code Online (Sandbox Code Playgroud)

或对于logstash 5

filter { 
  ruby { 
    code => "event.set('transaction_id', event.get('transaction_id').hex)" 
  } 
}
Run Code Online (Sandbox Code Playgroud)