y-matsui::weblog

電子楽器、音楽、コンピュータ、プログラミング、雑感。面倒くさいオヤジの独り言

次にネットワークグラフで可視化するのはコレだ!

かねてからネットワーク図として表現したかった”人のつながり”グラフ
とうとう開始することに決めた。
注目するのはメール送受信の履歴。メールサーバのログを使っちゃおうという安易な発想。
■仕様
・ネットワーク描画に必要な情報は、tbl_userとtbl_nodeとして構成する(以前のtbl_wordとtbl_nodeをそのまま流用できる)
・fromからtoへのメール送信をノードの重み、fromとtoのどちらに注目するかはWebUIの検索条件で決定する
→from,toのORで両方出して、一覧で判断する方法に変更
・ノードデータを生成するためのソースは、maillogのLFをCRLFに加工したテキストを使う
・変換処理はクライアントPCで行う
・変換に必要な情報(in/outディレクトリ、DB接続文字列、変換オプション)はiniファイルから拾う
・書き込み先のDBもローカル(mdb)を想定←別にリモートにも切り替えられるけど、処理が遅いので
mdbIISの仮想ディレクトリにコピーすることでDBの差し替えを行う
IISの再起動が必要になったりするので、登録用VBSの方のDSNを書き換えてリモート登録した方が扱いやすい。

■ログの加工
早速、sendmailのログ(/var/log/maillog*)を拾ってきてにらめっこ。
toとfromが一対で表現されていたら良かったんだけど、”k9GJXeg28398”みたいなIdらしきものを参考に、照合をかけるしかなさそう。プロセスIDを使おうと思ったんだけど、内部配信、メーリングリスト、外部配信の種類によって、同じPIDを使う場合もあれば、違うIDの場合もあるようでNG。
メールアドレスを抽出する正規表現はこのページを参照して、”[\w\d_-]+@[\w\d_-]+\.[\w\d._-]+”を使ってみる。
Docomoなどの携帯メールで使われるドット付のアドレスに対応、<>付きもあるので、結局”?”に変更した。)
vbsのReadLineが使えるように、maillogの改行コード”LF”をCRLFに変更。
なんとかtoとfromのアドレスを対応付けた。ふぅ。
メールログは数メガ以上のでかいファイルなので、ローカル処理を前提にvbsで組んでみる。
iniファイルで定義したinputディレクトリからmaillog.*を読み取り、outpurディレクトリに書き出す。
本番では、AccessDDにがんがん書き込み、IISの管理する仮想ディレクトリにコピーする仕様でとりあえずGO。
■テキストファイル書き出しのテスト
4Mのmaillogからfrom-toの対応付けテキストを作成したら、約2600件のレコード抽出5秒の処理時間でテキストサイズは260Kb。まずまずな感じ。
今度はinディレクトリに5ファイル11MBを置いて、連続処理したら31秒。outputファイルは1.2MBだからほぼ1/10。

メールログの設定次第であるが、毎日ローテーションして、月に31ファイル。
これをディレクトリごとの一括処理でも数分で終わることだろう。DB書き込みだったとしても10分程度か。
あとは、出来上がったmdbをコピーするだけだから、月次で一回処理してもOK。
誰がこのネットワークグラフを見るのかって?
そりゃ、経営者とかマネージャが社員のアクティビティを見るためですがな。
メッセージの中身までは見ないものの、俗悪なツールであることは間違いない。
だって、追跡しにくいメール送受信を分かりやすく表現するためのグラフ化なんだから。