Linuxシステムの安定運用には、効果的なログ管理が不可欠です。ログはシステムの動作状況を記録し、問題発生時の原因究明やパフォーマンス分析に役立ちます。Linuxでは、systemdに統合されたjournaldと、従来から広く使われているrsyslogが主要なログ管理ツールです。本稿では、これらのツールを用いたログ取得のパターンについて解説し、それぞれのメリット・デメリット、設定方法、セキュリティに関する考慮事項などを詳しく説明します。

結論

journaldは、systemdベースのシステムで標準的に利用されるログシステムであり、高速なバイナリ形式でログを記録し、効率的な検索・フィルタリング機能を提供します。一方、rsyslogは柔軟な設定が可能で、ログの転送や様々なフォーマットでの出力に対応しています。

rsyslogを併用すべきケースとしては、以下のような状況が考えられます。

  • ログをリモートサーバーに転送したい場合
  • ログを特定のフォーマットで出力したい場合
  • 従来のsyslog形式のログとの互換性を維持したい場合
  • journaldでは対応できない高度なログ処理を行いたい場合

journaldのみを使ったログ取得

journalctlコマンドの基本的な使い方

journalctlコマンドは、journaldに記録されたログを表示するためのコマンドです。基本的な使い方は以下の通りです。

journalctl

このコマンドを実行すると、システム全体のログが時系列順に表示されます。

ログのフィルタリング方法

journalctlコマンドには、様々なオプションを指定することでログをフィルタリングすることができます。

  • 特定のユニットのログを表示する
journalctl -u <ユニット名>
  • 特定の期間のログを表示する
journalctl --since "2023-10-26" --until "2023-10-27"
  • 特定のキーワードを含むログを表示する
journalctl -k <キーワード>
  • 優先度でフィルタリングする
journalctl -p err

ログの保存期間の設定方法

journaldのログの保存期間は、`/etc/systemd/journald.conf`ファイルで設定することができます。

  • 保存期間を1週間に設定する例
Storage=persistent
RuntimeMaxUse=1G
SystemMaxUse=1G

journaldのメリットとデメリット

メリット

  • 高速なバイナリ形式でのログ記録
  • 効率的な検索・フィルタリング機能
  • systemdとの統合による利便性

デメリット

  • 従来のsyslog形式との互換性がない
  • ログの転送やフォーマット変換が容易ではない

rsyslogも使ったログ取得

rsyslogの設定方法

rsyslogの設定ファイルは、`/etc/rsyslog.conf`です。このファイルに、ログの取得ルールと出力先を記述します。

  • `/var/log/messages`に全てのログを記録する例
*.*    /var/log/messages

ログの転送方法

rsyslogは、ログをリモートサーバーに転送することができます。リモートサーバーへの転送設定は、`/etc/rsyslog.conf`ファイルに記述します。

  • リモートサーバー 192.168.1.100 の `/var/log/remote.log` にログを転送する例
*.*    @192.168.1.100:514

ログのローテーション方法

rsyslogは、logrotateと連携してログのローテーションを行うことができます。logrotateの設定ファイルは、`/etc/logrotate.conf`です。

  • `/var/log/messages` を毎日ローテーションし、30世代まで保存する例
/var/log/messages {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
        systemctl restart rsyslog.service
    endscript
}

rsyslogとjournaldを併用するメリット

rsyslogとjournaldを併用することで、それぞれのメリットを活かしたログ管理システムを構築することができます。

  • journaldで高速なログ記録を行い、rsyslogでログの転送やフォーマット変換を行う
  • journaldで詳細なログを取得し、rsyslogで重要なログのみを抽出・転送する

具体的な設定例やコマンド例

journalctlコマンド例

  • 特定のサービスのログを表示する
journalctl -u sshd.service
  • 過去1時間のログを表示する
journalctl --since "-1 hour"
  • エラーログのみを表示する
journalctl -p err

rsyslog設定例

  • 特定のアプリケーションのログを`/var/log/app.log`に記録する
local7.*    /var/log/app.log
  • ログをリモートサーバーに転送する
*.*    @192.168.1.100:514

ログ取得のセキュリティに関する考慮事項

  • ログファイルへのアクセス権限を適切に設定する
  • ログの改ざんを防ぐために、ログの整合性を検証する
  • ログに機密情報が含まれる場合は、暗号化などの対策を講じる

ログ取得のパフォーマンスに関する考慮事項

  • ログの記録量を適切に調整する

  • ログの保存期間を適切に設定する
  • 高速なログ記録方式を採用する

ログの解析方法

ログの解析には、grep、awk、sedなどのコマンドラインツールや、Fluentd、Elasticsearchなどのログ管理プラットフォームを利用することができます。

参考資料

結論

Linuxにおけるログ管理は、システムの安定運用に不可欠です。journaldとrsyslogを適切に使い分けることで、効率的かつ安全なログ管理システムを構築することができます。本稿で紹介した内容を参考に、それぞれのシステム環境に最適なログ管理方法を検討してください。