Linux:サーバのログの情報を収集してSQLITEに投入
Linux:サーバのログの情報を収集してSQLITEに投入 †
サーバが一桁台であれば、目で見てまとめることもできますが、3桁台となるとそうもいかないです。
実際そういう状況に遭遇しているため、シェルをいろいろ作って、最終的にSQLITEに投入して情報をいろいろ見れるようにしました。
せっかくなのでそのまま残します。
- 01_findlogs.sh
- 「target.txt」に記載されるサーバにsshでfindコマンドを実行し、結果ファイルを出力します。
- 02_seikei.sh
- 01_findlogs.shの出力ファイルを入力として、DBに投入するようにsed、awkを使って整形します。
このシェルの中のsedで、あとからDBでグルーピングしやすいようにどのログかを分かるようにデータを整形してます。 - 03_CreateTable?.sh
- ddl.sqlを実行してsqliteにテーブル、インデックスを作成します。
- ddl.sql
- 03_CreateTable?.shから実行されるDDL文が入ってます。
- 04_to_sqlite.sh
- 02_seikei.shの出力ファイルを入力として、03で作ったテーブルにデータを投入します。
各スクリプトの中身 †
こんな感じです。
なお、01、02、04のスクリプトからは、共通のファイル「target.txt」が入力となります。
■target.txt(IPアドレスもしくはホスト名を1行1レコードで記述)
192.168.1.100 localhost
#refpre(01_findlogs.sh,,1);
#refpre(02_seikei.sh,,1);
#refpre(03_CreateTable?.sh,,1);
■ddl.sql(03で実行されるDDL)
#refpre(ddl.sql,,1);
#refpre(04_to_sqlite.sh,,1);
データをSQLITEに投入したら、もう好きなように調理してー
投入したデータの取り出しサンプル †
ちなみに、こんな感じのSQLで、各サーバ毎のログの状況が確認できます。
// サーバ一覧を保持するテーブルを作成 CREATE TABLE server ( servername text ); // テーブルにレコードをインサート insert into server(servername) select server from logcheck group by server; // 種別に前方一致するレコードを外部結合して表示する select A.servername, B.filename, B.count_server, B.avg_filesize, B.max_filesize, B.max_date, B.min_date from server A left join ( select server , filename , count(server) 'count_server', avg(filesize) 'avg_filesize', max(filesize) 'max_filesize', max(date) 'max_date', min(date) 'min_date' from logcheck where filename like '/var/log/httpd/access_log%' group by server ) B on A.servername = B.server;
出力はこんな感じ。
servername|filename|count_server|avg_filesize|max_filesize|max_date|min_date server01|/var/log/httpd/access_log.4|88|8215450.44318182|158792484|201201175617|201110011010 server02|||||| server03|||||| server04|||||| server05|/var/log/httpd/access_log.4|88|8131064.11363637|158887060|201201175617|201110040013 server06|/var/log/httpd/access_log.4|88|8235275.89772728|159015231|201201175617|201110040012 server07|/var/log/httpd/access_log.4|88|8234481.61363637|159024446|201201175617|201110044510
参考サイト †
添付ファイル: ddl.sql 1251件 [詳細] 04_to_sqlite.sh 1080件 [詳細] 03_CreateTable.sh 1087件 [詳細] 01_findlogs.sh 1085件 [詳細] 02_seikei.sh 1185件 [詳細]