■
唐突に脈絡もなく、今やりたいことを忘れないように日記につけてみようと
思い立った。
やりたいこと:
- 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);
次にやること
- トラフィック関連以外のものもファイルに書き出す。
- 日々別ファイル名で出力される生データを順番に読み込んで新規ファイルを作成する。
書き方の修正とか変更は一段落ついてから。