3

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

该行:

Transaction: 000178ec-XXXX-XXXX-XXXX-XXXXXXXXXXXX

过滤器是这样的:

Transaction: %{BASE16NUM:transaction_id}-%{GREEDYDATA:otherpartsidontcareabout}

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

{
  "transaction_id": [
  [
    "000178ec"
  ],
  "otherpartsidontcareabout":
  [
    "XXXX-XXXX-XXXX-XXXXXXXXXXXX"
  ]]
}

我曾期望将其转换为十进制:

{
  "transaction_id": [
  [
    "96492"
  ],
  "otherpartsidontcareabout":
  [
    "XXXX-XXXX-XXXX-XXXXXXXXXXXX"
  ]]
}

我做错了吗?我真的卡住了。

4

1 回答 1

5

BASE16NUM只是表示文本的模式。要将其转换为整数,您将不得不执行以下操作:

filter { 
  ruby { 
    code => "event['transaction_id'] = event['transaction_id'].hex"
  } 
}

或用于logstash 5

filter { 
  ruby { 
    code => "event.set('transaction_id', event.get('transaction_id').hex)" 
  } 
}
于 2014-09-11T16:40:37.797 回答