最近、異常検知の実験/実装を行なっていますが、その過程の中間成果物をmackerel-agentのチェックプラグインとして切り出しました(非公式のプラグインです。サポート宛てにお問い合わせしてもらっても回答できません。id:syou6162まで個人的に連絡してもらえたら対応できるかもしれません)。docker pull yasuhisa/check-host-metric-anomaly
で簡単に使えるので、是非遊んでみてください。
- syou6162/check-host-metric-anomaly: Mackerelのホストメトリックの異常検知を行なうチェック監視プラグイン
- yasuhisa/check-host-metric-anomaly - Docker Hub
このチェックプラグインの使いどころは
- ホスト監視をしたいが、どれくらいの閾値が適当なのか分からない/閾値の調整が面倒なので、よしなにやって欲しい
- 閾値による監視や式監視だけでは対応できないようなホストメトリックの変化を早期に発見したい
- 例: 周期性があるので、静的な閾値監視だけでは不十分
といったところを想定しています。サービスメトリックにも仕組みとしては対応できますが、ホストメトリックと異なり投稿頻度が1分粒度とは限らないため、今回はひとまずホストメトリックのみ対応しています。
mackerel-agent.conf
に監視したいホストメトリック毎に以下のような設定項目を追記、mackerel-agentを再起動すれば、異常検知によるホストメトリックの監視が開始されます。異常検知アルゴリズムの学習データとして3週間程度の直近のホストメトリックを取得する必要があるため、MACKEREL_APIKEY
が必要です。オプションの-v /tmp:/tmp
は学習済みのモデルファイルの置き場を指定しています。
[plugin.checks.anomaly_sample]
command = "/path/to/docker run --rm -e MACKEREL_APIKEY=XXXXX -v /tmp:/tmp yasuhisa/check-host-metric-anomaly /app/run.sh --host-id HOST_ID --metric-name METRIC_NAME"
max_check_attempts = 3
たくさんのホストメトリックに対して異常検知したい場合、毎回docker run
しているとコンテナの起動/停止コストが大きくなってくるため、docker start
とdocker exec
を使う方法がお勧めです。詳しくはREADMEを参照してください。
簡単な解説
- 時系列データに対する異常検知の代表的なアルゴリズムの一つであるLOF(Local Outlier Factor)を利用しています
- 教師なし学習であり、教師データ(どのデータ点が異常か/そうでないか)を与える必要はありません
- 大雑把には「自分の近傍にデータ点が少ないデータほど異常である」というk近傍法的な考え方のアルゴリズムです
- 1次元の時系列データをwindow幅Dで区切り、D次元ベクトルに変換後、LOFを用いて異常か判別します
- モニタリング専用のホストで動かすのがオススメです
- アルゴリズムの学習(ディフォルトは1時間おき)と予測をmackerel-agentを動かしているホスト内で行なうので、多少負荷がかかります
- あまりに多くのホストメトリックの監視を行なうと、command timeoutしてUNKNOWNになってしまう場合があります
- Dockerコンテナ上で動かさず、ホスト上で動かすようにすれば負荷は下がる(timeoutも起こしにくくなる)と思いますが、scikit-learnなどのPythonのライブラリを手元にインストールしてもらう手間がかかるため、このようにしています
- 異常が検知できない/誤検知する場合
- LOFは様々なタイプのデータに対して頑健に動くアルゴリズムですが、当然完璧ではありません
- 例えば以下のようなタイプのデータは苦手です
- 1日に一回のみ動くバッチが走っているホストのメトリック
- ディスク容量のような単調増加するメトリック
- 誤検知(異常でないにも関わらずアラートが発生)が起きる場合、
mackerel-agent.conf
に以下の設定を行なってみると誤検知を回避できるかもしれません--window-size
を大きめに設定する--warning
、--critical
を小さめの値に設定する
- 異常であるにも関わらずアラートが起きない場合は、上記と逆のことをやってみるとうまくいくかもしれません
- 作者: 井手剛
- 出版社/メーカー: コロナ社
- 発売日: 2015/02/19
- メディア: 単行本
- この商品を含むブログ (4件) を見る
- 作者: 井上大輔,粕谷大輔,杉山広通,田中慎司,坪内佑樹,松木雅幸
- 出版社/メーカー: 技術評論社
- 発売日: 2017/08/26
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る