HiiHahWIKI - making some notes for... -
Linux:サーバのログの情報を収集してSQLITEに投入
をテンプレートにして作成
開始行:
*Linux:サーバのログの情報を収集してSQLITEに投入 [#fb3d29...
サーバが一桁台であれば、目で見てまとめることもできますが...
実際そういう状況に遭遇しているため、シェルをいろいろ作っ...
せっかくなのでそのまま残します。
:01_findlogs.sh|「target.txt」に記載されるサーバにsshでfi...
:02_seikei.sh|01_findlogs.shの出力ファイルを入力として、D...
:03_CreateTable.sh|ddl.sqlを実行してsqliteにテーブル、イ...
:ddl.sql|03_CreateTable.shから実行されるDDL文が入ってます。
:04_to_sqlite.sh|02_seikei.shの出力ファイルを入力として、...
***各スクリプトの中身 [#j31de0eb]
こんな感じです。
なお、01、02、04のスクリプトからは、共通のファイル「targe...
■target.txt(IPアドレスもしくはホスト名を1行1レコードで記...
192.168.1.100
localhost
■&ref(01_findlogs.sh);
#refpre(01_findlogs.sh,,1);
■&ref(02_seikei.sh);
#refpre(02_seikei.sh,,1);
■&ref(03_CreateTable.sh);
#refpre(03_CreateTable.sh,,1);
■&ref(ddl.sql);(03で実行されるDDL)
#refpre(ddl.sql,,1);
■&ref(04_to_sqlite.sh);
#refpre(04_to_sqlite.sh,,1);
データをSQLITEに投入したら、もう好きなように調理してー
***投入したデータの取り出しサンプル [#b9ce9815]
ちなみに、こんな感じの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_filesi...
server01|/var/log/httpd/access_log.4|88|8215450.44318182...
server02||||||
server03||||||
server04||||||
server05|/var/log/httpd/access_log.4|88|8131064.11363637...
server06|/var/log/httpd/access_log.4|88|8235275.89772728...
server07|/var/log/httpd/access_log.4|88|8234481.61363637...
*** 参考サイト [#b25e5054]
-http://www.dbonline.jp/sqlite/
終了行:
*Linux:サーバのログの情報を収集してSQLITEに投入 [#fb3d29...
サーバが一桁台であれば、目で見てまとめることもできますが...
実際そういう状況に遭遇しているため、シェルをいろいろ作っ...
せっかくなのでそのまま残します。
:01_findlogs.sh|「target.txt」に記載されるサーバにsshでfi...
:02_seikei.sh|01_findlogs.shの出力ファイルを入力として、D...
:03_CreateTable.sh|ddl.sqlを実行してsqliteにテーブル、イ...
:ddl.sql|03_CreateTable.shから実行されるDDL文が入ってます。
:04_to_sqlite.sh|02_seikei.shの出力ファイルを入力として、...
***各スクリプトの中身 [#j31de0eb]
こんな感じです。
なお、01、02、04のスクリプトからは、共通のファイル「targe...
■target.txt(IPアドレスもしくはホスト名を1行1レコードで記...
192.168.1.100
localhost
■&ref(01_findlogs.sh);
#refpre(01_findlogs.sh,,1);
■&ref(02_seikei.sh);
#refpre(02_seikei.sh,,1);
■&ref(03_CreateTable.sh);
#refpre(03_CreateTable.sh,,1);
■&ref(ddl.sql);(03で実行されるDDL)
#refpre(ddl.sql,,1);
■&ref(04_to_sqlite.sh);
#refpre(04_to_sqlite.sh,,1);
データをSQLITEに投入したら、もう好きなように調理してー
***投入したデータの取り出しサンプル [#b9ce9815]
ちなみに、こんな感じの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_filesi...
server01|/var/log/httpd/access_log.4|88|8215450.44318182...
server02||||||
server03||||||
server04||||||
server05|/var/log/httpd/access_log.4|88|8131064.11363637...
server06|/var/log/httpd/access_log.4|88|8235275.89772728...
server07|/var/log/httpd/access_log.4|88|8234481.61363637...
*** 参考サイト [#b25e5054]
-http://www.dbonline.jp/sqlite/
ページ名: