ログの取得と管理

【連載コラム:Linuxでサーバーを構築してみよう(8)」
「何かトラブルなどがあったらログを見ろ」と言われるくらい大切なログ。そのログを見やすくしましょう。

最終更新日:2023年03月16日

サーバー構築の連載コラムの8回目となる今回は、ログの取得と管理に管理について解説していきます。


ログの重要性

サーバー管理を行う際、外すことのできない話題が「ログ」です。ログは、Linuxマシンの中で起きたことを記録しておくファイルです。「何かトラブルなどがあったら必ずログを見ろ」というのはよく言われることですし、何も起きていなくても定期的にログを参照する癖はつけておくことが望ましいと言えます。そして、そのログを見やすいように設定しておくこともまた重要と言えるでしょう。

rsyslog

「rsyslog」はシステムログを記録するためのソフトウェアです。以前広く利用されていた「syslog」の機能強化版でいくつかの機能が強化されていますが、基本的な使い方はほぼ同じです。特徴としては、「複数のマシンのログを1台のマシンに集約する」などといったことが可能である、ログのフィルタリングや主要なデータベースとの連携が可能であるといったことが挙げられます。

rsyslogの設定ファイル

rsyslogの設定ファイルは、「/etc/rsyslog.conf」です。ところで、このファイルの中には次のような記述が見られます。

$IncludeConfig /etc/rsyslog.d/*.conf

この記述は、「/etc/rsyslog.dディレクトリにある、ファイル名が.confで終わるファイルすべてをこのファイルに取り込む」という意味です。設定ファイルが長くなってしまうため、いくつかのファイルに分割し、分割したファイルはすべて同じディレクトリの下に配置しておき、それらをすべて取り込んだ(Include)ものが設定ファイルになる、という形になっています。ここでは、/etc/rsyslog.confと、「/etc/rsyslog.d」配下にある、.confで終わっているファイルのすべてを合わせたものが設定ファイルになるということになります。

rsyslogの設定

/etc/rsyslog.d/配下にあるファイルには、たとえば以下のような記述があります。

mail,cron.info                 /var/log/mailcron.log

この記述は、「ファシリティmailおよびファシリティcronの、プライオリティinfo以上のメッセージを、/var/log/mailcron.logに出力する」ということを表しています。

ファシリティ

「ファシリティ」は、簡単に言えば「何のサービスのログであるか」を表すものです。rsyslogで利用できるファシリティを次表に示します。

auth認証サービス(現在はauthprivが推奨される) 
authpriv認証サービス
croncronのメッセージ
daemonデーモンのメッセージ
kernカーネルのメッセージ
lprプリンタサービスのメッセージ
mailメールサービスのメッセージ
newsニュースサービスのメッセージ
syslogsyslogのメッセージ
userユーザープロセスのメッセージ
uucpuucp転送を行うプログラムのメッセージ
local0~7独自利用のためのファシリティ

ファシリティは、下の例のように「,」(カンマ)区切りで表すこともできます。

auth,authpriv

プライオリティ

「プライオリティ」は、ログの重要度を表すものです。rsyslogで使われるプライオリティを次表に示します。

emergシステムが停止するレベルのエラーを示すメッセージ
alert緊急に対処が必要なエラーを示すメッセージ
critハードウェア障害など致命的なエラーを示すメッセージ
err一般的なエラーメッセージ
warning警告メッセージ
notice通知メッセージ
info一般的な情報メッセージ
debugデバッグメッセージ
noneログメッセージ出力しない設定
*すべてのプライオリティ

プライオリティには序列があります。「none」と「*」を除いて、この表の上にあるほど重要度が高く、下ほど重要度が低くなります。

先ほど示した

mail,cron.info                 /var/log/mailcron.log

という記述は、「ファシリティmailおよびファシリティcronの、プライオリティinfo"以上"のメッセージを、/var/mailcron.logに出力する」ということになります。ここで、指定したプライオリティだけでなく、そのプライオリティよりも高い重要度(プライオリティ)のメッセージがすべてログに記録されるという点に注意が必要です。

特定のプライオリティのみ出力したい場合には、「=」記号を利用します。

mail,cron.=info                 /var/log/mail.log

この場合、プライオリティがinfoのメッセージだけが記録されます。
また、逆に特定のプライオリティ以下のメッセージを記録することもできます。このためには「!」記号を利用します。

mail,cron.!notice                 /var/log/mail.log

この例では、プライオリティがnotice以下のメッセージが記録されることになります。

ファシリティとプライオリティのセットを複数指定することもできます。この場合、「;」(セミコロン)で区切ります。たとえば、

mail.notice;cron.info                 /var/log/mailcron.log

とすると、ファシリティ「mail」でプライオリティ「notice」以上のメッセージと、ファシリティ「cron」でプライオリティ「info」以上のメッセージが、/var/log/mailcron.logに記録されることになります。

ディスクアクセス頻度の低減

たとえば

mail.notice                 -/var/log/mailcron.log

のように、ログファイルの前に「-」(ハイフン)をつけることで、ログをファイルに書き出す前に、ある程度メモリに書き出す内容を保存してからファイルに書き出すようになります。こうすることで、ディスクアクセスの頻度を少なくすることができます。これは、書き出されるログの量が多い場合に、ディスクへの負担を少なくする目的で使われます。ただし、この場合、システムトラブル発生時に、ログファイルにログが記録されないことがあり得るので注意が必要です。

設定の変更の反映

他のサーバソフトウェア同様、設定ファイルを変更したらサービスを再起動し、設定の変更を反映させます。

# systemctl restart rsyslog

Apacheのログをrsyslog経由で出力する

Apacheのログは、デフォルトではrsyslogを経由しません。これでも問題があるわけではありませんが、たとえばログを1台のログサーバに集約するなど、rsyslogのメリットを享受するために、このログをrsyslog経由にすることもできます。この場合は、rsyslogだけではなく、Apacheの設定ファイルに変更を施す必要があります。具体的には、Apacheの設定ファイルであるhttpd.conf(およびこれがIncludeするファイル)の中の、「CustomLog」および「ErrorLog」の設定を書き換えます。

CustomLogの設定をコメントアウトした上で、以下の記述を施します。

CustomLog "|/usr/bin/logger -p local5.info -t http-access" combined

/usr/bin/loggerコマンドは、システムログを記録するためのコマンドです。パイプを通じてこのコマンドを利用して、rsyslogにログを送る形になります。この設定では、ファシリティlocal5のプライオリティinfoとして、Apacheへのアクセスログが記録されます。

エラーログも同じようにrsyslogに送るよう設定します。ErrorLogの設定をコメントアウトした上で、以下の設定を施します。

ErrorLog  "|/usr/bin/logger -p local6.notice -t httpd_error"

エラーログなので、ファシリティを1段階上げてあります。

続けてrsyslogの設定を変更します。設定ファイルに以下のように記述すると、それぞれのファイルにログが出力されます。設定を変更した後にrsyslogを再起動すれば、ログがsyslog経由で出力されます。

local5.=info       /var/log/httpd-accesslog.log
local6.=notice    /var/log/httpd-errorlog.log

ログサーバを構築する

rsyslogでは、TCPもしくはUDPを用いて、ネットワーク越しにログを送信することで、1台のログサーバに集約するといったこともできます。この機能には、複数のサーバを運用する際に、いちいちサーバを見て回る必要がなくなるというメリットがあります。具体的な設定方法については『Linuxシステム管理標準教科書』の6章を参照してみてください。

Linuxシステム管理標準教科書

筆者紹介
川原 龍人 氏

川原 龍人 氏

1975年生まれ。
著書に「BIND9によるDNSサーバ構築」、「シェルスクリプト ポケットリファレンス Bash編(技術評論社)」など。
予備校講師としても活躍中。Linuxとのつきあいは20年を超える。

バックナンバー

第14回:バックアップ

第13回:異常発生時の対応

第12回:サーバー構築という仕事

第11回:ユーザー教育の重要性

第10回:テスト環境を構築する

第9回:ログローテーションとは

第8回:ログの取得と管理

第7回:アクセス制限

第6回:OpenSSHの活用

第5回:ユーザーアカウントとアクセス制限

第4回:テスト環境を構築する

第3回:サーバー構築をハードウェアの視点から考えてみる

第2回:CMSを使ったWebサイトを構築するには?

第1回:Linuxでサーバーを構築しよう

ページトップへ