わが家のネットワークでは、デスクトップ用途とサーバ用途を含めて数台のFreeBSDマシンが稼働しています。(BeagleBoneやRaspberry Piなどのシングルボードコンピュータが多いです。)
デスクトップ機は毎日コンソールで使用していますが、サーバ機については常にログインして使っているわけではありません。ですので、「気づかないうちにハングアップしていた」ということがときどき起こります。
そこで、各マシンの稼働状況をMuninというモニタリングツールを用いて監視しています。
Muninには多種多様な監視用プラグインが同梱されており、CPU、メモリ、ディスク、およびネットワークなどの基本的なリソース使用状況から、Apache, NginxといったWebサーバやPostgreSQL, MySQLなどのデータベース監視まで、サーバ監視についてやりたいことはほぼ網羅しているといえます。(以下のURLでデモが見られます。)
ちなみに、Munin (ムニン)とは、北欧神話の神々の王であるオーディンに付き従う二羽のワタリガラスのうちの一羽で、「記憶」を意味するとされています。(もう一羽のHugin (フギン)は「思考」を意味。) サーバの稼働状況を監視、蓄積して可視化するというソフトウェアにぴったりの名前だと思いませんか?
ところで、遅ればせながら、最近NetFlowというネットワークトラフィックの統計技術があることを知りました。
NetFlowはもともとCisco Systems社によって1996年に開発された、トラフィックの統計情報を生成する技術のことです。詳細については上記記事を参照いただくとして、何をするものかをざっくりいうと次のようになります。
ネットワークのトラフィックを、単にインターフェイスごとの送受信データ量として統計化するのではなく、さらに詳細に区分して、ソース・デスティネーションIPアドレス、ソース・デスティネーションポート、およびプロトコル番号などをキーとして識別した「フロー」という単位で統計情報を生成します。つまり、どのIPアドレスのマシンが多く通信をしているのか、どのポートに対する通信(≒どんなアプリケーションの通信)が多いのか、などのより細かい情報を知ることができます。
これまで、ネットワークトラフィックもMuninを使ってモニタリングしてきました。ネットワークインターフェイスごとに送受信トラフィックをグラフ化して見ています。正直、宅内ネットワーク機器のトラフィックを監視するのにNetFlowはオーバースペック気味ですが、興味がわきましたので、メインで使っているデスクトップ機のトラフィックをNetFlowで監視してみることにしました。
注: Ciscoが開発したことからもわかるように、本来はルータ向けのトラフィック監視・統計化技術だろうと思います。しかし、手もとに適当なルータ機器がないため、デスクトップとして使っているマシンをモニタリングしてみることにしました。
FreeBSDのカーネルには、Netgraphフレームワークにもとづいたng_netflow(4)
モジュールが含まれていますので、追加のソフトウェアをインストールすることなしにNetFlowデータを生成できます。生成したNetFlowデータを、フローコレクタというソフトウェアを用いて受信、蓄積して、結果を可視化表示してみることにします。
NetFlowを用いたトラフィック監視のアーキテクチャ(というほど大げさなものではないですが)を下図に示します。
すっかり前置きが長くなってしまいました。次回の記事では、まずFreeBSDマシンにおいてNetFlowデータを生成し、フローコレクタに対して送信するところまでを説明します。