概要

はじめに

数十億の時系列に対する予測と異常検出では、多くのコンピューティング負荷が高くなります。既存のほとんどのシステムは、予測と異常検出をバッチジョブとして実行します(リスク パイプライン、トラフィック予測、需要計画など)。このため、一連のイベント ディメンション全体の急激な増加または減少に基づくアラートの決定など、オンラインで実行できる分析の種類が大幅に制限されます。

Timeseries Insights API の主な目標は次のとおりです。

  • クエリ パラメータに基づいて、未加工のイベントとそのプロパティから動的に構築される数十億の時系列にスケーリングできます。
  • リアルタイムの予測と異常検出の結果を提供します。つまり、数秒以内にすべての時系列のトレンドと季節性を検出し、スライスが予期せず急激に上昇または減少しているかどうかを判断します。

API の機能

  • データセットを管理する
    • Cloud Storage に保存されている複数のデータソースで構成されたデータセットをインデックスに登録して読み込みます。ストリーミング方式で新しいイベントを追加できるようにします。
    • 不要になったデータセットをアンロードします。
    • データセットの処理ステータスを問い合わせます。
  • データセットのクエリ実行
    • 指定されたプロパティ値に一致する時系列を取得します。時系列は、指定したタイム ホライズンまでの予測です。時系列は異常についても評価されます。
    • 異常のプロパティ値の組み合わせを自動的に検出します。
  • データセットの更新
    • 最近発生した新しいイベントを準リアルタイムで(数秒から数分の遅延で)取り込み、インデックスに組み込みます。

障害復旧

Timeseries Insights API は、Cloud Storage のバックアップとしては機能しません。また、未加工のストリーミング更新を返すこともありません。クライアントは、データを別々に保存し、バックアップする必要があります。

リージョンが停止すると、サービスはベスト エフォート型の復旧を実行します。停止の開始後 24 時間以内に更新されたメタデータ(データセットと運用ステータスに関する情報)とストリーミングされたユーザーデータは復元されない可能性があります。

復旧中は、データセットに対するクエリとストリーミング更新を使用できないことがあります。

入力データ

数値データやカテゴリデータは、時間の経過とともに収集されるのが一般的です。たとえば、次の図は、一定期間における 1 分ごとのデータセンターで実行中の単一のジョブの CPU 使用率、メモリ使用量、ステータスを示しています。CPU 使用率とメモリ使用量は数値で、ステータスはカテゴリ値です。

時系列

イベント

Timeseries Insights API は、基本データエントリとしてイベントを使用します。各イベントには、タイムスタンプとディメンションのコレクションがあります。つまり、キーがディメンション名である Key-Value ペアです。この単純な表現により、数兆単位のデータを処理できます。たとえば、単一のイベントを完全に表すために、データセンター、ユーザー、ジョブ名、タスク番号が含まれています。上の図は、単一のジョブに対して記録された一連のイベントを示しており、ディメンションのサブセットを示しています。

{"name":"user","stringVal":"user_64194"},
{"name":"job","stringVal":"job_45835"},
{"name":"data_center","stringVal":"data_center_30389"},
{"name":"task_num","longVal":19},
{"name":"cpu","doubleVal":3840787.5207877564},
{"name":"ram","doubleVal":1067.01},
{"name":"state","stringVal":"idle"}

データセット

データセットはイベントの集合です。クエリは同じデータセット内で実行されます。 各プロジェクトで複数のデータセットを使用できます。

データセットは、バッチデータとストリーミング データから構築されます。バッチデータビルドでは、データソースとして複数の Cloud Storage URI からの読み取りを行います。バッチビルドが完了すると、データセットをストリーミング データで更新できます。過去のデータにバッチビルドを使用すると、コールド スタートの問題を回避できます。

データセットのクエリや更新を行う前に、構築するかインデックスに登録しておく必要があります。インデックスへの登録はデータセットが作成されると始まり、データの量に応じて通常数分から数時間かかります。具体的には、データソースは最初のインデックス登録中に 1 回スキャンされます。最初のインデックス登録が完了した後に Cloud Storage URI の内容が変更された場合、再スキャンは行われません。追加データにはストリーミング更新を使用します。ストリーミング更新は、準リアルタイムで継続的にインデックスに登録されます。

時系列と異常検出

スライス

Timeseries Insights API の場合、スライスはディメンション値の特定の組み合わせを持つイベントの集合です。ここでは、時間の経過とともにこれらのスライスに分類されるイベントの測定に着目します。

特定のスライスについて、イベントは、ユーザーが指定した時間間隔の分解ごとに数値に集約されます。これは異常を検出する時系列です。上の図は、ディメンション「user」、「job」、「data_center」の異なる組み合わせから返されるスライスのさまざまな選択を示しています。

時系列と異常

対象となる時間間隔の数値が過去の値と大きく異なる場合、特定のスライスで異常が発生します。上の図は、10 年間にわたって世界中で測定された気温に基づく時系列を示しています。2015 年の最後の月が異常かどうかを調べるとします。システムへのクエリでは、対象となる時刻 detectionTime を「2015/12/01」に、granularity を「1 か月」に指定しています。detectionTime より前に取得された時系列は、前のトレーニング期間と、その後のホールドアウト期間にパーティショニングされます。システムはトレーニング期間のデータを使用してモデルをトレーニングし、ホールドアウト期間を使用して、モデルが次の値を確実に予測できることを確認します。この例では、ホールドアウト期間は 1 年です。この図には、上限と下限を含むモデルの実際のデータと予測値が示されています。実際の値が予測範囲外であるため、2015/12 の気温は異常値としてマークされています。

次のステップ