Sensuでネットワーク監視やってみた


7/15〜17に開催されたJANOG36のライトニングトークに応募して,落選したネタです.
プレゼンテーションもSlideShareにアップロードしています.

Sensuの特徴

Sensuは2011年に開発が開始された,オープンソースの監視フレームワークです.
広く使われているNagiosの置き換えを目的に,下記の特徴があります.
これらは,サーバ構成が頻繁に変わるクラウドに適したものとなっています.

  • sensu-client起動時に,監視サーバに自動登録.
  • 設定ファイルはJSON形式で,構成管理ツールでの生成を推奨.
  • 監視サーバと依存ミドルウェアのスケールアウトが可能.
  • sensu-apiを用いることで,フロントエンドとの連携が容易.

Sensuについては,技評やヤフーの記事が参考になります.

Sensuプラグイン

Sensuプラグインには,下記の2種類があります.

  • Check (クライアントサイド)
    • sensu-client上で動作し,sensu-serverからの指示で実行.
    • 監視の実行やメトリクスの測定を行い,結果をsensu-serverに送信.
  • Handler (サーバサイド)
    • sensu-server上で動作し,sensu-clientからのデータを処理.
    • アラートメールの送信や,メトリクスのNoSQLへの保存を行う.

公式ではCommunity Pluginsが公開されており,大抵のものが揃っています.
ただ,多くがRuby製でオーバーヘッドが大きいため,個人でGo言語によるプラグイン開発を進めています.

Sensuの構成

私が所属する最所研究室では,下記の構成で運用しています.

Server,Client,APIが基本的なコンポーネントで,RabbitMQRedisが依存するミドルウェアです.
可視化にはElasticsearchKibanaを利用しています.

他にも,私の趣味で開発したツールが幾つか動いています.

スイッチの監視

スイッチ監視用のsensu-clientを用意し,各スイッチの通信量を取得してみました
metrics-snmpGo言語で実装し,SNMPで下記MIBを測定しています.

  • 1.3.6.1.2.1.2.2.1.10.x: 各ポートの受信バイト数
  • 1.3.6.1.2.1.2.2.1.16.x: 各ポートの送信バイト数

メトリクスの測定結果をhandler-elasticsearchを使って保存し,Kibanaで可視化してみました.
青線が全ポート受信バイトの合計,黄線が全ポート送信バイトの合計です.

もっと出来そうなこと

他にもSensuを使ったネットワーク監視として,どんなことが出来るか考えてみました.

  • スイッチにPINGを飛ばして死活監視
  • スイッチの全体/特定ポートの通信量が閾値を超えたら通知
  • 各ポートの通信量を個別に可視化

JANOG37に向けて

JANOG37では「ネットワーク監視どうしてますか?」というタイトルで,ルータやスイッチの監視,トラフィックやパケットの可視化についてのBoFを応募しようと思っています.