tiad
October 28, 2015, 8:14am
1
こんにちは。
elasticserchに格納したデータをkibana4で可視化しようと試みている者なのですが。
以下の要素でデータを格納している場合に、
datetime, user, task_id, status
以下の様なデータが格納されているとして、
2015/10/28 10:10:10, "test_user1", "task_1", "task_begin"
2015/10/28 10:15:10, "test_user1", "task_1", "task_finish"
2015/10/28 10:20:10, "test_user2", "task_2", "task_begin"
2015/10/28 10:25:10, "test_user1", "task_3", "task_begin"
2015/10/28 11:30:10, "test_user2", "task_2", "task_finish"
2015/10/28 12:35:10, "test_user1", "task_3", "task_finish"
task_id毎にbeginからfinishまでの時間を求めてユーザー毎の平均グラフにする等の、
データ同士の計算結果をグラフにすることは可能だったりするのでしょうか?
やはり、計算したデータを別途elasticserchに格納する必要があるのでしょうか?
上記はデータの一例ですが、
データの応用的な可視化の方法等ございましたら、ご教授いただけると助かります。
よろしくお願いします。
suzuki
(Norio Suzuki)
October 28, 2015, 9:35am
2
Kibana4 だけで、ご希望の結果を出力するのは難しそうな気がします。
begin, finish の結果を1行に収めるような形に加工して Elasticsearch へ格納すれば、「ユーザー毎の平均グラフ」を実現できそうな気配は感じます。
もともとのログ出力を1行にまとめてしまえるのであれば、それが一番簡単そうですね。
tiad
October 29, 2015, 1:26am
3
なるほど、
1行に収めると可能性があるのですね。
カラムにbigin_time,finish_timeを追加する感じでしょうか?
それとも、processing_timeみたいなカラムを追加して計算した時間を格納する感じでしょうか?
例えば、データのstatus欄に"bigin_time='2015/10/28 10:25:10' finish_time='2015/10/28 10:35:10'"と格納して計算できたりするのでしょうか?
Scripted fields やAggregation等がわかると少し表現できる幅が広がったりするのでしょうか?
疑問ばかりになってしまい、恐縮です。
もともとのログ出力をまとめることができないので、
1クッション加工を挟んで格納することを検討してみます。
ありがとうございます。
suzuki
(Norio Suzuki)
October 29, 2015, 5:21am
4
カラムにbigin_time,finish_timeを追加する感じでしょうか?
それとも、processing_timeみたいなカラムを追加して計算した時間を格納する感じでしょうか?
僕がやるとしたら、複数行のログを1行に加工する際に processing_time
を計算してしまいますかねぇ。
{"timestamp": "2015/10/28 10:10:10", "user": "test_user1", "task": "task_1", "start": "2015/10/28 10:10:10", "finish": "2015/10/28 10:15:10", "processing_time": "【計算した差分】"}
{"timestamp": "2015/10/28 10:20:10", "user": "test_user2", "task": "task_2", "start": "2015/10/28 10:20:10", "finish": "2015/10/28 10:30:10", "processing_time": "【計算した差分】"}
{"timestamp": "2015/10/28 10:25:10", "user": "test_user1", "task": "task_3", "start": "2015/10/28 10:25:10", "finish": "2015/10/28 10:35:10", "processing_time": "【計算した差分】"}
begin
, finish
は processing_time
があれば要件的には不要な気がしますが、「入れられるものは入れておけ」的な考えで、とりあえず残しておくと思います。
これで user
を軸に集計してしまえば、いけそうな気がします。
(実際には試していないので、うまくいかなかったらごめんなさい)
Scripted fields やAggregation等がわかると少し表現できる幅が広がったりするのでしょうか?
Kibana4 でグラフを作る場合には「既に用意されている Aggregation を使ってグラフを描画する」というイメージになると思います。
Elasticsearch の Aggregation の知識があれば、どのような集計をしているのかを理解しやすくなりますが、Kibana4 の表現力そのものが拡張できるわけではないです(Kibana4 を拡張をするなら別ですが)
まずは、Kibana4 で何ができるのか試してみて、それ以上の表現力が欲しくなったときに、次をどうするか考えるのが良いのではないでしょうか。
tiad
October 29, 2015, 6:28am
5
丁寧に回答していただきありがとうございます。
なるほど、できることの理解が足りなかったようですね。(表現力を求めすぎていました。)
格納するデータの時点での加工も必要なことがわかりましたので、
まずは、Elasticserch+Kibana4で可能な幅の理解から始めようと思います。
その後、ほしい情報と照らしあわせて考えると良いのかもしれませんね。
現段階でも生ログをコンソールで見ている状態からは随分進歩しているので。
ありがとうございました。