第12章 Atomic rsyslog コンテナーイメージの使用

12.1. 概要

Red Hat Enterprise Linux rsyslog Atomic コンテナーイメージは、Red Hat Enterprise Linux Atomic (RHEL Atomic) Host で実行するために設計された Docker フォーマットのイメージです。

このコンテナーを使って、以下を実行する rsyslogd デーモンを起動できます。

  • Atomic Host のファイルシステムに保存される設定ファイルおよびログファイルを使用する。
  • ログメッセージをリモートログホストに送る機能を含む、標準の rsyslog 機能を提供するように設定する。

本書では、RHEL rsyslog コンテナーの取得および実行方法について説明します。

rsyslog サービスは Red Hat Enterprise Linux Atomic Host にインストールされていないため、rsyslog コンテナーが、そのサービスを Atomic Host に追加する方法を提供します。

以下は、rsyslog コンテナーのいくつかの機能です。

  • atomic コマンドからのインストール: atomic install コマンドを使用して rsyslog コンテナーを取得して実行すると、いくつかのことが生じます。コンテナー自体をレジストリーから取得し、rsyslog サービスが必要とするファイルおよびディレクトリーはホストに追加され、コンテナーは docker run で起動します。
  • ホストからの設定: rsyslog サービスで必要なファイルは Atomic Host に保存されるため、コンテナーの中に移す必要はありません。すべての設定はホストから実行できます。
  • サービスの再起動: 設定に変更した場合、変更を取得するには、コンテナーを停止し、削除し、再起動する必要があります (docker stop rsyslog; docker rm rsyslog; atomic run rhel7/rsyslog)。
  • スーパー特権コンテナー: rsyslog コンテナーを実行すると、そのコンテナーからホストシステムへの特権が付与されることに留意してください。コンテナーには RHEL Atomic Host への root アクセスがあり、特権付きの設定およびログファイルへのアクセスが行われます。

12.2. RHEL rsyslog コンテナーの取得および実行

RHEL Atomic Host で rsyslog Atomic コンテナーイメージを使用するには、以下の手順に従ってイメージのインストール、ロードを行ってから実行する必要があります。

  1. RHEL Atomic Host のインストール: RHEL Atomic Host をインストールし、設定するには、Red Hat Enterprise Linux Atomic Host ドキュメンテーション のページに一覧表示されているインストールガイドを参照してください。
  2. RHEL rsyslog コンテナーのインストール: RHEL Atomic Host にログインしたら、以下のコマンドを実行して RHEL rsyslog コンテナーを取得し、これを起動します。

    # docker pull rhel7/rsyslog
    # atomic install rhel7/rsyslog
    ...
    docker run --rm --privileged -v /:/host -e HOST=/host -e IMAGE=rhel7/rsyslog -e NAME=rsyslog rhel7/rsyslog /bin/install.sh
    Creating directory at /host//etc/pki/rsyslog
    Installing file at /host//etc/rsyslog.conf
    Installing file at /host//etc/sysconfig/rsyslog
  3. rsyslog コンテナーの起動: RHEL rsyslog コンテナーを実行するには、atomic コマンドを使用します。以下のコマンドを実行すると、適切なオプションと共に docker コマンドを使用してコンテナーを起動できます。

    # atomic run rhel7/rsyslog
    docker run -d --privileged --name rsyslog --net=host -v /etc/pki/rsyslog:/etc/pki/rsyslog -v /etc/rsyslog.conf:/etc/rsyslog.conf -v /etc/rsyslog.d:/etc/rsyslog.d -v /var/log:/var/log -v /var/lib/rsyslog:/var/lib/rsyslog -v /run/log:/run/log -v /etc/machine-id:/etc/machine-id -v /etc/localtime:/etc/localtime -e IMAGE=rhel7/rsyslog -e NAME=rsyslog --restart=always rhel7/rsyslog /bin/rsyslog.sh
    5803dbade82274158f0694a19fdcd7aac044a2656b2ce96d1aebdb0e30ad5ffd

    atomic コマンドを起動したら、ryslog コンテナーを起動するために実行する 'docker' コマンドを確認できます。rsyslogd コンテナーは、スーパー特権コンテナーとして実行されます。

  4. コンテナーが実行中であることの確認: 以下を入力して rsyslog コンテナーが実行中であることを確認します。

    # docker ps
    CONTAINER ID IMAGE                                                COMMAND             CREATED       STATUS        PORTS NAMES
    5803dbade822 registry.access.stage.redhat.com/rhel7/rsyslog:7.1-3 "/bin/rsyslog.sh"   9 minutes ago Up 9 minutes        rsyslog
    注記

    "registry.access.redhat.com/rhel7/rsyslog:7.1-3" は、ダウンロードしたレジストリーの名前と、取得したイメージのバージョンの両方が含まれたイメージの正式な名前です。コンテナー自体はローカルで実行されますが、単に rsyslog と呼ばれます。イメージとコンテナーでは、docker の動作方法が異なります。

  5. rsyslog サービスが機能していることの確認: メッセージが /var/log/messages ファイルに保存されたら、シェルで以下を入力します。

    # tail -f /var/log/messages
  6. ログメッセージの生成: 以下を入力してログメッセージを生成します。

    # logger "Test that rsyslog is doing great"

    rsyslog サービスが機能している場合は、メッセージが tail コマンドを実行しているシェルから表示されるはずです。Atomic Host で rsyslog サービスを使用できるようになりました。

12.3. rsyslog コンテナーを実行するためのヒント

以下は、RHEL rsyslog コンテナーの実行に関連するその他のいくつかの注意点です。

  • 永続的なログについて: デフォルトでは、Red Hat Enterprise Linux Atomic Host システムは、/etc/systemd/journald.conf で以下の値を設定し、journald を使用してローカルの root ファイルシステムで永続ログにログを記録します。

    Storage=persistent

    永続ログをローカルの rsyslog ログか、またはリモートの rsyslog サーバーのいずれかに設定するには、その行を以下のように変更することで、ローカルの journald 永続ログを無効にする必要がある場合があります。

    Storage=volatile

    さらに、RHEL Atomic Host システムを再起動します。この場合、journald は ramdisk にローカルログを維持しますが、ディスクには書き込みません。これにより、データが別の場所に安全に取得されている場合は、ローカルディスク IO で保存されます。rsyslog コンテナーは依然として journald ログを取得し、これを処理できます。

  • rsyslog 設定の変更: rsyslog コンテナーの設定を変更するたびに、実行中の rsyslog コンテナーを停止し、削除してから、新規のコンテナーを起動する必要があります。これを実行するには、以下のコマンドを実行します。

    # docker stop rsyslog
    # docker rm rsyslog
    # atomic run rhel7/rsyslog
  • ログローテーション: rsyslog コンテナーイメージの初期バージョンでは、rsyslog ログファイルのローカルローテーションをサポートしません。このサポートは将来のアップデートで追加されます。ただし領域に余裕がある場合は、rsyslog をローカルのログファイルで使用できます。

    rsyslog がリモートのログ収集ホストにのみログを送信するよう設定されている場合は、ローカルのログローテーションに 要件はありません。rsyslog でローカルおよびリモートのログ記録を設定する方法の詳細は、Red Hat Enterprise Linux システム管理者のガイド を参照してください。

  • ログを取得するのに十分な領域があることを確認する

    • 数多くのクラウド環境に理想的な設定は、リモートの rsyslog サーバーにログを記録するように rsyslog を設定する方法です。
    • ローカルストレージにログを記録する場合は、コンテナー内でログローテーションが発生していないことを確認します。今後のリリースでは、logrotate 設定ファイル (/etc/logrotate.d/ ディレクトリーのファイルや /etc/logrotate.conf ファイルなど) を編集して、rsyslog 設定にログファイルのサイズ制限を設定することをサポートします。この機能はまだサポートされていません。
    • とくに atomic host qcow2 イメージの root ファイルシステムで利用できる領域の大きさが制限されていることに注意してください。より大きな領域のプロビジョニングは、Red Hat Enterprise Linux Atomic Host の anaconda インストーラー ISO イメージを使ってインストールすることで実行できます。
  • イメージおよびコンテナーのライフサイクル

    Red Hat Enterprise Linux rsyslog Atomic コンテナーイメージの新規バージョンにアップグレードする必要がある場合、docker pull rhel7/rsyslog* を実行して新規イメージをダウンロードするだけでは不十分です。さらに、新規イメージから新規コンテナーを作成するには、再実行する前に、以下のコマンドを実行して既存の rsyslog コンテナーを明示的に削除する必要があります。

    # docker pull rhel7/rsyslog  If a new image downloads, run the following:
    # docker stop rsyslog
    # docker rm rsyslog
    # atomic install rhel7/rsyslog
    # atomic run rhel7/rsyslog