CentOS7 で Apache のログを syslog に流す

経緯

Apache のログを Syslog サーバに流したくなったので試験してみました。

作業

前提として、 Apache (CentOS7構成) サーバと Syslog サーバが既に存在しているものとします。

この状態で、 Apache サーバの設定をいくつか編集します。

/etc/httpd/conf/httpd.conf

まずは httpd.conf

## 略

    #
    # If you prefer a logfile with access, agent, and referer information
    # (Combined Logfile Format) you can use the following directive.
    #
    ## ↓変更
    ## CustomLog "logs/access_log" combined
    CustomLog "|/usr/bin/logger -p local5.info -t httpd_access" combined

## 略

#
# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a <VirtualHost>
# container, error messages relating to that virtual host will be
# logged here.  If you *do* define an error logfile for a <VirtualHost>
# container, that host's errors will be logged there and not here.
#
## ↓変更
## ErrorLog "logs/error_log"
ErrorLog  "|/usr/bin/logger -p local6.info -t error"

## 略

通常ログ(CustomLog)とエラーログ(ErrorLog)をローカルからロガー経由にします。

ファシリティは local5local6 にしましたが、後でSSLのログも編集しなければならないことに気付きました。合計すると、4つ使用しますね。

なお、ファシリティの番号についてはお好みで。

/etc/httpd/conf.d/ssl.conf

httpd.conf と同じような設定をSSLについても実施します。

## 略

# Use separate log files for the SSL virtual host; note that LogLevel
# is not inherited from httpd.conf.
## ↓変更
## ErrorLog logs/ssl_error_log
ErrorLog "|/usr/bin/logger -p local4.info -t error"
## ↓変更
## TransferLog logs/ssl_access_log
TransferLog "|/usr/bin/logger -p local3.info -t ssl_access"
LogLevel warn

## 略

これで Apache 側はOK。

/etc/rsyslog.conf

続いて Syslog の改良 rsyslog の設定を編集します。

## 略

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
## ↓変更
## *.info;mail.none;authpriv.none;cron.none                /var/log/messages
*.info;mail.none;authpriv.none;cron.none;local3.none;local4.none;local5.none;local6.none;                /var/log/messages

## 略


## ↓追記
# httpd access log
local5.*                                              @192.0.2.1
local5.*                                              /var/log/httpd/access_log
# httpd error log
local6.*                                              @192.0.2.1
local6.*                                              /var/log/httpd/error_log
# httpd access log
local3.*                                              @192.0.2.1
local3.*                                              /var/log/httpd/ssl_access_log
# httpd error log
local4.*                                              @192.0.2.1
local4.*                                              /var/log/httpd/ssl_error_log

## 略

先程の設定で /var/log/messages に Apache のログも記録されてしまうようなので、 local3.none;local4.none;local5.none;local6.none; を追記して使用したファシリティのログは /var/log/messages に流さないように抑止します。

一方、それぞれのファシリティについて @192.0.2.1 で外部の Syslog サーバにログを流すように設定を追記します。念のため、ローカルにも保存するようにしておきます。

再起動

# systemctl restart rsyslog
# systemctl restart httpd
#

最後に rsyslog と Apache を再起動。

これでログが Syslog サーバに流れるようになったこと、また、ローカルでも変わらずログが記録され続けていることを確認しました。

参考

設定

Syslog について

ファシリティについて

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。