2016-03-22 40 views
0

如何將有效載荷作爲輸入傳遞給ELK觀察器中的「變換」過程?我嘗試了以下方法,但它將它們作爲字符串傳遞給groovy文件。Elasticsearch觀察器轉換腳本

"transform": { 
    "script": { 
    "file": "error_parser", 
    "lang": "groovy", 
    "params": { 
     "inputval": "{{ctx.payload.aggregations.errorcount.buckets}}" 
    } 
    } 
} 

當我想傳遞一個字符串或整數時,我不會面臨任何問題,而是面對對象。有沒有辦法將它們傳遞給文件?在這種情況下,我們從groovy腳本返回的輸出值的存儲位置('條件'過程在類似情況下評估輸出爲布爾值)?

Groovy的內容:

println inputval 
return inputval[0].doc_count 

當我執行觀察者我獲得以下錯誤

{{ctx.payload.aggregations.errorcount.buckets}} 
[2016-03-22 17:23:08,637][ERROR][watcher.transform.script ] [Hannah Levy] failed to execute [script] transform for [my-watch_2-2016-03-22T21:23:08.617 
Z] 
ScriptException[failed to run file script [error_parser] using lang [groovy]]; nested: MissingPropertyException[No such property: doc_count for class: 
java.lang.String]; 
     at org.elasticsearch.script.groovy.GroovyScriptEngineService$GroovyScript.run(GroovyScriptEngineService.java:318) 
     at org.elasticsearch.watcher.transform.script.ExecutableScriptTransform.doExecute(ExecutableScriptTransform.java:73) 
     at org.elasticsearch.watcher.transform.script.ExecutableScriptTransform.execute(ExecutableScriptTransform.java:59) 
     at org.elasticsearch.watcher.transform.script.ExecutableScriptTransform.execute(ExecutableScriptTransform.java:40) 

回答

0

我敢肯定你不能做到這一點:

"inputval": "{{ctx.payload.aggregations.errorcount.buckets}}" 

我會做這在你的腳本,而不是

println ctx.payload.aggregations.errorcount.buckets 
return ctx.payload.aggregations.errorcount.buckets[0].doc_count 

並且我會刪除腳本部分的參數

+0

您的意思是我們無法將任何動態值從trasnform部分傳遞到groovy中嗎? – svjn

+0

我還沒有看到任何文檔,說明你可以 – maximede

+0

謝謝maximede。這一個工程。 – svjn