Linuxでは、ログファイルは、システム管理者がマシンの最終的な問題を特定するために使用するシステム機能に関するメッセージを含むファイルです。ログは、管理者が一定期間にシステムで発生したイベントを視覚化するのに役立ちます。通常、すべてのログファイルは / var / logの下に保存されます Linuxのディレクトリ。この場所には、システムイベントを記録するためのログファイル、セキュリティ関連のメッセージのためのログファイル、カーネル、ユーザー、またはcronジョブ専用の他のログファイルなど、さまざまなメッセージを保存するためのいくつかのタイプのログファイルがあります。ログファイルの主な目的は、システムの問題をトラブルシューティングすることです。 Linuxのほとんどのログファイルはrsyslogdサービスによって制御されます。 Linuxディストリビューションの新しいリリースでは、ログファイルもsystemd初期化プログラムの一部であるjournaldシステムサービスによって制御および管理されます。ジャーナルデーモンによって保存されるログはバイナリ形式で書き込まれ、主に揮発性であり、RAMおよび/ run / log /journal/のリングバッファに保存されます。ただし、ジャーナルサービスは、Syslogメッセージを永続的に保存するように構成することもできます。
Linuxでは、rsyslogサーバーは、サービスクライアントモデル方式で中央ログマネージャーを実行し、TCPまたはUDPトランスポートプロトコルを介してネットワーク経由でログメッセージを送信したり、ネットワークデバイス、サーバー、ルーター、スイッチ、またはログを生成する他のシステムまたは組み込みデバイス。
Rsyslogデーモンは、クライアントとサーバーとして同時に実行するように設定できます。サーバーとして実行するように構成されたRsyslogは、デフォルトのポート514 TCPおよびUDPでリッスンし、リモートシステムによってネットワーク経由で送信されるログメッセージの収集を開始します。クライアントとして、Rsyslogはネットワークを介して内部ログメッセージを同じTCPまたはUDPポートを介してリモートRyslogサーバーに送信します。
Rsyslogは、選択したプロパティとアクションに従ってsyslogメッセージをフィルタリングします。 rsyslogフィルターは次のとおりです。
- 施設または優先ファイラー
- プロパティベースのフィルター
- 式ベースのフィルター
施設 フィルタは、ログを生成するLinux内部サブシステムによって表されます。それらは以下のように分類されます:
- auth / authpriv =認証プロセスによって生成されたメッセージ
- cron =cronタスクに関連するログ
- デーモン =実行中のシステムサービスに関連するメッセージ
- カーネル =Linuxカーネルメッセージ
- メール =メールサーバーメッセージ
- syslog =syslogまたは他のデーモンに関連するメッセージ(DHCPサーバーはここにログを送信します)
- lpr =プリンタまたはプリントサーバーメッセージ
- local0-local7 =管理者の管理下にあるカスタムメッセージ
優先度または重大度 レベルは、以下に説明するようにキーワードと番号に割り当てられます。
- emerg =緊急– 0
- アラート =アラート– 1
- エラー =エラー– 3
- 警告 =警告– 4
- 通知 =通知– 5
- 情報 =情報– 6
- デバッグ =デバッグ–7つの最高レベル
アスタリスク( * )などの特別なRsyslogキーワードも利用できます。 )すべての
施設または優先順位を定義するための署名、なし 優先順位を指定しないキーワード、等号( = )その優先度と感嘆符(!)のみを選択します )これは優先順位を否定します。
syslogのアクション部分は、宛先で表されます。 声明。ログメッセージの宛先は、ファイルシステムに保存されているファイル、/ var / log /システムパスにあるファイル、名前付きパイプまたはFIFOを介して入力された別のローカルプロセスです。ログメッセージは、ユーザーに送信したり、ブラックホール(/ dev / null)に破棄したり、TCP/UDPプロトコルを介してstdoutまたはリモートsyslogサーバーに送信したりすることもできます。ログメッセージは、MySQLやPostgreSQLなどのデータベースに保存することもできます。
Rsyslogをサーバーとして構成する
Rsyslogデーモンは、ほとんどのLinuxディストリビューションに自動的にインストールされます。ただし、Rsyslogがシステムにインストールされていない場合は、サービスをインストールするために以下のコマンドのいずれかを発行できます>コマンドを実行するにはroot権限が必要です。
Debianベースのディストリビューションの場合:
sudo apt-get install rsyslog
CentOSのようなRHELベースのディストリビューション:
sudo yum install rsyslog
Rsyslogデーモンがシステムで起動されているかどうかを確認するには、配布バージョンに応じて、以下のコマンドを実行します。
systemdを使用する新しいLinuxディストリビューションの場合:
systemctl status rsyslog.service
initを使用する古いバージョンのLinuxの場合:
service rsyslog status
/etc/init.d/rsyslog status
rsyslogデーモンを起動するには、次のコマンドを発行します。
initを使用する古いバージョンのLinuxの場合:
service rsyslog start
/etc/init.d/rsyslog start
最新のLinuxディストリビューションの場合:
systemctl start rsyslog.service
サーバーモードで実行するようにrsyslogプログラムを設定するには、/etc/rsyslog.confのメイン構成ファイルを編集します。 このファイルで、以下のサンプルに示すように、次の変更を加えます。
sudo vi /etc/rsyslog.conf
514ポートでUDPログメッセージを受信できるようにするには、次の行のハッシュタグ(#)を削除して、検索してコメントを解除します。デフォルトでは、UDPポートはsyslogがメッセージを送受信するために使用します。
$ModLoad imudp
$UDPServerRun 514
UDPプロトコルはネットワークを介してデータを交換するのに信頼性がないため、TCPプロトコルを介してリモートサーバーにログメッセージを出力するようにRsyslogを設定できます。 TCP受信プロトコルを有効にするには、 /etc/rsyslog.confを開きます。 以下に示すように、ファイルを作成し、次の行のコメントを解除します。これにより、rsyslogデーモンがポート514のTCPソケットにバインドしてリッスンできるようになります。
$ModLoad imtcp
$InputTCPServerRun 514
rsyslogで両方のプロトコルを有効にして、同時に実行することができます。
rsyslogデーモンへのアクセスを許可する送信者を指定する場合は、有効なプロトコル行の後に次の行を追加します。
$AllowedSender TCP, 127.0.0.1, 10.110.50.0/24, *.yourdomain.com
また、受信ログを受信する前にrsyslogデーモンによって解析される新しいテンプレートを作成する必要があります。テンプレートは、ローカルRsyslogサーバーに着信ログメッセージを保存する場所を指示する必要があります。 $ AllowedSenderの直後にテンプレートを定義します 以下のサンプルに示すように線を引きます。
$template Incoming-logs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?Incoming-logs
& ~
kernファシリティによって生成されたメッセージのみをログに記録するには、以下の構文を使用します。
kern.* ?Incoming-logs
受信したログは上記のテンプレートによって解析され、ローカルファイルシステムの/ var / log /ディレクトリに、メッセージを生成したクライアントホスト名クライアント機能にちなんで名付けられたファイルに保存されます:%HOSTNAME% および%PROGRAMNAME% 変数。
以下の&〜 リダイレクトルールは、変数名で指定された上記のファイルにのみ着信ログメッセージを保存するようにRsyslogデーモンを構成します。それ以外の場合、受信したログはさらに処理され、/ var / log/syslogファイルなどのローカルログのコンテンツにも保存されます。
関連するすべてのログメッセージをメールに破棄するルールを追加するには、次のステートメントを使用できます。
mail.* ~
ファイル名の出力に使用できるその他の変数は、%syslogseverity%、%syslogfacility%、%timegenerated%、%HOSTNAME%、%syslogtag%、%msg%、%FROMHOST-IP%、%PRI%、%MSGID%、 %APP-NAME%、%TIMESTAMP%、%$ year%、%$ month%、%$ day%
Rsyslogバージョン7以降、新しい構成形式を使用してRsyslogサーバーでテンプレートを宣言できます。
バージョン7のテンプレートサンプルは、以下の行に示すようになります。
template(name="MyTemplate" type="string"
string="/var/log/%FROMHOST-IP%/%PROGRAMNAME:::secpath-replace%.log"
)
上記のテンプレートを作成できる別のモードは、次のようになります。
template(name="MyTemplate" type="list") {
constant(value="/var/log/")
property(name="fromhost-ip")
constant(value="/")
property(name="programname" SecurePath="replace")
constant(value=".log")
}
rsyslog構成ファイルに加えられた変更を適用するには、デーモンを再起動して新しい構成をロードする必要があります。
sudo service rsyslog restart
sudo systemctl restart rsyslog
リスニング状態のどのrsyslogソケットがDebianLinuxシステムで開かれているかを確認するには、 netstatを実行します。 root権限を持つコマンド。 grepなどのフィルターユーティリティを介して結果を渡します 。
sudo netstat –tulpn | grep rsyslog
着信接続を確立できるようにするには、ファイアウォールでRsyslogポートも開く必要があることに注意してください。
Firewalldがアクティブ化されたRHELベースのディストリビューションで、以下のコマンドを発行します。
firewall-cmd --permanent --add-port=514/tcp
firewall-cmd --permanent --add-port=514/tcp
firewall-cmd –reload
UFWファイアウォールがアクティブなDebianベースのディストリビューションでは、以下のコマンドを発行します。
ufw allow 514/tcp
ufw allow 514/udp
Iptablesファイアウォールルール:
iptables -A INPUT -p tcp -m tcp --dport 514 -j ACCEPT
iptables -A INPUT -p udp --dport 514 -j ACCEPT
Rsyslogをクライアントとして構成する
rsyslogデーモンをクライアントモードで実行し、ローカルログメッセージをリモートRsyslogサーバーに出力できるようにするには、 /etc/rsyslog.confを編集します。 ファイルを作成し、次のいずれかの行を追加します。
*. * @IP_REMOTE_RSYSLOG_SERVER:514
*. * @FQDN_RSYSLOG_SERVER:514
この行により、Rsyslogサービスはすべての内部ログをUDPポート514で離れたRsyslogサーバーに出力できます。
TCPプロトコルを介してログを送信するには、次のテンプレートを使用します。
*. * @@IP_reomte_syslog_server:514
すべての優先順位を持つcron関連のログのみをrsyslogサーバーに出力するには、以下のテンプレートを使用します。
cron.* @ IP_reomte_syslog_server:514
ネットワーク経由でRsyslogサーバーにアクセスできない場合は、サーバーがオンラインになるまでログをディスクバッファーファイルに一時的に保存するために、クライアント側の/etc/rsyslog.confファイルに以下の行を追加します。
$ActionQueueFileName queue
$ActionQueueMaxDiskSpace 1g
$ActionQueueSaveOnShutdown on
$ActionQueueType LinkedList
$ActionResumeRetryCount -1
上記のルールを適用するには、クライアントとして機能するためにRsyslogデーモンを再起動する必要があります。