syslog(シスログ)とは
syslogは、IPネットワーク上でログメッセージを転送するための標準プロトコルです。このプロトコルは、単にメッセージを転送するだけでなく、ログを生成するシステム(アプリケーションやライブラリ)、ログを受信し分析するシステム全体を指すこともあります。syslogメッセージには、メッセージを生成したシステムの種類を示す「ファシリティコード」と、メッセージの重要度を示す「重大度レベル」が付与されます。
syslogの利用
syslogは、システム管理やセキュリティ監査だけでなく、一般的な情報提供、分析、デバッグなど、幅広い目的で使用されます。プリンター、ルーター、メッセージレシーバーなど、さまざまなデバイスがsyslog規格を採用しており、異なるタイプのシステムからのログデータを一元的に管理できます。多くの
オペレーティングシステムで実装されているのも特徴です。
動作モデル
ネットワーク上で動作する場合、syslogは
クライアントサーバモデルを採用します。ログを受信する側(サーバ)は、「syslogd」「syslogデーモン」「syslogサーバ」などと呼ばれます。クライアントは、1024バイト以下の短いテキストメッセージをサーバに送信します。syslogメッセージは、UDPまたはTCP上で送信されます。通常、データはクリアテキストで送信されますが、SSL/TLSによる暗号化も可能です。
syslogの歴史
syslogは、1980年代にエリック・オールマンによってsendmailプロジェクトの一部として開発されました。その後、多くのアプリケーションで採用され、
Unix系システムでは標準的なログ記録方式となっています。ルーターなどのネットワーク機器にも広く搭載されています。
長らく
デファクトスタンダードでしたが、規格は存在せず、実装間の非互換性も存在しました。セキュリティ強化のため、IETFはsyslogワーキンググループを結成し、2001年にRFC 3164として現状を文書化しました。その後、2009年にRFC 5424で標準化されました。特許を主張する企業もありましたが、プロトコルの利用と標準化に大きな影響はありませんでした。
syslogメッセージの構成要素
syslogメッセージは、以下の要素で構成されます。
- - ファシリティコード: メッセージを記録するシステムの種類を示すコード。受信側での処理方法を決定するために使用されます。
- - 重大度レベル: メッセージの重要度を示すレベル。
- - 情報ヘッダ: syslogソフトウェアが付与する情報。送信元のプロセスID、タイムスタンプ、ホスト名またはIPアドレスなどが含まれます。
ファシリティコード
ファシリティコードは、メッセージを記録するシステムの種類を特定します。以下のようなコードが定義されています。
ファシリティコード | キーワード |
---|
--- | -- |
0 | kern |
1 | user |
2 | mail |
3 | daemon |
4 | auth |
5 | syslog |
6 | lpr |
7 | news |
8 | uucp |
9 | cron |
10 | authpriv |
11 | ftp |
12-15 | ntpなど予約 |
16-23 | local0~local7 |
ファシリティコードとキーワードの対応は、OSやsyslogの実装によって異なる場合があります。
重大度レベル
重大度レベルは、メッセージの重要度を示すもので、以下のレベルが定義されています。
重大度レベル | キーワード |
---|
-- | -- |
0 | Emergency |
1 | Alert |
2 | Critical |
3 | Error |
4 | Warning |
5 | Notice |
6 | Info |
7 | Debug |
EmergencyとDebug以外の重大度レベルの意味は、アプリケーションによって異なる場合があります。通常、サーバ側でメッセージを表示する際に、特定の重大度レベル以上をフィルタリング表示します。例えば、Noticeレベルでフィルタリングした場合、Warning、Error、Critical、Alert、Emergencyレベルのメッセージも表示されます。
メッセージ
RFC 3164では、メッセージは「TAG」と「CONTENT」の2つのフィールドで構成されていました。TAGはメッセージを生成したプログラムやプロセスの名前、CONTENTはメッセージの詳細を示します。RFC 5424では、CONTENTは「MSG」と呼ばれるようになり、TAGはヘッダの一部として扱われるようになりました。rsyslogなどのツールは、この新規格に準拠しています。
メッセージの内容は
UTF-8でエンコードされ、
制御文字の範囲は避けるべきとされています。
ロガー
生成されたログメッセージは、
コンソール、ファイル、リモートのsyslogサーバなど、さまざまな場所に送信できます。ほとんどの実装では、ログにメッセージを送信するためのコマンドラインユーティリティ(logger)やソフトウェアライブラリが提供されています。ログを監視するには、クライアントアプリケーションを使用するか、ログファイルに直接アクセスします。tailやgrepなどのコマンドラインツールがよく使用されます。ログサーバは、ローカルファイルだけでなく、ネットワーク経由でログを送信するように設定できます。また、syslogメッセージのフィルタリングや表示を行うレポートプログラムが含まれている実装もあります。
syslogは、
クライアントサーバモデルで動作し、サーバはクライアントからの接続を特定のポートで待ち受けます。歴史的には、UDPの514番ポートが最も一般的でしたが、UDPには輻輳制御機能がないため、TCPの6514番ポートとTLSによる暗号化が推奨されています。
syslogの制限
syslogメッセージの内容は、プロセス、アプリケーション、OSに依存するため、統一性がありません。フォーマットや内容についての想定もありません。syslogメッセージはフォーマットされていますが、メッセージ部分はフォーマットされていません。また、syslogは片方向通信であり、受信側がメッセージを受信したことを送信側が確認する手段はありません。
今後の展望
syslogの利用は拡大しており、医療分野などでの応用も検討されています。SOX法、PCI DSS、HIPAA法などの規制により、セキュリティ強化が求められており、syslogはログ収集・分析に最適なフォーマットとして活用されています。Windowsイベントビューアなど、他のフォーマットからsyslogへの変換ツールも存在します。
近年では、企業全体のsyslogを収集・分析するマネージド・セキュリティサービス(MSS)も登場しており、
人工知能アルゴリズムを用いてパターンを検出し、顧客に問題を通報するサービスも提供されています。
syslogの関連文書
syslogプロトコルは、IETFが発行するRFCによって定義されています。主なRFCは以下の通りです。
- - RFC 3164: The BSD Syslog Protocol(廃止)
- - RFC 5424: The Syslog Protocol
- - RFC 5425: TLS Transport Mapping for Syslog
- - RFC 5426: Transmission of Syslog Messages over UDP
- - RFC 5427: Textual Conventions for Syslog Management
- - RFC 5848: Signed Syslog Messages
- - RFC 6012: Datagram Transport Layer Security (DTLS) Transport Mapping for Syslog
- - RFC 6587: Transmission of Syslog Messages over TCP
実装例
以下は、syslogの実装例です。
UNIX
- - sysklogd
- - rsyslog
- - syslog-ng
- - metalog
- - msyslog
- - socklog
Windows
- - TheOne SysLog Manager
- - Kiwi Syslog Daemon
- - MonitorWare Products
- - NetDecision LogVision
- - NTsyslog
- - Syslserve
- - syslog-ng Agent for Windows
- - Syslog Watcher