Database JUNKY

MySQL,MariaDBを中心としたブログです

syslog-ng で、リモートホストのapacheログを集中管理する

別に何がどう必要なのか全く目的が、ログ収集サーバみたいなものを作ってみたくて、syslog-ngというものを導入してみました。 これが、基礎からよく理解していないため、インストールから設定から、どうしてこうなった?なども含めいまだに理解しておりません。 登場マシンとしては、ログ収集サーバ[sqlog01] 、ログ配信サーバ[sqwww01]で、[sqwww01]の方は、apacheaccess_logを[sqlog01]サーバに吐き出したいなんていう想定で作成しました。 正直なところ、自分が思っている結果には至っておりません。(誰かおしえて・・・・)

・syslog-ng サーバのインストール 細かい話には触れません。細かい話はわからないので・・・。 [shell]

[root@sqlog01 src]# cd /usr/local/src/ [root@sqlog01 src]# pwd /usr/local/src [root@sqlog01 src]# wget http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm --2011-09-05 13:14:26-- http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm download.fedora.redhat.com をDNSに問いあわせています... 209.132.181.24, 209.132.181.25, 209.132.181.26, ... download.fedora.redhat.com|209.132.181.24|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 12232 (12K) [application/x-rpm] `epel-release-5-4.noarch.rpm' に保存中

100%[===================================================================================================================>] 12,232 45.9K/s 時間 0.3s

2011-09-05 13:14:27 (45.9 KB/s) - `epel-release-5-4.noarch.rpm' へ保存完了 [12232/12232]

[root@sqlog01 src]# rpm -ivh epel-release-5-4.noarch.rpm 警告: epel-release-5-4.noarch.rpm: ヘッダ V3 DSA signature: NOKEY, key ID 217521f6 準備中... ########################################### [100%] 1:epel-release ########################################### [100%]

[root@sqlog01 src]# wget http://www.balabit.com/downloads/files/syslog-ng/open-source-edition/pkgs/pool/e/eventlog/rhel-5_syslog-ng-2.1/libevtlog0-0.2.8-1.x86_64.rpm [root@sqlog01 src]# wget http://www.balabit.com/downloads/files/syslog-ng/open-source-edition/pkgs/pool/l/libdbi8/rhel-5_syslog-ng-2.1/libdbi8-0.8.2bb2-3.rhel5.x86_64.rpm [root@sqlog01 src]# rpm -ivh lib* 警告: libdbi8-0.8.2bb2-3.rhel5.x86_64.rpm: ヘッダ V3 DSA signature: NOKEY, key ID 2aa28252 準備中... ########################################### [100%] 1:libevtlog0 ########################################### [ 50%] 2:libdbi8 ########################################### [100%]

[root@sqlog01 src]# yum install --enablerepo=epel syslog-ng Dependencies Resolved


Package Arch Version Repository Size

Installing: syslog-ng x86_64 2.1.4-9.el5 epel 253 k Installing for dependencies: libnet x86_64 1.1.5-1.el5 epel 58 k

Transaction Summary

Install 2 Package(s) Upgrade 0 Package(s)

Total download size: 311 k Is this ok [y/N]: y

[/shell]

・syslog-ng.confの編集 リモートからのログを受け付ける設定を、confファイルに設定しました。ぱっと見た感じでは、ログ取得元の設定を出力先を設定する設定で 全てのログの出力先は、/var/log/syslog-ng/$HOST/messagesに集約される漢字ですね。$HOSTの部分はログ取得元のホスト名(ipaddress)がディレクトリとして入ります。

[shell]

[root@sqlog01 ~]# vi /etc/syslog-ng/syslog-ng.conf 以下を追記

Remote logging

source s_remote { tcp(ip(0.0.0.0) port(514)); udp(ip(0.0.0.0) port(514)); };

destination d_separatedbyhosts { file("/var/log/syslog-ng/$HOST/messages" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes)); };

log { source(s_remote); destination(d_separatedbyhosts); }; [/shell]

・confファイルにシンタックスエラーがないかチェックします [shell]

[root@sqlog01 src]# syslog-ng -s [root@sqlog01 src]# chkconfig --list syslog syslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off

[/shell]

・サービスを開始します。今回は、syslog -> syslog-ng に切り替えたため、既存のsyslogサービスを停止して、新たに、syslog-ngを開始します。

[shell]

[root@sqlog01 src]# /etc/init.d/syslog stop カーネルロガーを停止中: [ OK ] システムロガーを停止中: [ OK ] [root@sqlog01 src]# /sbin/chkconfig syslog off [root@sqlog01 src]# /etc/init.d/syslog-ng start Starting syslog-ng: [ OK ] [root@sqlog01 src]# /sbin/chkconfig syslog-ng on [root@sqlog01 src]# /sbin/chkconfig --list syslog-ng syslog-ng 0:off 1:off 2:on 3:on 4:on 5:on 6:off

[/shell]

・sqwww01のサーバ側のaccessログを転送したいため、httpd.confに以下の設定を追加します。 [shell]

[root@sqwww01] vi /etc/httpd/conf/httpd.conf

CustomLog logs/access_log common

CustomLog "|/usr/bin/logger -i -p local4.info -t httpd" combined

[/shell]

・/etc/syslog.conf に以下の設定を追記します [shell]

[root@sqwww01 conf]# vi /etc/syslog.conf

log shipping

. @192.168.101.53

[/shell] ・syslogd を再起動します [shell] [root@sqwww01 conf]# /etc/init.d/syslog restart カーネルロガーを停止中: [ OK ] システムロガーを停止中: [ OK ] システムロガーを起動中: [ OK ] カーネルロガーを起動中: [ OK ] [/shell]

・確認 syslogサーバ[sqlog01]にhttpdアクセスログが出力されているか確認します。 [shell]

[root@sqlog01 ~]# view /var/log/syslog-ng/192.168.101.31/messages

アクセスログが書かれておりました!!!

[/shell]

しかしながら・・・本当は、/var/log/syslog-ng/192.168.101.31/messagesに全てのログが書き込まれるのではなくて、httpdのログは、httpdのログっぽくaccess_logとかに書いてほしかったのですが・・・その方法がいまいちわかりませんでした。 たぶん、次回は・・というのはないです・・。そもそもこのような要件で、ログを集約させるより、バッチか何かで、一日一回ログ転送したほうが効率的だからかもしれません・・。