Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

機械学習を用いたMackerelの異常検知機能について

4,562 views

Published on

現在開発中の異常検知機能はこれまでの監視ルールと何が異なるのか、何ができて何はできないのか、はてな社内の実例を元にMackerel Meetup #12でお話した資料です。

https://mackerelio.connpass.com/event/94553/

Published in: Technology
  • Be the first to comment

  • Be the first to like this

機械学習を用いたMackerelの異常検知機能について

  1. 1. 機械学習を用いた Mackerelの異常検知機能について Mackerel Meetup #12 id:syou6162
  2. 2. 自己紹介 •  id:syou6162(本名: 吉田康久) •  専門は自然言語処理や機械学習 •  2年前にはてなに転職 – アプリケーションエンジニア – はてなブックマーク/Mackerel 2
  3. 3. はじめに •  現在開発中の機能につき、リリース時には詳 細が変更されている可能性があります 3
  4. 4. アジェンダ •  サーバー監視の困り事 •  異常検知によるアラートの実例 •  異常検知とは? •  異常検知のアルゴリズム 4
  5. 5. 5 サービス/ロール毎に監視ルール設定 静的な閾値によるアラートの発報 サービス/ロールでホストを 分かりやすくグルーピング はてな ブックマーク DB App Proxy DB_01 DB_02 App_01 App_02 Proxy_01 Proxy_02 はてなブログ DB App Proxy DB_01 DB_02 App_01 App_02 Proxy_01 Proxy_02 例: CPUの使用率が90% 越えたらCriHcalアラート
  6. 6. サーバー監視の困り事 •  サーバー監視初心者の場合 •  サーバー監視玄人の場合 6
  7. 7. サーバー監視初心者の場合 •  例: アプリケーションエンジニア •  クラウドを使うようになって、サーバーも自分 で立てるようになった – しかし、サーバー監視はよく分からない •  本質的にはアプリケーションコードの開発に 集中したい 7
  8. 8. サーバー監視玄人の場合 •  インフラ周りの知識が豊富、何を監視すれば いいか経験的に知っている •  見なければいけないサービスも多く、多忙な ことも •  監視ルールを一度設定すれば終わり、では なく定期的にメンテナンスする必要がある 8
  9. 9. 複数条件を考慮した障害の早期発見 •  人間が複数のAND条件を網羅するのは困難 –  例: 「cpu使用率はそれほど高くない」かつ「memory使 用量は多い」 9 cpu memory 休日や夜間等比較的 負荷の低いケース 平日を中心とした比較的 負荷の高いケース 高負荷で障害に なりそうなケース cpu使用率の割にmemoryを 異常に食っているケース (例: メモリリークが起きてる?)
  10. 10. 機械学習による監視のサポート •  以下を実現したい – インフラの知識があまりなくても、低コストで監視 ルールが作れる – 人間が列挙するには困難な複数の条件を考慮し た監視ができる •  機械学習による異常検知機能でユーザーを サポートしたい! 10
  11. 11. 作りました🎉
  12. 12. アジェンダ •  サーバー監視の困り事 •  異常検知によるアラートの実例 •  異常検知とは? •  異常検知のアルゴリズム 12
  13. 13. ロールを選択してもらうだけ! 個別のメトリックを一つずつ 設定していく必要はありません 13
  14. 14. 実例1(成功事例) 14 full GCが走り 負荷が一時的に上昇 cpu/memoryなど個別の ルールは指定していない。 ロールの指定のみ
  15. 15. 実例2(成功事例) 明け方からswapが多発 loadavgの上昇時に異常検知アラートが発報。 問題のプロセスをkillし、障害を未然に防げた! 15
  16. 16. 社内の喜びの声 16
  17. 17. 社内の喜びの声 その後、原因となっていたメトリックに監視 ルールを設定(一次対応策がメモ欄に書ける)。 人間のドメイン知識と機械学習の組み合わせ でサーバー監視をサポート 17
  18. 18. アジェンダ •  サーバー監視の困り事 •  異常検知によるアラートの実例 •  異常検知とは? •  異常検知のアルゴリズム 18
  19. 19. 代表的な問題設定: 外れ値検知 19 仲間から外れている 図は hTps://qiita.com/kenmatsu4/items/68e48a00aaebf338bedc より生成 時刻 メモリ 使用量
  20. 20. アジェンダ •  サーバー監視の困り事 •  異常検知によるアラートの実例 •  異常検知とは? •  異常検知のアルゴリズム 20
  21. 21. ガウス分布に基づく方法(教師なし学習) 21 異常と判定 正常と判定 •  起きる確率の高い事象 は正常と見なし、低い事 象は異常と見なす •  CPU使用率を例に挙げ ていますが、実際にはシ ステムメトリックの約20 個を総合的に見て判定 します CPU使用率 確 率
  22. 22. 負荷の波がある場合… 昼間/深夜で負荷傾向が異なる場合、 一つのガウス分布ではサーバー負荷 の状態を表現しきれず、誤報が多く なってしまう 高負荷の場合、低負荷の場合… といくつかガウス分布を用意する とよさそう🤔 22
  23. 23. 混合ガウス分布に基づく異常検知 •  複数のガウス分布の足し合わせで対応 23 cpu memory 休日や夜間等比較的 負荷の低いケース 平日を中心とした比較的 負荷の高いケース 異常と判定されるケース1 異常と判定されるケース2
  24. 24. 負荷の波があっても誤検知しない 混合ガウス分布に基づいているので 負荷の傾向がいくつかあっても誤検知しない 24
  25. 25. 異常検知によるサーバー監視 •  サーバー監視初心者/玄人どちらのユーザー もサポートできる機能 •  はてな社内での高負荷の早期発見の事例 •  混合ガウス分布を用いたシンプルな方法 •  懇親会で気軽に質問してください! 25

×