唐突に脈絡もなく、今やりたいことを忘れないように日記につけてみようと
思い立った。


やりたいこと:

  • syslogを蓄積する。
  • たまったログを整形する。
  • ログの内容によってはアラートを出す。
  • windowsだけで実現する。

たまったログを整形する。

 自宅のルータログなんてたまっても見なかったけど、せっかく溜めてくれてるのなら
 見てみよう、と思ったので。
 ただ、だらだらと見るのも面倒なので、重要なところだけ自動で抜き出して見やすく
 してくれる必要がある。

syslogを蓄積する。

 順番が前後するが、ルータにログをためてくれても処理が面倒なのでsyslogをACER
 H340 WindowsHomeServer に吐き出してくれるようにした。
 使用ソフトはフリーの km_syslogd というのがあったので入れてみた。
 初期設定では100行まで保持して、100行を超えたら古いのから上書きになっている
 そうなので、とりあえず1000に変更しておいた。

ログの内容によってはアラートを出す。

 今までログを活用していなかったので、せっかくだから活用したい。

windowsだけで実現する。

 昔syslog-ngを動かしてた端末はもう壊れてしまったので、今動くwindowsのみで実現
 する。



プログラミングには詳しく無いので、特に比較検討もせずに、文字列の扱いに長けている
という噂のperlをインストールしてみた。
まずは勉強のため、「syslog元ファイル」→「必要なところだけ抜き出し」→「新規ファイル生成」
をやってみる。
ルータのログにはいろいろ入っているので、まずは遮断フィルタにひっかかったログの
「(traffic)」のある行を抜き出す。

で、初perlはこんなカンジになった。
リファレンスを見ると、ほかにもたくさんの命令があって、他の書き方もできそうなので
ここから少しづつ練習してみようと思う。

# ファイル読み込み

# ファイル「001.logファイル」をファイルハンドル「IN」として関連付けて読み込む
open(IN, "001.log");

# 読み込んだファイルを配列「@raw」にセットする
@raw = ;

# 配列「@raw」の全要素について、変数$xxが0から最後まで順に処理を行う
$xx = 0;
foreach $xx (@raw) {

# 検索文字列を「$word」とする
$word = "(traffic)";

# もし文字列$xxにパターン「$word」で指定した文字列が含まれていれば
if ($xx =~ /$word/){
print "$xx\n";

# ファイル「marge.txt」をファイルハンドル「OUT」として関連付け、追加書き込みモード「>>」でを開く
open(OUT, ">> marge.txt");

# パターンマッチした$xxを書き込む
print OUT $xx;
close(OUT);
}
}

# 読み込み処理を閉じる
close(IN);

次にやること

  • トラフィック関連以外のものもファイルに書き出す。
  • 日々別ファイル名で出力される生データを順番に読み込んで新規ファイルを作成する。

書き方の修正とか変更は一段落ついてから。