PrelertでNWの異常検知

PrelertはElastic社が買収した異常検知が出来る機械学習のソフトウェアです。今回はこれを利用して、Elasticsearchに保存したデーターからNWの異常検知を行いたいと思います。

Prelertについて

PrelertはElasticsearch内に保存したデーターを元に異常検知を簡単に行なえます。異常検知の設定はGUIをベースに行える用になっており、結果も。APIを備えているため連携しての動作も可能です。利用例としてセキュリティの機器のログから不正な動きを検知する例や、IT機器の不具合を検知する例が挙げられています。

今回の構成

今回はNWの異常検知をNW機器のデーターから行いたいので、SwitchからSNMPを利用してトラフィック量の値を取り出した後に、Elasticsearchに保存します。PreleartはElasticsearchに保存した情報を元に異常検知を行う事とします。

Prelertのインストール

PrelertはElasticsearchとKibanaがインストールされた基盤の上でインストールファイルを実行するとインストールされます。5.Xの基盤にインストールしてみましたが、Prelertをインストールすると、KibanaのUIは以前のバージョンの物に戻ってしまいました。PrelertのDashboardはKibanaのアプリとしてインストールされるため、KibanaからPrelertを開くと様々な設定が可能となります。

Fluentdの設定

今回はFluentdを使ってNW機器からSNMPでポートのステータスを取得します。Interfaceの全項目について、InとOutのOctetカウンターを取得します。Nameにインターフェス名、Valueにカウンターの値が入る用にします。

 @type snmp
 tag snmp.switch1
 nodes name,value
 host [SWITCH IP]
 community public
 mib ifInOctets, ifOutOctets
 method_type walk
 polling_time 60
 polling_type async_run


 @type elasticsearch
 host localhost
 port 9200
 index_name snmp
 type_name snmp
 logstash_format true
 logstash_prefix snmp

Elasticsearchの設定

Elasticsearchにはテンプレートを設定しておきます。nameの項目はNot Analyzedを指定しておきます。

curl -XPUT localhost:9200/_template/snmp -d '
{
    "template": “snmp*", 
      "mappings": {
      "_default_": {
      "properties" : {
      "@timestamp" : {
        "type" : "date",
        "format" : "dateOptionalTime"
      },
      "name" : {
      "type" : "string",
      "index" : "not_analyzed"
     }
    }
   } 
 }
}'

Prelertの設定

Prelert上で異常検知の設定を行います。今回はFluentdから1分毎にデーターが送られており、5分毎のバケットの中のMax値を見てPrelertで異常検知を行う設定を行います。まずは、GUIから設定を行いますのでKibana経由でPrelertの管理画面を開きます。JobsからCreate New Jobを選択します。データーソースで、Elaticsearchを入力後に入力データーの指定を行います。今回はLocalにあるElasticsearhのsnmpで始まる名前のIndexを対象としてます。

ws000001

Name欄にJobのIDを指定します。その後、Analysis ConfigurationでAdd Detectorを選択してDetectorを作成します。Detectorはどの項目で、どの条件で異常検知を行うか指定出来ます。今回はValueのMax値をnameで分けて異常検知します。指定後にAddを選択します。

ws000004

Detectorが作成されました。Influencersの所でnameにチェックを入れます。Influencerを指定しておくと、異常が起こったのはどのポートなのかを表示してくれます。設定が完了したら、Saveを選択します。

ws000005

Save後にScheduleの設定画面が出てくるため、Scheduleを指定します。No End timeを指定すると、データーを取り込み続けて、異常検知をしてくれます。

結果

作成したJobのグラフのアイコンを指定すると、Summaryをみる事が出来ます。すでにデーターが取得されていれば異常を自動で検知して表示してくれます。今回は急激なトラフィックの増大が検知出来るかを試して見るために、iperfを利用してサーバー間でトラフィックを急増させてみました。結果が以下になります。スイッチのサーバーが接続されているインターフェースのIn、上位のスイッチへのインターフェースのOut共に異常が検知されています。

ws000000

所管

異常検知を行う場合に必要なアルゴリズムの選択や、パラメーターの調整無しに簡単に異常検知が出来るのは便利です。とは言え、どのような値を取ってきてDetectorの設定はどうするかは試行錯誤が必要です。今回もmeanが良いのか、Maxで取ったほうが良いのか等の試行錯誤はしました。Prelertはセキュリティ等も含めて、アイデア次第で様々な応用ができそうです。今回の内容は最低限の設定となってますが、データーの取得や保存方法を工夫すればもっとわかりやすく表示出来ると考えています。

PrelertでNWの異常検知