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が基本的なコンポーネントで,RabbitMQとRedisが依存するミドルウェアです.
可視化にはElasticsearchとKibanaを利用しています.
他にも,私の趣味で開発したツールが幾つか動いています.
スイッチの監視
スイッチ監視用のsensu-clientを用意し,各スイッチの通信量を取得してみました
metrics-snmpをGo言語で実装し,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を応募しようと思っています.