RHEL系(CentOS)
---
syslogサーバ側(ログを集める側)の設定方法とsyslogサーバへログを転送する
クライアントサーバ側のsyslog設定も合わせて解説します。
利点
ご存じの通り、複数サーバのログ情報をsyslogサーバに集約して
まとめて管理します。
各サーバへのログインが不要で
このサーバのIDとパスワードが何だっけ?
というようなことを気にする必要がなくなり、本来の目的である
ログを確認することに専念できます。
ログを確認する時は、とりあえずsyslogサーバへログインすれば、
という考えになり、そこから、必要なサーバのログを探して調査
することができ、不要なサーバへのアクセスも減らすことができます。
複数あるサーバに1つずつログインしてログを確認していく必要が
なくなります。まとめて複数のサーバログを1回で確認することが
できます。
例えば
10台のサーバで冗長構成が組まれていた環境化で
どのサーバにログが出力されているか?
わからないって時に
1サーバ目でアクセスログを見つける時もあれば、
10サーバ目でアクセスログを見つける時とで
利用効率に差が発生します。
しかし
syslogサーバにログを集約することで
同じ利用効率で毎回1度の確認でOK。
rsyslogの「サーバ」と「クライン」共通の設定
設定する | rsyslogクライアント(ログを送信するサーバ) | 192.168.11.14 |
設定する | rsyslogサーバ(ログを受信するサーバ) | 192.168.11.17 |
■実施内容
ログの出力制限を解除します。
秒間にログが大量に出力されるとログがロストするのでそのリミットを解除します。
※細かい秒間設定は割愛して、今回は無制限の設定にします。
※共通設定は「journald.conf」と「rsyslog.conf」の修正になります。
共通の設定は、rsyslogサーバは必須でクライアントサーバも念のため必ず
同様に設定してください
共通設定1./etc/systemd/journald.conf の変更
1.journald.confファイルの修正
#vi /etc/systemd/journald.conf
RateLimitInterval = 0
RateLimitBurst = 0
「#(コメント)」を削除して上記の値に変更する
RateLimitInterval RateLimitBurst | 「RateLimitInterval」で指定した期間に「RateLimitBurst」以上の メッセージがが出力されるとメッセージが破棄されます。 「RateLimitInterval」「RateLimitBurst」いずれかを「0」にすると メッセージが破棄されないで無制限で記録されます。 ※両方「0」でもOK 例 RateLimitInterval=1s RateLimitBurst=10000 1秒間に10000件を超えるメッセージは破棄されます |
2.systemd-journaldを再起動
#systemctl restart systemd-journald
共通設定2./etc/rsyslog.conf の変更
1.rsyslog.confファイルの修正
#vi /etc/rsyslog.conf
ファイルの 末尾に追加
または
###「$ModLoad imjournal」の下の行あたりに追加
$imjournalRatelimitInterval 0
$imjournalRatelimitBurst 0
$imjournalRatelimitInterval $imjournalRatelimitBurst | 「$imjournalRatelimitInterval」で指定した期間に 「$imjournalRatelimitBurst」以上のメッセージがが 出力されるとメッセージが破棄されます。 「$imjournalRatelimitInterval」「$imjournalRatelimitBurst」 いずれかを「0」にすると メッセージが破棄されないで無制限で記録されます。 ※両方「0」でOK 例 $imjournalRatelimitInterval 600 $imjournalRatelimitBurst 20000 600秒間に20000件を超えるメッセージは破棄されます |
2.rsyslogを再起動
systemctl restart rsyslog.service
--補足情報--
メッセージログは、journaldを経由してrsyslogへ転送されます。
そのために両方の設定で
メッセージが破棄されないように設定する必要があります。
今回は、journald、rsyslogでメッセージが破棄されずに無制限にすることで設定を
合わせています。
メッセージの破棄をコントロールする場合は、journaldとrsyslogの設定を合わせない
とどちらかの設定でメッセージが予定していたものと違うメッセージ破棄になるので
注意して設定してください。
面倒であれば、無制限にしておけば無難かと思います。取りこぼしもなくなります。
rsyslogクライアントの設定
設定する | rsyslogクライアント(ログを送信するサーバ) | 192.168.11.14 |
ー | rsyslogサーバ(ログを受信するサーバ) | 192.168.11.17 |
■実施内容
ログの送信先(rsyslogサーバ側の情報)と送り方(TCP or UDP)を設定
クライアント設定1./etc/rsyslog.conf の変更
1.rsyslog.confファイルの修正
#vi /etc/rsyslog.conf
「# begin forwarding rule ###」の下あたりにある以下のコメント(#)を削除
$ActionQueueFileName fwdRule1 # unique name prefix for spool files
$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible)
$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
$ActionQueueType LinkedList # run asynchronously
$ActionResumeRetryCount -1 # infinite retries if host is down
その下あたりに以下を追加
local1.* @192.168.11.17:514 #UDP
を追加する
※$Action設定は「おまじない」と思ってコメントを解除する(説明は割愛)
※今回はUDPで送信するためTCPはコメントアウトします。
--補足情報--
■rsyslogサーバへ送信するログの指定方法
local1.*
※送信したいログは「ファシリティー」と「プライオリティー」の
組み合わせになりますので詳しい内容は割愛します。
例
messagesのログの場合
*.info;mail.none;authpriv.none;cron.none
mailのログの場合
mail.*
messagesのwaaring以上のログ(notice・info・debug以外のログを出力)
*.warrnig
■rsyslogサーバへUDPで送信する場合
@#UDP
■rsyslogサーバへTCPで送信する場合
@@#TCP
※UDPでログを送信する場合は@が1つ
※TCPは@@が2つになります。
■rsyslogサーバの指定と接続先通信ポート番号
192.168.11.17:514
※192.168.11.17がログを送信したいrsyslogサーバのIPアドレスを指定
※:514がログを送信するときのポート番号
->このポート番号は、ログを受信するrsyslogサーバ側のポート番号に合わせる
必要があるので注意
2.rsyslogを再起動
systemctl restart rsyslog.service
rsyslogサーバの設定
ー | rsyslogクライアントサーバ(ログを送信するサーバ) | 192.168.11.14 |
設定する | rsyslogサーバ(ログを受信するサーバ) | 192.168.11.17 |
■実施内容
rsyslogクライアントサーバからのログの受け取り設定、受信ポートの設定および
ログの保管方法を設定します
サーバ設定1./etc/rsyslog.conf の変更
1.rsyslog.confファイルの修正
#vi /etc/rsyslog.conf
####MODULES ####の下あたりにある以下のコメント(#)を削除
$ModLoad imudp
$UDPServerRun 514
※UDP514ポートで受信することを意味します。
※rsyslogのクライアント側のUDPポート番号と合わせておく必要があります。
次に、UDPのポート設定の下あたりに以下を追加
$AllowedSender UDP, 127.0.0.1, 192.168.11.0/24 #UDP
※192.168.11.0/24のセグメントでかつUDPでログを送信してくる
サーバからしかログを受け取らないように制限
※行を追加して複数設定することが可能
※rsyslogクライアント側のサーバを制限
--補足情報--
■TCPの場合
$ModLoad imtcp
$InputTCPServerRun 514
$AllowedSender TCP, 127.0.0.1, 192.168.11.0/24 #TCP
最後にログの保管方法の設定してrsyslog.confに追記します。
#vi /etc/rsyslog.conf
#### RULES ####前後で以下のように定義する
---
##### TEMPLATES ####
$template RemoteHost,"/var/log/hosts/%HOSTNAME%_%$year%%$month%%$day%_messages.log"
#### RULES ####
## Remote host logging
:fromhost-ip, !isequal, "127.0.0.1" -?RemoteHost
& stop
--補足情報--
2行のルールを追記(定義)することでログが保管されます。
$templateにて送信者(クライアント側)のログ保管場所(サーバ側)を
RemoteHostへ定義します。
保管場所はRemoteHost定義の後に記述した動的変数の保管場所になります。
次に
ログの送信者のIPアドレス(:fromhost-ip)が
「127.0.0.1(自分自身:rsyslogサーバ(受信側))」以外(!isequal)は
「-?RemoteHost」のログを保存します。
「-」は非同期でバッファに保存してから書き込みする意味で大量のログ出力
される場合にディスクのI/O負荷を軽減する
「?」は動的テンプレート時に付与します。
$templateで変数を利用してファイル名・パスが定義されているときに付与
する必要があります。
■複数サーバのログが1つのフォルダ内で管理されていた場合
$template設定例:その1(上記と同じ)
$template RemoteHost,"/var/log/hosts/%HOSTNAME%_%$year%%$month%%$day%_messages.log"
ログ検索方法
「192.168.0.14」をキーワードでフォルダ内のすべてのログをまとめて検索
#grep アクセスしたサーバIP ログファイル名
#grep 192.168.0.14 *-2020-09-12_messages.log
「*」:冗長化されたサーバのホスト名だったりIPアドレスにしておけば一括検索が可能
■複数サーバのログがフォルダ毎に管理されていた場合
$template設定例:その2
$template RemoteHost,"/var/log/hosts/%fromhost%/%$year%%$month%%$day%_messages.log"
ログ検索方法
「192.168.0.14」をキーワードでホスト名ごとにフォルダが分離されたログをまとめて検索
#grep アクセスしたサーバIP /用途フォルダ/サーバ名フォルダ/ログファイル名
#grep 192.168.0.14 /var/log/hosts/webap*/2020-09-12_messages.log
「*」:冗長化されたサーバの号機(webap01、webap02、webapXX・・・)にしておけば一括検索が可能
コメント