apache以外のログについて
- syslog-ngで以下のような設定を加える
template t_mysql {
template("
いんさーと いんとぅー syslogng_logs (host, facility, priority, level, tag, date_time, program, msg)
VALUES ('$HOST', '$FACILITY', '$PRIORITY', '$LEVEL', '$TAG',
'$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC', '$PROGRAM', '$MSG');\n
");
template_escape(yes);
};
destination dp_mysql { pipe( "/var/log/mysql.pipe" template(t_mysql) ); };
....
log {
source(s_all);
destination(dp_mysql);
};
- syslog-ngからのデータを一時的においておく名前つきパイプを作成
mkfifo /var/log/mysql.pipe
- mysqlに専用のユーザとデータベース、テーブルを作る
- データベース作成
mysqladmin create syslogng -p -u root
- テーブル作成(syslog-ngに設定した時のテーブル名と同じ名前のテーブルを作る)
mysql -p -u root
mysql>create table syslogng_logs (
> host varchar(32) default NULL,
> facility varchar(10) default NULL,
> priority varchar(10) default NULL,
> level varchar(10) default NULL,
> tag varchar(10) default NULL,
> date_time datetime NOT NULL,
> program varchar(32) default NULL,
> msg text,
> seq int(10) unsigned NOT NULL auto_increment,
> PRIMARY KEY (seq),
> KEY host (host),
> KEY seq (seq),
> KEY program (program),
> KEY priority (priority),
> KEY facility (facility),
> FULLTEXT(msg)
>);
- ユーザ作成
mysql>grant insert on syslogng.syslogng_logs to syslogng@localhost identified by 'password';
- 以下のようなスクリプトを準備
#!/bin/bash
MYSQL_PIDFILE="/var/run/mysqld/mysqld.pid";
MYSQL_PIPEFILE="/var/log/mysql.pipe";
if [ -e ${MYSQL_PIDFILE} ]; then
if [ -p ${MYSQL_PIPEFILE} ]; then
while [ -e ${MYSQL_PIPEFILE} ]
do
#echo "syslog-ng -> mysql";
/usr/bin/mysql --user=syslogng --password=password syslogng < ${MYSQL_PIPEFILE}
sleep 5
done
else
echo "PIPE file error";
fi
else
echo "MYSQL not run";
fi
- 上のスクリプトをrc.localからバックグラウンドで呼び出すようにして完了
apacheのログについて
- libapache2-mod-log-sql-mysqlパッケージをインストール
- 専用のユーザとデータベースを作る
- データベース作成
create database apachelogs;
- ユーザ作成
grant insert,create on apachelogs.* to apacheloguser@localhost identified by 'password';
- apache2.confの設定(VirtualHostごとに設定できる)
LogSQLLoginInfo mysql://ユーザ名:パスワード@localhost/データベース名
LogSQLCreateTables on
LogSQLDBParam socketfile mysqlのソケットファイルの場所
LogSQLTransferLogTable テーブル名
- apacheを再起動後、ブラウザからアクセスし、ログが記録されていることを確認