本気出して考えてみた

時事問題、IT技術、音楽、ドラム、ポケモン、ベイブレードバースト、ガジェットなど複数の話題を綴る雑多なblogです

IT linux サーバー構築

Apacheのログをrsyslog経由でDB(MySQL)に保存する

投稿日:

このblogが動作しているVPSで、ディスクスペースも余りまくっているので、
長期的にログを保存・分析することを考え、Apacheのログをrsyslog経由で
MySQLに保存する設定をやってみました。

参考にしたのは以下のサイトです。
世の先人たちに感謝です。

・rsyslog のログをMySQLに保存するための設定について

rsyslog のログを DB で管理する ( MySQL / PostgreSQL )
http://sios-oss.blogspot.jp/2012/11/rsyslog-db-mysql-postgresql.html

・Apache のログを rsyslog に集約するための設定について

Apache/バーチャルホストのログをリモートのrsyslogに集約する – maruko2 Note.
http://goo.gl/m8gPY1

基本的に参考にしたサイトのまんまではありますが、rsyslog を使用するといっても、
VPS 1台 の中だけで完結させるので、よくあるリモートサーバへログを転送して・・・
ということにはなっていません。あらかじめ、ご注意ください。

前提条件

  1. Apache がインストールされていること
  2. MySQL がインストールされていること
  3. rsyslog がインストールされていること
  4. OS は CentOS であること

4 の条件は、単に私が使用しているVPSのOSがCentOSだったというだけです。
Apache、MySQL、rsyslog がインストールできる環境であれば、問題ないかと思います。
1~3 の条件は、インストール手順は他のサイトでたくさん紹介されているので、省略し
ますよということですw

rsyslog のログを MySQL に保存する設定

rsyslog のログを MySQL に保存するために、この両者をつなぐためのパッケージをイン
ストールします。yum コマンドを使用します。

[plain]# yum install rsyslog-mysql
[/plain]

次に rsyslog のログを保存するためのテーブルを作成します。
先ほどのパッケージをインストールしたときに、使用できるスクリプトが配置されてい
るので、それを利用します。

[plain]mysql -u root -p < /usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql
[/plain]

/usr/share/doc以下のパス、ファイル名はインストールした環境によって変わると思い
ますので、ご注意ください。

ちゃんとテーブルが作成されたか確認してみます。

[plain]# mysql -u root -p
(省略)
mysql > show databases;
+——————–+
| Database |
+——————–+
| information_schema |
| Syslog |
| mysql |
| test |
| wordpress |
+——————–+
5 rows in set (0.00 sec)
mysql> use Syslog;
mysql> show tables;
+————————+
| Tables_in_Syslog |
+————————+
| SystemEvents |
| SystemEventsProperties |
+————————+
2 rows in set (0.01 sec)
[/plain]

”Syslog” というデータベースが含まれており、テーブルとして2つ作成されて
いれば成功です。

さて、rsyslog のログを格納するテーブルが作成できたので、そのテーブルに対
して操作できるユーザを作成します。

[plain]GRANT ALL PRIVILEGES ON Syslog.* TO username@localhost IDENTIFIED BY ‘password’
[/plain]

username及び、password は、任意で設定してください。

このセクションでは最後になりますが、rsyslog.conf に DB へログを保存する
ための設定を追加します。

[plain]$ModLoad ommysql
*.* :ommysql:localhost,Syslog,username,password
[/plain]

2行目のusername及び、password には、先ほどMySQLに作成したユーザと
それに設定したパスワードを記述します。

設定を反映させるために rsyslog を再起動します。

[plain]# service rsyslog restart[/plain]

ちゃんとrsyslog のログがDBに保存されたか確認します。

[plain]# mysql -u rsyslog -p Syslog
mysql> select * from SystemEvents;
[/plain]

rsyslog のログが保存されていれば、設定はOKです。

[plain]+—-+————+———————+———————+———-+———-+—————-+—————————————————————————————————-+————+————+————-+———–+—————+———+—————–+————–+———–+———-+———-+————+———–+————–+—————–+———-+
| ID | CustomerID | ReceivedAt | DeviceReportedTime | Facility | Priority | FromHost | Message | NTSeverity | Importance | EventSource | EventUser | EventCategory | EventID | EventBinaryData | MaxAvailable | CurrUsage | MinUsage | MaxUsage | InfoUnitID | SysLogTag | EventLogType | GenericFileName | SystemID |
+—-+————+———————+———————+———-+———-+—————-+—————————————————————————————————-+————+————+————-+———–+—————+———+—————–+————–+———–+———-+———-+————+———–+————–+—————–+———-+
| 1 | NULL | 2014-05-10 15:13:05 | 2014-05-10 15:13:05 | 0 | 6 | ホスト名 | imklog 5.8.10, log source = /proc/kmsg started. | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 1 | kernel: | NULL | NULL | NULL |
| 2 | NULL | 2014-05-10 15:13:05 | 2014-05-10 15:13:05 | 5 | 6 | ホスト名 | [origin software="rsyslogd" swVersion="5.8.10" x-pid="662" x-info="http://www.rsyslog.com"] start | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 1 | rsyslogd: | NULL | NULL | NULL |
+—-+————+———————+———————+———-+———-+—————-+—————————————————————————————————-+————+————+————-+———–+—————+———+—————–+————–+———–+———-+———-+————+———–+————–+—————–+———-+
2 rows in set (0.00 sec)
[/plain]

Apache のログを rsyslog へ渡す設定を行う

httpd.conf を編集します。

[plain]ErrorLog syslog:local1
LogLevel warn
LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vcombined
CustomLog |/usr/local/bin/apache_syslog.pl vcombined
[/plain]

次に Perlスクリプト apache_syslog.pl を /usr/local/bin に作成します。

[perl]#!/usr/bin/perl
use Sys::Syslog qw( :DEFAULT setlogsock );

setlogsock(‘unix’);
openlog(‘apache’, ‘cons,pid’, ‘local0’);

while ($log = <STDIN>) {
syslog(‘debug’, $log);
}
closelog
[/perl]

 

スクリプトを作成したら、実行できるように設定します。
私はこれをしなかったのでちょっとハマりましたw

[plain]chmod 755 apache_syslog.pl
[/plain]

rsyslog.conf に設定を追加します。

[plain]$template MsgFormat, "%msg:2:$%\n"
$template httpd_access, "/var/log/rsyslog/%msg:F,32:2%/httpd_access_%$year%%$month%%$day%.log"
$template httpd_error, "/var/log/rsyslog/%fromhost-ip%/httpd_error_%$year%%$month%%$day%.log"

local0.debug -?httpd_access;MsgFormat
local1.debug -?httpd_error;MsgFormat
[/plain]

最後に、rsyslog、Apache を再起動します。

[plain]# service rsyslog restart
# service httpd restart
[/plain]

これで設定は終了です。
あとは自分でサイトにアクセスしてみて、MySQLにログが保存されたか
確認してください。

まあ、これで何をするってわけではないけど、ログ解析とかできるかなー
くらいですがw

 

-IT, linux, サーバー構築
-, , ,

執筆者:


comment

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

フルスタックエンジニアとはなんぞや

最近よく聞く言葉。 「フルスタックエンジニア」 この言葉の定義とはなんぞや? http://blog.hatena.ne.jp/-/topic/フルスタックエンジニア より引用 フルスタックエンジニア …

Java の Out of Memory によるトラブル・・・

参った。 本日夕方から、Java の Out of Memory によるトラブルで散々。 現在2:40。 明日はトラブル後であるから、当然定時出社だ。 我が会社は8:40始業。 通勤時の渋滞や支度時間 …

書評「過負荷に耐えるWebの作り方」

先日、書店で見かけて、さわりだけを立ち読みした本。 過負荷に耐えるwebの作り方-国民的アイドルグループ選抜総選挙の舞台裏- 本の概要を出版元である技術評論社より引用。 恒例となった国民的アイドルグル …

Java の Out of Memory によるトラブル(その後)

前回のエントリー「Java の Out of Memory によるトラブル」のその後。 結論だけ言うと、サーバ増設することになり、突貫工事で構築しました。 申し込み締切が今週金曜日ということで、これま …

超小型パソコンが熱い

昨年秋、超小型パソコン「Raspbrry Pi」を購入。 名刺サイズのおもちゃみたいなやつだけど、立派なパソコンという。 まあ、マシンパワーはないので、たいそうなことはできないのだけど、 それでもWe …

自己紹介

横浜の計装会社で6年勤務。田舎の長男のため、結婚を機に実家へ戻る。現在は実家のある某地方では大手のSI会社勤務で16年目。SE歴22年。娘3人(中3、小3、6歳)。学生時代は吹奏楽部で打楽器担当。ドラム演奏可。現在は電子ドラムで練習する程度。Youtubeに演奏動画をアップしてたりする。HR/HM好き。きゃりー・Pufumeも聴くなど音楽については雑食。最近はBABYMETAL押し!ゲームは長女がポケモンやり始めたのをキッカケに、いい歳してどっぷりポケモンにハマるなど。さらにはポケモンカードにまで手を出す。さらにさらに、2017年8月よりベイブレードバーストを開始するなど。

2019年12月
« 10月    
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

自己紹介

横浜の計装会社で6年勤務。田舎の長男のため、結婚を機に実家へ戻る。現在は実家のある某地方では大手のSI会社勤務で16年目。SE歴22年。娘3人(中3、小3、6歳)。学生時代は吹奏楽部で打楽器担当。ドラム演奏可。現在は電子ドラムで練習する程度。Youtubeに演奏動画をアップしてたりする。HR/HM好き。きゃりー・Pufumeも聴くなど音楽については雑食。最近はBABYMETAL押し!ゲームは長女がポケモンやり始めたのをキッカケに、いい歳してどっぷりポケモンにハマるなど。さらにはポケモンカードにまで手を出す。さらにさらに、2017年8月よりベイブレードバーストを開始するなど。

2019年12月
« 10月    
 1
2345678
9101112131415
16171819202122
23242526272829
3031