8
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CentOS7のログ転送設定

Posted at

はじめに

CentOSはrsyslogを使用してログを他サーバーに転送する機能があります。
こちらの機能を使って、他サーバーにシステムログとApache httpのログを転送する方法をまとめました。

前提条件

送信側、受信側共にCentOS7.6環境を使用しています。
Apache httpはyumでインストールしています。バイナリーからインストールした場合は、パスが異なる場合がありますのでご注意ください。

実施内容

システムログを他サーバーに転送するための設定とApache httpのログを転送するための設定の2つに分けて説明していきます。

1.システムログを他サーバーへ転送する設定

rsyslogの転送機能を使って他サーバーに転送する設定を行います。

送信側設定

送信側のrsyslogの設定ファイルに転送設定を記述します。

書式:ログの種類.重要度 @@サーバー名orIPアドレス:ポート番号

ログの送信プロトコルはUDPとTCPを選択可能です。
下記例はTCPで全てのログ(*.*)を転送する場合の設定です。
UDPで送信する場合は@を1個にしてください。
ポート番号のデフォルトは512ですが、任意で決められます。

送信側/etc/rsyslog.conf
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
*.* @@192.168.242.xxx:514

受信側設定

転送されたログを受信するサーバー側のrsyslogの設定ファイルに受信設定を記述します。
設定自体は既にコメントアウトされた状態で記述されているので、送信されるプロトコルに応じて、コメントを外すだけでOKです。
下記はTCP受信設定のコメントを外していますが、UDPで受信する場合はUDP受信設定のコメントを外してください。送信設定でポート番号を変更している場合はこちらも修正します。

受信側/etc/rsyslog.conf
# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514

# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

設定が完了したら、送信側と受信側のrsyslogを再起動してください。

$ systemctl restart rsyslog

なお、firewalldを使用している場合は、受信側ポートの穴あけが必要になります。
参考までにTCPのポート514のポート穴あけをするコマンドは以下の通りです。 1

$ firewall-cmd --add-port 514/tcp

これでシステムログが転送されるようになります。

2.Apache httpの送信設定

送信側設定

Apache httpのログをrsyslogに出力させる

Apache httpの設定ファイル(/etc/httpd/conf/hhtp.conf)のログ設定項目に、loggerコマンドを使ってrsyslogに転送するように設定します。 2

Apache httpの設定ファイルを以下のように修正します。

書式:
CustomLog "|/user/bin/logger -p プロパティ.優先度" combined
rsyslogはプロパティと優先度で出力先のログを判断するので、他のログと重複しない空いているプロパティ(local0~local6)を割り当てます。

/etc/httpd/conf/http.conf
CustomLog "|/usr/bin/logger -p local1.info -t http_access" combined
ErrorLog "|/usr/bin/logger -p local1.warn -t http_error"

rsyslogでApache httpのログ出力先ファイルを指定する

Apache httpのログ出力先を指定します。
併せて、Apacheのログが/var/log/messagesに出力しないように設定(none)します。

/etc/rsyslog.conf
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none;local1.none    /var/log/messages
                       ↑追記
## Application Log
local1.=info                         /var/log/httpd/httpd_access.log
local1.=warn                         /var/log/httpd/httpd_error.log

サービスの再起動

設定を反映させるために、サービスの再起動を行います。

$ systemctl restart httpd
$ systemctl restart rsyslog

これで、送信側のApache httpログが受信側に送られるようになりました。

受信側設定

次に受信側でも、Apache httpログの出力設定を追加します。

/etc/rsyslog.conf
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none;local1.none    /var/log/messages
                       ↑追記
## Application Log
local1.=info                         /var/log/httpd/httpd_access.log
local1.=warn                         /var/log/httpd/httpd_error.log

設定を反映させるために、サービスの再起動を行います。

$ systemctl restart rsyslog

これで、sysylogとApache httpログが他サーバーでログ出力されるようになりました。
なお、SSL通信ログも転送したい場合は、SSL通信の設定ファイル(/etc/http/conf.d/ssl.conf)を同様に修正してください。

おわりに

今回はApache httpを例にしましたが、他ミドルウェアでも大抵rsyslog経由でログを出力する設定があるため、同様に転送を実施することが可能です。ただ、ミドルウェア毎に設定方法が異なるため、注意が必要です。(筆者は、Nginxのerrorログの転送で詰まり中です。)

今回記載したRsyslogの機能を使用した方法以外にも様々なログ転送方法はあるので、勉強してより良い方法を探っていきたいと思います。

以上

  1. デフォルトでFirewall-cmdで指定できるサービス名として「syslog」がありますが、こちらは514/UDPを開放するサービス名のため、514/TCPを開放するためには--add-portでポートを指定する必要があります。

  2. 正確にはjournald経由でrsyslogでログを書き込む形になります。

8
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?