2016-02-09 22 views
7

オブジェクトにイベントのシーケンスを表す小さなドキュメントをESに格納しています。各イベントには日付/タイムスタンプがあります。我々は、一定期間にわたるすべてのオブジェクトのイベント間の時間を分析する必要があります。例えばタイムスタンプデルタのヒストグラムを作成するにはどうすればよいですか?

、これらのイベントのJSON文書を想像:

{ "オブジェクト": "1"、 "イベント": "スタート"、 "日時": "2016年2月9日11時23分01秒を" }

{ "オブジェクト": "1"、 "イベント": "停止"、 "日時": "2016年2月9日午前11時25分01秒"}

{ "オブジェクト": "2 "イベント": "開始"、 "日時": "2016-01-02 11:23:01"}

{"オブジェクト": "2"、 "イベント": "停止"、 "datetime ":" 2016-01-02 11:24:01 "}

ここから抜け出したいのは、2つのタイムスタンプデルタ(開始から停止まで)をプロットするヒストグラムです。オブジェクト1では2分/ 120秒、オブジェクト2では1分/ 60秒です。

最終的には、開始イベントと終了イベントの間の時間を監視する必要がありますが、それらのイベント間の時間を計算し、集計/集計/プロットするためのKibana UIに提供する必要があります。理想的には、木場に直接結果をフィードしてカスタムUIを作成しないようにしたいと考えています。

おかげさまで、ご意見やご提案をありがとうございます。

+0

私はいくつかの疑問を持っています。 EventAとEventBは別の文書に属していますか?クエリで特定された各オブジェクトの意味は何ですか?達成したいことの例を挙げてください。 – Richa

+0

さて、もう少し具体的に質問を更新しました。これが私の質問をより良く説明するかどうかを教えてください。 –

+0

現在の文書構造では可能ではありません。 「object」、「eventStartTime」、「eventStoptime」のフィールドを持つように文書を変更することはできますか? – Richa

答えて

2

あなたがLogstashを使用して、オープンしているので、これは最初にインストールする必要がコミュニティプラグインであることをaggregate filter

注意を使用してそれを実行する方法があります。 (デフォルトではLogstashには含まれません)

aggregateフィルタの主なアイデアは、2つの「関連する」ログ行をマージすることです。プラグインを構成して、関連するものが何であるかを知ることができます。あなたのケースでは、「関連する」の両方のイベントが最初のイベントがstart値とのeventフィールドを有し、第2のイベントがstop値とのeventフィールドを有していること、同じobject名前(すなわちone又はtwo)を共有しなければならないことを意味します。

フィルタがstartイベントに遭遇すると、そのイベントのdatetimeフィールドが内部マップに格納されます。 stopイベントが発生すると、2つのdatetimesの時間差を計算し、新しいdurationフィールドに期間を秒単位で格納します。

input { 
    ... 
} 
filter { 
    ...other filters 

    if [event] == "start" { 
     aggregate { 
      task_id => "%{object}" 
      code => "map['start'] = event['datetime']" 
      map_action => "create" 
     } 
    } else if [event] == "stop" { 
     aggregate { 
      task_id => "%{object}" 
      code => "map['duration'] = event['datetime'] - map['start']" 
      end_of_task => true 
      timeout => 120 
     } 
    } 
} 
output { 
    elasticsearch { 
     ... 
    } 
} 

あなたがより良いあなたのニーズに合わせてtimeout値(ここでは120秒)を調整することができます。タイムアウトが経過し、まだ​​ストップイベントが発生していない場合、既存の開始イベントは破棄されます。

+0

この作品はありましたか?あなたが知る必要があることは他にありますか? – Val

+0

ありがとうございます。答えをよろしくお願いします。私たちの解決策のように見えます。再度、感謝します。 –

+0

素晴らしい、嬉しかったよ! – Val

関連する問題