2012年5月13日

Linuxでログを取る環境を整える

私の研修期間時、とある教育係の人曰く、ログを記録しない奴はクズ野郎だ! とのことを行っていました。
今の現場ではログはちゃんととっておいてね。って言われているのでログは取るようにしています。

ログをとっておいても、まぁ大抵は見返したりすることはないんですが、ふと
「あの設定てどういう手順でやったんだっけ?」とか
「ふえぇ…前と同じ構成なのに設定がうまく通らないよぉ……」
という時に、やっぱりログがあったらとても重宝するわけです。

で、現場はWindowsXPなのでTeraTermを使っていて、ログの取得設定も[File]>[log]からできるんですが、そう言えばLinuxでログの取得を設定したことがなかったなぁ。なんてことに気づきまして、調べて見ました。

止められないUNIXサーバのセキュリティ対策 第6回 - Page2

scriptコマンドを使えばいいらしいです。
システムアカウンティングの方は今回はパスしておきます。

で、ログの取得をすることができるようになったわけですが、個人的にはこのログを日付別にディレクトリ割り振って、日付毎にファイル出力させたいわけです。

↓こんな感じ↓

[root@YKNS01 ~]# tree
.
|-- log
|   |-- 2012-05-13
|   |   |-- 080320.log
|   |   `-- 080502.log
:
:



このくらいなら簡単にシェルスクリプトを組めば実現できそうだったので、作って見ました。

[root@YKNS01 ~]# vi termoni.sh
#!/bin/bash
if [ ! -d /root/log ]; then
    mkdir /root/log
fi
LOGDATE=`date +%Y-%m-%d`
LOGTIME=`date +%H%M%S`
if [ ! -d /root/log/${LOGDATE} ]; then
    mkdir /root/log/${LOGDATE}
fi

script /root/log/${LOGDATE}/${LOGTIME}.log

で、いちいちシェルスクリプトファイル指定するのも面倒なので、.bashrcにエイリアスルールを追加

[root@YKNS01 ~]# vi .bashrc
(ファイル末尾に以下を追加)
alias termoni='bash /root/termoni.sh'

で、一旦ログアウトして、ログインしなおして、コマンド打ってみる。

[root@YKNS01 ~]# termoni
スクリプトを開始しました、ファイルは /root/log/2012-05-13/080502.log です

はい、思惑通りの場所にログが出力され始めました。

余談ですが、なぜエイリアス名がtermoniかというと、現場でCiscoのL3SWを弄っていて、普段からterminal monitorコマンドを打ちなれているからです。
もし拙作コードを参考にしたい稀有な方がいましたらぜひとも自分の覚えやすい名前に変更することをおすすめします。

ちなみにログ取得の終了はexitコマンド打つので、ログアウトする前にワンクッション入ることになります。

以上。