3

わかりました、とりわけ、このようにログ行から一意の ID の最初のセグメントを grok フィルターで釣り上げます (私が気にするのは最初のセグメントだけで、残りは破棄します)。このセグメントは 16 進数で、2 進数で表示します。

この線:

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

フィルターは次のようになります。

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

しかし、それは私にこの結果を与えるだけです:

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

10進数に変換されると予想していた場所:

{
  "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 に答える