SYSLOG検索くん 第3回

初回の基本設計部分でSYSLOGサーバからlogファイルをscpでコピーする形にすると
していますが、syslog検索くんのホームディレクトリを作成します。

ホームディレクトリ
# mkdir /usr/local/slog

続いてログを保管するディレクトリを作成します。
# mkdir /usr/local/slog/logs

ちなみに同じ階層にあるのでいっぺんに作る場合は-pオプションを付ければ1回でできます。
# mkdir -p /usr/local/slog/logs

ホームディレクトリにはログを集計するスクリプトを配置
その下のlogsには集計用のログを保存する事にします。

次にHTMLファイルを配置するディレクトリですが、専用サーバであればapacheのドキュメントルートに配置して
問題ありませんが、今回は/var/www/syslogというディレクトリを作成しそこに配置したいと思います。
/etc/httpd/conf.d/にAliasの記述をします。

# vi /etc/httpd/conf.d/syslog.conf

Alias /syslog /var/www/syslog

<Directory “/var/www/syslog”>
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>

設定後はapacheを再起動して下さい。
きちんとAliasが有効になっているかinfo.phpファイルを移動させて確認します。
# mv /var/www/html/info.php /var/www/syslog/

移動後URL確認を実施します。
http://nekoneko.com/syslog/info.php  ←php情報が見れる事を確認
http://nekoneko.com/info.php  ←Not Foundになるはずです

次に実際にSYSLOGサーバからログを取得するスクリプトを作ります。
接続方法はexpectを使用します。
まずはyumでインストールします。

# yum install expect

================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
expect i386 5.43.0-8.el5 base 158 k

次に実際にscpできるかスクリプトを書きます。仮にシェル名はsyslogpick.shとします。
# vi syslogpick.sh
#!/bin/sh
## set LANG
export LANG=ja  ←SYSLOGサーバの環境に合わせています。SYSLOGサーバのLANGにして下さい

## last day
DATE=`date –date ‘1 days ago’ +%Y%m%d`  ←前日の日付を取得しています

# log directry
DIR=/usr/local/slog/logs/  ←ログを保存するディレクトリを指定しています

echo ${DATE} syslog inport start >> ${DIR}slog.log  ←スクリプトの始まりをロギングしています

## syslog get  ↓実際の処理になります
expect -c ”
set timeout 60
spawn scp user@192.168.1.1:/var/log/syslog/syslog.0 ${DIR}${DATE}_syslog
expect {
\”Are you sure you want to continue connecting (yes/no)?\” {
send \”yes\n\”
expect \”パスワード\”
send \”password\n\”
} \”パスワード\” {
send \”password\n\”
}
}

expect {
\”100%\” {exit}
}

echo ${DATE} syslog inport sucsess !! >> ${DIR}slog.log
echo =============================== >> ${DIR}slog.log

今回は複数の命令で併せて使用する形にしています。
実行部分を「”」で囲みます。「”」内で「”」を使う場合は「\」エスケープ文字を付けます。
実行部分を簡単に説明するとset timeoutでタイムアウトの時間(秒)を設定しています。
spawnは実際に実行するコマンドです。
その後表示された文字列の際に実行するコマンドをsendになります。
上記は初めて接続した場合と、2回目以降の場合を書いています。
最後に100%と表示されたらexitで抜けています。

実際に起動してみます。
# sh syslogpick.sh
spawn scp user@192.168.1.1:/var/log/syslog/syslog.0 /usr/local/slog/logs/20130719_syslog
The authenticity of host ‘192.168.1.1 (192.168.1.1)’ can’t be established.
RSA key fingerprint is 9b:c7:72:5d:bd:bc:f9:df:10:62:9a:42:d4:37:ba:65.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘192.168.1.1’ (RSA) to the list of known hosts.
・ム・ケ・・シ・ノ:
syslog.0 100% 3717KB 3.6MB/s 00:00

確認
# ls -al /usr/local/slog/logs/
drwxr-xr-x 2 root root 4096 Jul 20 13:58 .
drwxr-xr-x 3 root root 4096 Jul 20 13:58 ..
-rw-r–r– 1 root root 3805184 Jul 20 13:58 20130719_syslog
-rw-r–r– 1 root root 95 Jul 20 13:58 slog.log

# cat /usr/local/slog/logs/slog.log
20130719 syslog inport start
20130719 syslog inport sucsess !!
===============================

SYSLOGサーバがunixでlinuxとは文字コードが違うので表示上文字化けしていますが問題なくログを取得できます。

ログの取得方法は以上になります。

次回は取得ログを成型とmysqlのテーブル作成をします。

コメントする