NetVolante NVR500 の syslogを受信する

最近ネットワークの繋がりにくい日が時々発生するようになったので、原因を探していて、インターネット接続の状態を調べることにしました。
ルーターの吐き出すSyslogを集計して、アクセスの多いpcや接続先を調べることにしました。
ルーターは YAMAHA NVR500を使用しています。
ルーターの管理画面でSyslogを出力できますが500行までなのと、いちいち出力するのも面倒です。
サーバーなどに出力する機能があるようなのでこの機能を使ってログを受信することにします。
プログラムは Visula Basic 2010 Express で作成しました。
NetVolante RT58i でも使えます、というか RT58i で作成時テストしました。

ルーター(YAMAHA NVR500)設定

管理画面に入って、詳細設定と情報を押します
本製品のログ(Syslog)のレポート作成の横の実行を押します
Syslogの設定で デバッグモード、infoモード、Noticeモードにチェックを入れます。
Syslogホストアドレスに受信するPCのIPを入れます。
設定の確定を押します。
詳細はこちら に書いています。

Syslogの受信

仕組みはよく知りませんが、udp/514で受信すれば良いのではないかと勝手に思ってテストプログラムを作ってみました。
UDPによりデータの送受信を行う
のページのコードをコピペして試してみたらあっさり受信できました。
まずudp/514で待ち受けて、受信したらテキストファイルに書き出すプログラムを作って見ます。
問題なく受信できたので、保存して集計する部分を作成していきます。
受信したデータを整形してAccessのデータベースであるMDBファイルに保存し、一定時間毎に集計することにしました。
ちなみにMDBファイルはAccessがインストールされていなくてもWindowsの標準機能で使えるのでちょっとしたデータベースを作るのには便利です。
集計してみたところIPだけでは不便なので、IPからホスト名を検索して表示する機能もつけることにしました。
ここまでは数日でできたのですが、処理速度や効率を考えてスレッドを多用したので、良く解らないエラーが頻発たり、機能UPを図ったりで数ヶ月かかってしまいました。
一応使えるレベルにはなったので、誰か役に立つ人もいるかもしれないので、あげておきます。無保証です。

主な機能

NetVolante NVR500の吐き出すSyslogを受信してIPごとに集計します。過去5分間分のログを集計しますがこれは変更可能です。
LAN側IPから検索してそのホスト名とMACアドレスを表示します。
WAN側IPから検索してそのホスト名を表示します。
集計レポートをテキストファイルとして作成して一定時間毎に保存します。
集計レポートをHTMLファイルとして作成して一定時間毎に保存します。
受信ログはMDBファイルとして保存されます。
ログをテキストファイルとして保存することもできます。

画面


@操作パネル
Start:ログ受信を開始します。
Stop:ログ受信を停止します。
メニュー:メニューが表示されます。設定はここから選択します。
毎秒ログ数のグラフが表示されます。
ログ数などの情報が表示されます。デバグ用の表示なので詳細は気にしないでください、

Aログ表示画面
受信したログがそのまま表示されます。ログの受信を確認するための表示です。

Bホスト名画面
IPから検索したホスト名やMACアドレスが表示されます。
デフォルトでは表示されず、デバグモードでのみ表示されます。

CLAN側集計画面
LAN側IPで集計した結果が表示されます。
表示内容は
ログカウント数、IP、TCP/UDP、In/Out、(ホスト名)(MACアドレス)
で、カウント数の多い順に表示されます。

DWAN側集計画面
WAN側IPで集計した結果が表示されます。
表示内容は
ログカウント数、IP、Port、TCP/UDP、In/Out、(ホスト名)
で、カウント数の多い順に表示されます。

E詳細画面
LAN側集計、WAN側集計画面の行をクリックすると、その詳細が表示されます。
表示内容は
ログカウント数、IP、Port、ラベル、LAN、(ホスト名)
です
これでどの端末がどこにアクセスしているか、どこのサイトにどの端末がアクセスしているかがほぼリアルタイムで把握できます。



出力ファイル

LOGファイル
CountLogYYYYMMDD.txt:長時間集計のファイルです。YYYYMMDDには年月日が入ります。1日に1個作成されます。
CountLogYYYYMMDDHH.txt:短時間集計のファイルです。YYYYMMDDHHには年月日時が入ります。1時間に1個作成されます。
DnsCountLogYYYYMMDDHH.txt:DNS Query ログを集計したファイルです。YYYYMMDDHHには年月日時が入ります。1時間に1個作成されます。各端末が出したDNSクエリが分かります。
保存場所は設定画面で指定できます。

HTMLファイル
SyslogReceive2.html、SyslogReceive2S.htmlの2つのファイルを作成します。保存場所は設定画面で指定してください。
1分ごとに上書き作成されます。ブラウザで表示した場合1分毎に再読み込みされます。
SyslogReceive2.htmlは簡易集計、SyslogReceive2S.htmlは詳細集計です。
簡易HTMLでは、単純にIn側IPのみで集計しています。カウント数・IP・MACアドレス・ホスト名を表形式で表示します。
詳細HTMLでは本体表示と同じ情報が出力されます。、in_out, tcp_udp, in_ip で分類して集計しています。
さらにその詳細では、それぞれについて、label, lan, out_ip, out_portで集計しています。
OUT側で集計する場合は、in_ipとout_ipを逆にして処理していますが、In側のポート番号は無視しています。
動作しているPC以外からも参照できるようにするために作って見ました。

MDBファイル
SyslogReceive2_YYYYMMDD.mdb
SyslogReceive2Hostname_YYYYMMDD.mdb
SyslogReceive2Dns_YYYYMMDD.mdb
受信したログをデータ化したものと、IPとホスト名、MACアドレスとの対応テーブルデータです。

エラーファイル
SyslogReceive2_ErrYYYYMMDD.txt:プログラム実行時に発生したエラーを保存するファイルです。YYYYMMDDには年月日が入ります。1日に1個作成されます。
デバグ用なので通常は必要ありません。ドキュメントフォルダの中にSyslogReceive2フォルダを自動作成してその中に保存されます。


インストール

下記リンクからZIPをダウンロードし、解凍してください。
フォルダー内のsetup.exeを実行するとインストールできます。
Windowsのバージョンによっては Microsoft .NET Framework 4 のインストールが必要です。
起動したら設定画面を開き、ルーターIPを設定してください。それ以外はさしあたってデフォルトで動作するはずです。
一度終了して再起動し「Start」を押すと、ログが表示されるはずです。


ダウンロード

一応動くようになったので、使ってみたい方はこちらからどうぞ。無保証です。
VisualBasic2010Expressにて作成しました。
SyslogReceive2.zip
上記で説明したプログラムです。



SyslogReceiveSup.zip
SyslogReceive2で作成したMDBファイルを読み込んで調べたい時刻の集計をするソフトです。
ついでに作りました。


ソースは見苦しいのであまり見せたく無いのですが、飽きたので何か役に立つ人もいるかもしれないので上げておきます。
SyslogReceive2Source.zip
SyslogReceive2のソースファイルです。
SyslogReceiveSupSource.zip
SyslogReceiveSupのソースファイルです。

ルーター(DD-WRT)設定

ついでに DD-WRT のログも集計できるようにしました。あくまでおまけです。
syslog 出す設定
Service→Service
  System Log  Enable にしてRemoteServerにIPを入れる SaveしてReboot

Security→Firewall
  Log Management
   Log Enable
   Log Level High
   Dropped Enable
   Rejected Enable
   Accepted Enable
SaveしてReboot

DD-WRTのログを集計する場合はSyslogReceive2の設定画面でルーター種類を DD-WRT に変更してください。








参考サイト

UDPによりデータの送受信を行う
いつもお世話になっています。







TOPに戻る
2017/3/6