目標
- syslog、rsyslog、およびsyslog-ngについて理解する
- loggerコマンド、logrotate、journalctlコマンドについて理解する
システムログ
Linuxのsyslog、rsyslog、およびsyslog-ngは、いずれもシステムのログメッセージを管理し、収集するための異なるツールやデーモンです。これらはすべて、LinuxやUnixベースのシステムでログ管理を行うために使用されますが、それぞれに特徴や違いがあります。
syslog
syslogは、ログメッセージの標準的なインターフェースとプロトコルを提供する、Unix系システムにおける最も基本的なログシステムです。元々、1970年代にBSD (Berkeley Software Distribution) に組み込まれて以来、広く使用されています。
特徴
- 標準的なログ管理:システムのエラー、警告、情報メッセージなどをログファイルに記録するための標準化された方法を提供します。
- ログの分類:メッセージは優先度(例えば、info、warn、error)と施設(例えば、auth、daemon、kern)に基づいて分類されます。
- 単純な構造:シンプルな構造で、ほとんどのLinuxシステムで利用可能です。ログは通常、/var/log/syslogまたは/var/log/messagesに保存されます。
制限
- より高度な機能や拡張性が欠けているため、特に複雑なシステムや高トラフィックな環境では不便に感じることがあります。
syslogd:syslogdは、システムのログメッセージを受け取って処理するデーモン(バックグラウンドで動作するプログラム)です。Unix系システムでは、システムのイベントやログメッセージを管理するために使用されており、syslogプロトコルに基づいています。
主な機能
ログメッセージの収集: システム内のさまざまなサービスやアプリケーションから送信されるログメッセージを受信します。
ログの出力先:ログメッセージの出力先は、設定でしたファイルに行われます。
例えば、(/var/log/messages など)やリモートサーバーに保存されます。
施設と優先度の指定:syslogdは、ログメッセージを「施設(facility)」と「優先度(priority)」に基づいてフィルタリングできます。施設はメッセージの発生源(例えばauth、daemon、kern)を示し、優先度はメッセージの重要度を示します。
注意点:現在のシステムでは、syslogdは一般的にrsyslogやsyslog-ngに置き換えられており、syslogd自体は使われないことが多いです。
klogd:klogdは、カーネルからのログメッセージを処理するデーモンです。主にカーネルのメッセージを受信し、それをsyslogシステムに渡します。
主な機能
カーネルログの収集:Linuxカーネルから出力されるログメッセージ(例えば、起動メッセージやカーネルエラー)をsyslogデーモンに渡します。
/proc/kmsgからの読み取り:klogdは、カーネルログメッセージを/proc/kmsgファイルから読み取って処理します。
注意点:現在、klogdはあまり使われることがなく、カーネルログは直接rsyslogやsyslog-ngによって処理されることが一般的です。最近では、dmesgコマンドやjournalctlがカーネルログを表示するために広く使用されます。
rsyslog
rsyslogは、syslogの後継として登場した、より高度なロギングシステムです。syslogの機能を拡張し、ネットワーク経由でのログ転送や、複雑なフィルタリング、ログの永続化、パフォーマンスの向上を提供します。
特徴
- パフォーマンス向上:より多くの並列処理が可能で、大規模な環境に適しています。
- リモートログ:rsyslogはネットワーク越しにログを送信したり、他のサーバーからログを収集したりできます。UDPやTCP、TLS(暗号化通信)などをサポートしています。
- 柔軟な設定:ログをどのように処理するか、どこに保存するかなどを非常に柔軟に設定できます。フィルタリング、出力先の指定、ログの保持期間などをカスタマイズ可能です。
- モジュール化:追加のモジュールをロードして、さまざまなプロトコル(例えば、IMAPやRelpなど)を利用できます。
利用するメリット
- スケーラビリティ:高トラフィックなシステムに対応できる高いパフォーマンス。
- セキュリティ:TLSなどを用いた安全な通信が可能。
- 豊富な機能:ログの転送、フィルタリング、リモートサーバーへの出力など、多機能。
syslog-ng
syslog-ngは、syslogおよびrsyslogと同様にログ管理を提供するツールですが、さらに柔軟な設定と多くの機能を提供します。特に複雑なログ管理が必要な大規模なシステムでよく使用されます。
特徴
- 高度なログ収集:syslog-ngは、ログメッセージをファイル、データベース、リモートサーバーなど、さまざまな宛先に収集できます。多くの入力ソース(ログファイル、データベース、ネットワーク)や出力先(ファイル、リモートサーバー、Kafka、ElasticSearchなど)をサポートします。
- 柔軟なフィルタリングとルーティング:syslog-ngは、受信したメッセージをさまざまな条件でフィルタリングし、異なる出力先にルーティングできます。これにより、異なるアプリケーションやシステムに対して異なるログポリシーを適用できます。
- セキュリティ:TLSを使用した暗号化されたログ転送、署名によるログの検証機能もサポートしています。
- パフォーマンスとスケーラビリティ:高スループットで動作し、分散システムでも利用できるように設計されています。
利用するメリット
- 多機能:ログを多様な方法で収集・出力可能。
- 高度なログフィルタリング:複雑なルールに基づいてログを処理できる。
- 拡張性:様々なプラグインやモジュールを使って機能を追加可能。
一覧表で比較
特徴/ツール | syslog | rsyslog | syslog-ng |
---|---|---|---|
標準化 | 標準的 | 拡張 | 高度な拡張 |
パフォーマンス | 低~中 | 高 | 高 |
柔軟性 | 低 | 中 | 高 |
セキュリティ | 基本的 | 高(TLS対応) | 高(TLS対応) |
ネットワーク転送 | 不可 | 可(複数プロトコル対応) | 可(豊富なプロトコル対応) |
利用シーン | 小規模・基本的なログ管理 | 中規模~大規模環境 | 大規模で多様なログ管理 |
- syslogは基本的なログ機能を提供し、シンプルなシステムに最適です。
- rsyslogは、パフォーマンスや柔軟性が高く、大規模システムやリモートログ収集が必要な環境で使われます。
- syslog-ngは、最も高度で柔軟な設定が可能で、特に多様なログの収集と出力が求められる環境に向いています。
loggerコマンド
loggerコマンドは、ユーザーがシステムのログにメッセージを書き込むために使用するコマンドラインツールです。このツールを使うことで、シェルから簡単にログメッセージを送信できます。
主な機能
- システムログにメッセージを追加: ユーザーがシェルから直接、ログメッセージをsyslogシステムに送信できます。
- ログの優先度や施設の指定: loggerコマンドを使って、施設や優先度を指定したメッセージを送ることができます。
使用例
logger "This is a test message"
このコマンドは、syslogシステムに「This is a test message」というメッセージを記録します。
より詳細な使い方
logger -p local0.info "This is an info message from local0"
この例では、local0という施設とinfoという優先度でログメッセージを送信しています。
loggerコマンドは、スクリプト内でログメッセージをシステムログに記録したい場合に非常に便利です。
logrotate
logrotateは、システムやアプリケーションのログファイルがサイズや時間で膨大にならないように管理し、自動的にローテーション(循環)させるためのツールです。主にログの圧縮、アーカイブ、削除を行います。
主な機能
ログファイルのローテーション: 指定されたサイズまたは日付に基づいてログファイルをローテーションし、新しいファイルを作成します。
圧縮とアーカイブ:ローテーションされた古いログファイルは圧縮して保存されます(例えば.gz形式)。
設定ファイルによる柔軟な管理:/etc/logrotate.conf や /etc/logrotate.d/ 配下の設定ファイルで、どのログファイルをどのようにローテーションするかを細かく指定できます。
設定例:例えば、/var/log/messagesのログファイルを1週間ごとにローテーションし、最大5回分のログを保持する設定を行うには、以下のような設定を/etc/logrotate.d/に追加します。
/var/log/messages {
weekly
rotate 5
compress
delaycompress
missingok
notifempty
}
ログファイルが大きくなりすぎるのを防ぐために、logrotateは非常に重要なツールです。特にサーバーや大規模システムでは必要不可欠です。
journalctlコマンド
journalctlは、systemdジャーナル(journald)からログメッセージを取得し、表示するためのコマンドです。systemdに基づくシステムでは、syslogよりもjournaldを使ってログメッセージを管理することが一般的です。
主な機能
システムログの表示: システム全体や特定のサービスのログメッセージを表示できます。
ログのフィルタリング:日付、サービス、ログレベル、優先度などでフィルタリングして表示することができます。
ログの永続化:デフォルトでは、journaldはログをメモリに保存し、システムが再起動するたびに消えますが、永続的に保存することも可能です。
使い方例
全てのログメッセージを表示
journalctl
特定のサービスのログを表示(ここではsshdサービスのログメッセージを表示します。)
journalctl -u sshd
最新のログを表示(tail -fに似た機能で、ログの新しいエントリが表示されるたびにリアルタイムで追跡できます。)
journalctl -f
特定の日付のログを表示
journalctl --since "2025-06-30" --until "2025-07-01"
journalctlはsystemdベースのシステムに特有のツールであり、syslogやrsyslogを使うシステムでは使用されません。
journaldは二重書き込みやシステムのクラッシュ後のログ整合性にも対応しており、堅牢性が高いとされています。
今回は以上になります。

ブックマークのすすめ
「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。

