2017-09-14 48 views
0

logstash 5.2.2フィルタに問題があります。文字列を整数に変換する必要があり、失敗しています。私が取っているアプローチは理想的ではないかもしれません。ここに問題文があります: JMX MBeanの値は "metric_value_string"を "XX.X secs"と報告します。この値を、可視化での木場集約の数値に使用できるようにしたいと考えています。Logstash 5.2.2 - 値の変更に関する問題 - 文字列から整数への追加フィールドの変換

私が試したのだ何:

定義: ソースフィールドが "metric_value_string" です。文字列。値は「26.0秒」のように見えます。 目的の宛先フィールドは「time_in_seconds」です。整数です。

スクリプトフィールドを作成しようとしました。 「metric_value_string」から「Kibana検出結果」の数字のような数字に変換するだけで、集計には視覚化の数値として利用できました。視覚化が実行されると、エラーが発生します。これはキャスト例外で、変換された「time_in_seconds」ではなく、「metric_value_string」の値が表示されます。これは木場5.2.2です。これがバグであればIDK、私は別のアプローチを試みました。

ログスタッシュフィルタでフィールドの作成と変換を試みました。

私は、これらのアプローチの両方を試してみました:

filter { 
    if "TimeSince" in [metric_path] or "Delay" in [metric_path] { 
     mutate { add_field => { "time_in_seconds" => "%{metric_value_string}"} } 
     mutate { gsub => ["time_in_seconds", ".0 secs", ""] } 
     mutate { convert => { "time_in_seconds", "integer" } }   
    } 
} 

filter { 
    if "TimeSince" in [metric_path] or "Delay" in [metric_path] { 
     ruby { 
      code => 
       "event.set('time_in_seconds', event.get('metric_value_string'))" 
     } 
     mutate { gsub => ["time_in_seconds", ".0 secs", ""] } 
     mutate { convert => { "time_in_seconds", "integer" } }   
    } 
} 

条件付きのものはOKです。私がコメントアウトすると、出力では期待どおりに見え、失敗しません。

私は何が原因で失敗しているのか分かりません。エラーは構文エラーだと言っていますが、変換ラインをコメントアウトするだけで問題ありません。サニティチェックとして、gsub行の後にコードを追加し、そのコードに問題がないことを確認しました。

はこちらlogstashからSTDOUTです:私は変換の行をコメントアウト場合

input { 
    jmx { 
     path => "plugins/jmx" 
     polling_frequency => 60 
     type => "jmx" 
     nb_thread => 4 
    } 
} 

filter { 
    if "TimeSince" in [metric_path] or "Delay" in [metric_path] { 
     mutate { add_field => { "time_in_seconds" => "%{metric_value_string}"} } 
     mutate { gsub => ["time_in_seconds", ".0 secs", ""] } 
     mutate { convert => { "time_in_seconds", "integer" } } 
    } 
} 

output { 
    stdout { codec => rubydebug } 
} 

アム...いいえ問題:

C:\Elastic\logstash-5.2.2\bin>cls 

C:\Elastic\logstash-5.2.2\bin>logstash -f config/logstash.conf --config.reload.automatic 
JAVA_OPTS was set to [ -Dlog4j.configurationFile=C:\Elastic\logstash-5.2.2\config\log4j2.properties  -Xmx1g -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=1 -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="C:\Elastic\logstash-5.2.2/heapdump.hprof"]. Logstash will trust these options, and not set any defaults that it might usually set 
[2017-09-14T14:14:14,056][ERROR][logstash.agent   ] Cannot load an invalid configuration {:reason=>"Expected one of #, => at line 14, column 42 (byte 355) after filter {\n\tif \"TimeSince\" in [metric_path] or \"Delay\" in [metric_path] {\n\t\tmutate { add_field => { \"time_in_seconds\" => \"%{metric_value_string}\"} }\n\t\tmutate { gsub => [\"time_in_seconds\", \".0 secs\", \"\"] }\n\t\tmutate { convert => { \"time_in_seconds\""} 

ここでは上記のようにエラーからの設定ファイルの内容はません私はこれについて間違った方法をとっていますか?私はこのスタックに新しいです。これがC#/ SQLの場合は、単にreplace + cast/convertを実行します。私は間違った場所でこれをやっていますか?

編集:

は、ここでは、実際のデータを見ることができるように、私は変換の行をコメントアウトするときSTDOUTです:

C:\Elastic\logstash-5.2.2\bin>cls 

C:\Elastic\logstash-5.2.2\bin>logstash -f config/logstash.conf --config.reload.automatic 
JAVA_OPTS was set to [ -Dlog4j.configurationFile=C:\Elastic\logstash-5.2.2\config\log4j2.properties  -Xmx1g -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=1 -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="C:\Elastic\logstash-5.2.2/heapdump.hprof"]. Logstash will trust these options, and not set any defaults that it might usually set 
[2017-09-14T14:23:13,456][INFO ][logstash.pipeline  ] Starting pipeline {"id"=>"main", "pipeline.workers"=>4, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>5, "pipeline.max_inflight"=>500} 
[2017-09-14T14:23:13,568][INFO ][logstash.inputs.jmx  ] Create queue dispatching JMX requests to threads 
[2017-09-14T14:23:13,573][INFO ][logstash.inputs.jmx  ] Compile regexp for group alias object replacement 
[2017-09-14T14:23:13,574][INFO ][logstash.pipeline  ] Pipeline main started 
[2017-09-14T14:23:13,576][INFO ][logstash.inputs.jmx  ] Initialize 4 threads for JMX metrics collection 
[2017-09-14T14:23:13,648][INFO ][logstash.inputs.jmx  ] Loading configuration files in path {:path=>"plugins/jmx"} 
[2017-09-14T14:23:13,743][INFO ][logstash.agent   ] Successfully started Logstash API endpoint {:port=>9600} 
{ 
        "path" => "plugins/jmx", 
      "environment" => "TEST", 
      "@timestamp" => 2017-09-14T18:23:14.154Z, 
       "@version" => "1", 
        "host" => "MY HOST", 
      "metric_path" => "xxStatus", 
        "type" => "jmx", 
    "metric_value_string" => "idle" 
} 
{ 
        "path" => "plugins/jmx", 
     "time_in_seconds" => "191", 
      "environment" => "TEST", 
      "@timestamp" => 2017-09-14T18:23:14.200Z, 
       "@version" => "1", 
        "host" => "MY HOST", 
      "metric_path" => "xxTimeSincexx", 
        "type" => "jmx", 
    "metric_value_string" => "191.0 secs" 
} 
+0

httpsにクロスポスト@示されhttps://www.elastic.co/guide/en/logstash/current/plugins-filters-mutate.html#plugins-filters-mutate-convert

@ドキュメントに間違っていなければなりません。//discuss.elastic .co/t/logstash-5-2-2-mutate-string-value-to-number/100877 –

答えて

0

それは、CONVERTに不正な構文ました。

filter { 
    if "TimeSince" in [metric_path] or "Delay" in [metric_path] { 
     mutate { add_field => { "time_in_seconds" => "%{metric_value_string}"} } 
     mutate { gsub => ["time_in_seconds", ".0 secs", ""] } 
     mutate { convert => ["time_in_seconds", "integer"] } 
    } 
} 

filter { 
    if "TimeSince" in [metric_path] or "Delay" in [metric_path] { 
     mutate { add_field => { "time_in_seconds" => "%{metric_value_string}"} } 
     mutate { gsub => ["time_in_seconds", ".0 secs", ""] } 
     mutate { convert => ["time_in_seconds", "integer"] } 
    } 
} 

構文が正しい例はhttps://discuss.elastic.co/t/solved-the-filter-plugin-mutate-convert-doesnt-work-in-5-0/65496/3

関連する問題