2

「経過」logstash フィルターを使用して、イベントの期間を計算しています。logstash のデフォルトである秒単位ではなく、分単位の時間が必要です。そのため、変換にルビ フィルターを使用していますが、ルビ フィルター内で浮動小数点数を小数点以下 2 桁に丸めることができません。

filter{
 ruby{
   code=>"event['elapsed.time']=event['elapsed.time']/60.0"
 }
}

表示形式「.2f」を使用しようとしましたが、おそらく引用符が原因で機能しません。エスケープ文字の使用も機能しません。

浮動小数点数で.round(2)も試しましたが、元の値が保持されます。

4

3 に答える 3

2

丸めに関しては、同じことをしなければなりませんでした。= の右側にあるものを ().round(2) のようにラップするだけです。

(event['elapsed.time'] / 60.0).round(2)"

私の場合、最初からフィールドが float であることを確認する必要があったため、mutate フィルターを追加しました。結果は次のようになります。

filter{
 mutate {
   convert => [ "elapsed.time", "float" ]
 }
 ruby{
   code=>"event['elapsed.time'] = (event['elapsed.time'] / 60.0).round(2)"
 }
}
于 2015-10-26T16:38:02.607 に答える
2

[重大な変更][1] を含む logstash 5.0 を使用している場合、フィルター ブロックは次のようになります。

filter{
    mutate {
        convert => { "total_time_cor" => "float" }
    }
    ruby{
        code=>"event.set('[elapsed.time]', (event.get('elapsed.time')/60.0).round(2))"
    }
    }
于 2016-11-10T05:37:37.360 に答える
0

それが機能していないとどのように判断していますか?おそらくマッピングの問題と戦っているelasticsearchを調べてみてください。

整数フィールドがある場合、除算により float が作成されます。

filter {

  ruby{
    code=>"
       event['time']=100

       event['time']=event['time']/60.0
    "
    }
}
于 2015-07-13T21:18:23.023 に答える