#
ドキュメント

Document

自分のための備忘録です。

ログ

ログの管理方法

  • syslog/rsyslog
  • それ以外

UbuntuDebian系)のログは、慣例として/var/logに配置する。

syslog/rsyslog

各種サーバープログラムやカーネルなどが生成するシステムログメッセージは、syslog/rsysrogデーモンによって集中的に管理されます(図 9.1)。ログメッセージの生成元や優先度に応じて分類され、設定ファイルで指定された出力先に送り出されます。

なお、Apache HTTP ServerやSambaのように、syslog/rsyslogに頼らず独自にログを扱うサービスもあります。

syslog/rsyslogでは、ネットワークを介して別のホストにログメッセージを送ることもできます。つまり、ログサーバーを用意してログを集中的に管理できるわけです(図 9.2)。

「Linuxサーバーセキュリティ徹底入門」(中島能和) p.164

ログメッセージは、生成元を表すファシリティと優先度を表すプライオリティからタグ付けされる。

syslogは、プロトコルとアプリケーション(デーモン)を指す場合がある。

  • RFC 3164で定義されたsyslogプロトコル
  • syslogd(アプリケーション)

現在、アプリケーションとしてのsyslogは使われることが少ない。 代わりにsyslogプロトコルを満たしてsyslogを改善した、以下のアプリケーションが使われる。

  • rsyslog
  • syslog-ng

rsyslogsyslog-ngともにデータベースへログを出力できる。

Ubuntu 18.0.4ではrsyslogが使われている。

ubuntu@ip-10-0-0-200:~$ type rsyslogd
rsyslogd is /usr/sbin/rsyslogd

設定ファイル

rsyslogの設定ファイルは、/etc/rsyslog.conf

rsyslog.confファイルは、個々の設定を/etc/rsyslog.d/から読み込む。

# Include all config files in /etc/rsyslog.d/
#
$IncludeConfig /etc/rsyslog.d/*.conf

編集例

デフォルトの設定ファイル(/etc/rsyslog.d/50-default.conf)を編集して、Cronの結果を/var/log/cron.logへ出力する。

# 50-default.conf
...
auth,authpriv.*                 /var/log/auth.log
*.*;auth,authpriv.none          -/var/log/syslog
- # cron.*                                /var/log/cron.log
+ cron.*                                /var/log/cron.log
#daemon.*                       -/var/log/daemon.log
kern.*                          -/var/log/kern.log
#lpr.*                          -/var/log/lpr.log
mail.*                          -/var/log/mail.log
#user.*                         -/var/log/user.log
...

rsyslogdを、再起動する。

$ sudo service rsyslog restart

Cronの設定で、メールアドレスおよびリダイレクションを設定していないとき場合に、ログは/var/log/cron.logへ出力される。

loggerコマンドを使ったテスト

ログ情報を発行

loggerコマンドは、syslogにログ情報を渡す。 (以下の例では、ubuntuユーザーでログインしていることを前提とする)

$ logger -p mail.info "Hello mail"

オプションpはpriorityを表してファシリティ.プライオリティという形式で指定(例ではファシリティがmail、プライオリティがinfo)

オプションが省略された場合はuser.noticeが指定されたことになる。

ログを確認

$ tail -f /var/log/mail.log

......
2018-12-15T08:01:30.617404+00:00 ip-10-0-0-200 ubuntu: Hello mail <-- 追加

logrotate

設定ファイル

/etc
  |
  |- /etc/logrotate.conf
  |
  |- /etc/logrotate.d
    |
    |- alternatives
    |- apache
    |- ...
    |- rsyslog
    |- ...

rsyslogの設定を確認

$ less /etc/logrotate.d/rsyslog
/var/log/syslog
{
        rotate 7
        daily
        missingok
        notifempty
        delaycompress
        compress
        postrotate
                /usr/lib/rsyslog/rsyslog-rotate
        endscript
}

/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
{
        rotate 4
        weekly
        missingok
        notifempty
        compress
        delaycompress
        sharedscripts
        postrotate
                /usr/lib/rsyslog/rsyslog-rotate
        endscript
}

PHP

エラーをログへ出力する

設定

; Apacheモジュール版PHP
; /etc/php/7.2/apache2/php.ini
log_errors = On
; ...
error_log = /var/log/php/error.log

log_errors = Onかつerror_logに出力先ファイル名が設定されていないときは、/var/log/syslogへ出力される。

Apache

設定ファイル

# /etc/apache2/sites-enabled/000-default.conf
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

MySQL

/var/log/mysql/error.log

古いログはerror.log.1.gzのように圧縮されていくが、どのような基準で圧縮されるかは要確認。

Cron

*/5 * * * * echo `date` >> /var/log/cron/log.log