[[PatternMatcher メトリクスの典型的な13種類の異常パターン]]に対して、メトリクスの意味を考慮したクラスタ指標に基づき、[[research/tsifter/TSifter]]のクラスタリングを評価する。
- [[クラスタリングの評価指標]]のPseudo F
- メトリクスの意味論に基づくGround Truth
- 同一クラスタに属すべきメトリクスを事前に定義する
- {CPU使用、メモリ使用、ネットワーク使用}を示すメトリクス
- jvmのリクエスト数とmongoのクエリ数
- cpu faultの場合
- cpu_user_seconds_totalとcpu_usage_seconds_totalは同じ。
- memory faultの場合
- memory_working_set_bytesとmemory_failures は同じではない
- Ground Truthの用意
- 異なるクラスタに属してほしいメトリクスを事前に定義する
- {レイテンシ、エラー} <-> {サチュレーション、トラフィック}
- cpu faultの場合
- cpu_user_seconds_totalとcpu_sys_seconds_totalでは振る舞いが違うはず
- Ground Truthの用意
- フェーズ1を通過した、故障サービス内のメトリクスに対して、メトリクスパターンでマッチングして取り出して、jupyterで一斉表示して確認
- okなら、Ground Truthを生成してファイル保存
- 評価指標の算出
- 母数:Ground Truthが定義されているメトリクスペアの数
- GTは、そのペアが同一クラスタか、そうでないかの2値
- 正例:同クラスタに入る
- 負例:異クラスタに入る
- TP TN FN FPを計算
- メトリクスの時系列データの形状に基づくGround Truth
- [[PatternMatcher メトリクスの典型的な13種類の異常パターン]]
- Type1とType2が同一クラスタにない状態が望ましい
- Ground Truthの用意
- サービス単位でクラスタリングするため、故障サービス内の各メトリクスに対して、Type1かType2かの正解定義を与える。
- 3 fault types x 5の15個の異常ケース分ぐらい?
- 評価指標
- 同一クラスタ内のメトリクスペアのTypeが同一であれば正例、負例
- Accuracy = 正例 / メトリクスペアの総数
- クラスタ平均Accuracy = 1/k sigma AC@i
- 任意のクラスタ内の過半数の要素のGround TruthのTypeがそのクラスタのType。
- クラスタのTypeに対して、クラスタ内の要素のTypeが同一であれば正例、していなければ負例
- 同一Anomaly Patternが同一クラスタに配置されているかどうか
- 故障箇所候補メトリクスのTypeが他のTypeと混ざっているかどうか
- クラスタリング範囲がマイクロサービス単位かpod単位かの変化をみる
- 期待される結果
- 既存手法(FluxRankのDBSCAN + ピアソン相関)と比較
- 既存手法がType1とType2が同クラスタに入る可能性があることを示す。
## データ収集手順
1. 故障注入ケースを選択
2. ケースに紐づくデータセット内から故障箇所マイクロサービス関連のメトリクスをとりだす
3. TSifter フェーズ1で異常メトリクス取得
4. 異常メトリクスに対して、knn(k=20)でクラスタリング
5. クラスタごとにbatch cofirmation。このとき、confirmしたメトリクスを覚えておき、別クラスタと重複するメトリクスは除外
---
[[クラスタリングをPrecision-Recallで評価する方法]]に基づき、ゴールドスタンダードを定義する。
1. 異常パターンごとに1クラスタ
2. 異常タイプごとに1クラスタ