tom1989
December 19, 2018, 3:28am
1
Lineグラフのmetrics(Y軸)にMax Bucketを使用し、以下を実現したいのですが、JSON inputでcountした結果を60で割るという計算はできないでしょうか。
・ログから分単位で件数をcountした値を60で割り、各時刻(分)における1秒間の平均値を算出
[max bucketの設定]
︎bucket
・aggregation: data histogram
・field: DATE型のfield
・interval: minute
︎metric
・aggregation: Count
→Advancedで、countした結果を60で割りたいですが、記述の仕方が分かりませんでした。
JSON inputは、erasticsearchのfieldへのアクセスしかしないものでしょうか。
X-axisでは、_valueを指定すると、X軸の数値に対し計算できるようですが…
やりたいこととしては以下の記事が類似していますが解決していないようでした。
(分単位のcountを60で割ってならしたいため、秒単位でcountする、ですとやりたいことと異なります)
I have created a new visualization with the number of requests for an Apache log.
Y-Axis: Count
X-Axis: Date Histogram using timestamp field and interval set to Hourly.
This shows the total number of events of every hour, but we want to obtain the number of requests per second, so I need to divide the "count" by 3600.
I have tried using the "JSON Input", but it only applies to the "key" field.
Eg. without "JSON Input":
{
"key_as_string": "2015-06-10T08:00:00.000Z",
"key": 1433923200000…
Kibanaでの集計が難しそうでしたら、logstashでのログ加工を検討します。
お力添え頂ければ幸いです。
tsgkdt
(tsgkdt)
December 19, 2018, 5:15am
2
こんにちわ
json inputについて
Hello,
I have a visualization on Kibana of type "Data table", I need to apply a simple script on the count aggregations result (divied count by 2).
[Capture1]
I tried to embed a script in advanced JSON like this :
{ "script" : "doc['count'].value / 2" }
But, it doesn't like having any affect on my results
[table]
Any thought about how to make it ?
Thanks in advance for your help !
こちらによりますと、
The script parameter defines an inline script, which operates against each document , and not the result of the aggregation. So you can't use it to accomplish what you're trying to do.
と書いてあり、Aggregationの結果に対しての操作をするものじゃないよ、と読めます。
今回は、avgやsumなどではなくcountした値を式にかけたい、ということだったので、このアプローチを止めて下に紹介するTimeSeriesを確認してみました。
Visual Builderでの例
もし、標準のLineチャートでなければだめだ、ということがなければ、VisualBuilderで作成することができるTimeSeriesでは如何でしょうか。
Countに、AggregationでMath を追加することでやりたいことができるのでは?と思います。
以下では、分かりやすいように、件数を10倍して描画する例を確認しています。
カウントだけを描画した例
カウント件数を10倍して描画した例
参考になったdiscuss
You can use the Metric tab in the Visual Builder where you can do math calculations on the count aggregation.
Here's an example:
[58%20AM]
ご参考になれば幸いです。
mnozawa
(Makoto Nozawa)
December 19, 2018, 6:21am
3
バージョンがわかりませんがline chartではなくtimelionを使い、Intervalを1mにして下記の定義ではどうでしょうか
.es(index=YOUR_INDEX, q='*', timefield=YOUR_FIELD,metric=count).divide(divisor=60)
mukai
December 19, 2018, 7:50am
4
他の人ほどスマートな回答ではないけど、一応こんな方法でもできます。
① 「Index Patterns → Scripted fields」で新フィールド「0.13333」(固定値)を作成。
それをSumで足せば「Countを60で割った値」が表示される。
ただ計算で値を求めるため、速度は落ちると思います。
tom1989
December 25, 2018, 6:07am
5
https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-search
みなさまご助言ありがとうございます。
バージョンは6.5.1を使用しております。
◆TimeSeriesは、aggregation(count)をelastic searchに登録した「分」のfieldでgroup byし、ご教示いただいた方法で計算できればやりたいことに近いかと思いましたが、group byをTermsに変更しようとすると「未定義またはNULL参照のプロパティ'contains'は取得できません」とエラー画面がでてつまづいてしまいました。。
◆Scripted fieldの方法も試しましたが、そもそもElastic Searchに登録するログのつくり上、lineグラフ横軸にする時刻情報がかけてしまう(◯時台にログの出力件数が0であった場合、グラフ上その時刻が出力されない)という問題があり、ES登録前にログを集計しないと難しそうでしたため(ログは極力加工しない方針)いったん断念しました。。
が、Scripted fieldの使い方を知らなかったため、勉強になりました。ありがとうございます。
◆そのため、Timelionで実施しています。仰る通り、intervalを1mにするとやりたいことになりました!
可能であれば、60で割ったカウントから、さらに1時間あたり最大値を算出・intervalを1hにしたいのですが、Timelionの関数だとうまくできないものでしょうか…
system
(system)
Closed
January 22, 2019, 6:07am
6
This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.