経緯
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
)をローカルからロガー経由にします。
ファシリティは local5
と local6
にしましたが、後で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 サーバに流れるようになったこと、また、ローカルでも変わらずログが記録され続けていることを確認しました。
参考
設定
- Apacheのログをsyslogサーバへ転送する方法 | サーバー・ネットワーク管理者的なメモ
- Apache(httpd)のアクセスログの収集について | セキュリティ専門企業発、ネットワーク・ログ監視の技術情報 – KnowledgeStare(ナレッジステア)
- Apacheのログをsyslog(rsyslog)で管理する | 俺的備忘録 〜なんかいろいろ〜
- 【syslog入門】ApacheのログをAIX~Linuxに転送する流れ – (O+P)ut
- Linuxサーバー apache+rsyslogでリモートログをとる | OCテックノート