リモート ロギング
標準のシステム ログ管理構成では、ログ ファイルが毎週ローテーションされ、4 ローテーションの間保持されます。多くの場合、ログをデフォルトの 4 週間よりも長く維持することが望ましい場合があります。特に、月に 1 回だけ実行される月末決算などのタスクに関連するシステム パフォーマンスの傾向を確立する場合はそうです。専用の大容量ストレージを備えたリモート ログ ホストにログ メッセージを送信することにより、管理者は、ログがディスク ストレージを過剰に消費しないようにするためのデフォルトのログ ローテーション構成を変更せずに、システムのシステム ログの大規模なアーカイブを維持できます。
システム ログ メッセージの集中収集は、システムの状態を監視したり、問題を迅速に特定したりするのにも非常に役立ちます。また、システムが壊滅的なハード ドライブ障害やその他の問題に見舞われ、ローカル ログが使用できなくなった場合に備えて、ログ メッセージのバックアップ場所も提供します。このような状況では、中央ログ ホストにあるログ メッセージのコピーを使用して、問題の原因となった問題の診断に役立てることができます。
標準化されたシステム ロギングは、rsyslog によって Red Hat Enterprise Linux 7 に実装されています。 サービス。システム プログラムは、ローカルの rsyslogd に syslog メッセージを送信できます これらのメッセージを /var/log のファイルにリダイレクトします 、リモート ログ サーバー、または構成ファイル /etc/rsyslog.conf の設定に基づくその他のデータベース .
ログ メッセージには、分類に使用される 2 つの特徴があります。ログ メッセージのファシリティは、メッセージのタイプを示します。一方、優先度は、メッセージに記録されたイベントの重要性を示します。
Syslog 優先レベル
優先度 | 意味 |
---|---|
出現 | システムが使用できません |
アラート | 早急な対応が必要です |
クリティカル | 危機的状況 |
エラー | エラー状態 |
警告 | 警告条件 |
お知らせ | 正常だが重大な状態 |
情報 | 情報メッセージ |
デバッグ | メッセージのデバッグ |
中央ログ ホストの構成
中央ログ ホストの実装には、ログ メッセージの送信元のリモート システムとメッセージを受信する中央ログ ホストの 2 種類のシステムで rsyslog サービスを構成する必要があります。中央ログ ホストでは、リモート ホストからのログ メッセージを受け入れるように rsyslog サービスを構成する必要があります。
リモート ログを受け入れるように中央ログ ホストで rsyslog サービスを構成するには、/etc/rsyslog.conf のモジュール セクションで TCP または UDP 受信行のコメントを外します。 ファイル。
UDP 受信の場合:
# Provides UDP syslog reception $ModLoad imudp.so $UDPServerRun 514
TCP 受信の場合:
# Provides TCP syslog reception $ModLoad imtcp.so $InputTCPServerRun 514
TCP はより信頼性の高いリモート ログ メッセージの配信を提供しますが、UDP はさまざまなオペレーティング システムとネットワーク デバイスでサポートされています。
注意 :syslog メッセージの単純な TCP 転送はかなり広く実装されていますが、まだ標準化されていません。現在、ほとんどの実装では、従来の rshd ポートであるポート 514/TCP が使用されています。システムに rsh-server パッケージがインストールされていて、古い安全でない rshd サービスを使用している場合、プレーンな TCP syslog 受信にポート 514/TCP を使用すると競合します。 $InputTCPServerRun の設定を変更して、別のポートを使用するようにログ サーバーを構成します。
/etc/rsyslog.conf に含まれるルールは、単一ホストでのメッセージのロギングに対応するようにデフォルトで構成されています。そのため、メッセージを機能ごとにソートしてバンドルします。たとえば、メール メッセージは /var/log/maillog に集められますが、
crond デーモンによって生成されたメッセージは /var/log/cron に統合され、各タイプのメッセージを見つけやすくなります。
ファシリティによるメッセージのソートは、単一のホストでは理想的ですが、中央ログ ホストでは望ましくない結果になります。これは、異なるリモート ホストからのメッセージが互いに混ざり合う原因となるためです。中央のログ ホストでは、通常、リモート システムからのログ メッセージを互いに分離しておくことがより最適です。この分離は、rsyslog のテンプレート機能を使用して動的ログ ファイル名を定義することで実現できます。
テンプレートは /etc/rsyslog.conf で定義され、動的ログ ファイル名でルールを生成するために使用できます。テンプレート定義は $template で構成されます ディレクティブ、テンプレート名、テンプレート テキストを表す文字列が続きます。テンプレート テキストは、ログ メッセージのプロパティから代入された値を使用することによって動的にすることができます。たとえば、さまざまなシステムからの cron syslog メッセージを中央ログ ホスト上のさまざまなファイルに送信するには、次のテンプレートを使用して、HOSTNAME に基づいて動的ログ ファイル名を生成します。 各メッセージのプロパティ:
$template DynamicFile,"/var/log/loghost/%HOSTNAME%/cron.log"
テンプレート定義を使用して作成された動的ファイル名は、次のようにルール内のテンプレート名で参照できます:
cron.* ?DynamicFile
非常に詳細なロギングを実行するシステムでは、パフォーマンスを向上させるために、各書き込み操作の後にログ ファイルの同期をオフにすることが望ましい場合があります。ロギング ルールでログ ファイル名の前にマイナス (-) 記号を付けることで、毎回のロギング後のログ ファイルの同期を省略できます。ただし、パフォーマンスの向上と引き換えに、書き込み試行の直後にシステムがクラッシュした場合、ログ データが失われる可能性があります。
次に、テンプレートを使用して動的ログ ファイル名を生成する別の例を示します。この例では、HOSTNAME を参照して、リモート ログ メッセージをホスト名とファシリティの値で並べ替えます。 および syslogfacility-test プロパティ。ログ メッセージは動的に生成されたログ ファイル名に書き込まれ、書き込み操作後に同期は実行されません。
$template DynamicFile,"/var/log/loghost/%HOSTNAME%/%syslogfacility-text%.log" *.* -?DynamicFile注意 :rsyslog によって利用可能になる syslog メッセージ プロパティの完全なリストは、
rsyslog.conf(5) マニュアル ページの利用可能なプロパティ セクションにあります。
syslog の受信が有効になり、ホストごとにログを分離するための目的のルールが作成されたら、構成の変更を有効にするために rsyslog サービスを再起動します。さらに、受信 syslog トラフィックを許可するために必要な UDP および/または TCP ファイアウォール ルールを追加してから、firewalld をリロードします。 .
# systemctl restart rsyslog # firewall-cmd --add-port=514/udp --permanent # firewall-cmd --add-port=514/tcp --permanent # firewall-cmd --reload
新しいログ ファイルが作成されると、ログ ホストの既存のログ ローテーション スケジュールに含まれない場合があります。これを修正して、新しいログ ファイルが管理不能なサイズにならないようにする必要があります。たとえば、前の例の新しいログ ファイルをログ ローテーションに含めるには、次のエントリを /etc/logrotate.d/syslog のログ ファイルのリストに追加します。
/var/log/loghost/*/*.log
中央ログ ホストへのログのリダイレクト
リモート ログを受け入れるように中央ログ ホストを構成すると、リモート システムで rsyslog サービスを構成して、ログを中央ログ ホストに送信できます。ログをリモート rsyslog サーバーに送信するようにマシンを構成するには、/etc/rsyslog.conf ファイルの rules セクションに行を追加します。ファイル名の代わりに、リモート rsyslog サーバーの IP アドレスを使用します。 UDP を使用するには、IP アドレスの前に @ 記号を 1 つ付けます。 TCP を使用するには、先頭に 2 つの @ 記号 (@@) を付けます。
たとえば、info 以上の優先度を持つすべてのメッセージを UDP 経由で loghost.example.com に送信するには、次の行を使用します:
すべてのメッセージを TCP 経由で loghost.example.com に送信するには、次の行を使用します:
*.* @@loghost.example.com
オプションで、ログのホスト名に :PORT を追加できます ここで、PORT はリモート rsyslog サーバーが使用しているポートです。ポートが指定されていない場合、デフォルトのポート 514 が想定されます .
ルールを追加したら、rsyslog サービスを再起動し、logger コマンドを使用してテスト メッセージを送信します。
[root@logclient ~]# logger "Test from logclient"
リモート サーバーのログをチェックして、メッセージが受信されたことを確認してください。