CentOS7でsyslogサーバ構築

今回はログサーバの作成方法をメモ程度に紹介します。
minimumインストールでも必要なパッケージは入っているので、基本的に紹介したコマンドの実行と設定ファイルの編集のみで可能なはずです・・・
(変更部分は赤枠で囲ってあります。)

1.大量のログが来ても破棄しないようjournaldの設定を変更する。
 →必要があればクライアント側にも設定

編集対象ファイルは「/etc/systemd/journald.conf」
編集対象ファイルは「/etc/rsyslog.conf

二つのファイルの編集が終わったらサービスを再起動
コマンド:systemctl restart systemd-journald

2.syslogの転送を受けられるようrsyslogの設定を変更する。

編集対象ファイルは「/etc/rsyslog.conf」

3.単純にサーバにログを送っただけだとログサーバのファイルにログが書き込まれてしまうので、それを除外する設定と特定のディレクトリに振り分ける設定を作成する。

編集対象ファイルは「/etc/rsyslog.conf」
[ファシリティ].none; の形式で記載する。(ファシリティはログ送信元の設定)
「/etc/rsyslog.d/」配下に〇〇〇.confの形式でファイルを作成(隠してる部分はIPアドレス)
上図のようにIPアドレスとファシリティで振り分け設定を記述
→このほか「$hostname」、「$programname」を条件に指定可能

4.ログローテート設定を作成(ログを定期的に圧縮、削除する設定)

「/etc/logrotate.d」配下にファイルを作成し(名前は何でもよい)以下のフォーマットで作成。

/var/log/remote/*/*.log { ←ローテートする対象ファイル(ワイルドカード指定可能)
missingok      ←ログファイルが存在しない場合でもエラーとしない
notifempty     ←ログファイルが空ならローテーションしない
daily        ←日次で実行
compress      ←圧縮。デフォルトではgzを圧縮コマンドとして利用
rotate 365      ←365世代の過去ファイルを保管
postrotate     ←ローテーション後コマンド(次行~endscriptまで)を実行
/bin/kill -HUP ‘cat /var/run/syslogd.pid 2> /dev/null’ 2> /dev/null || true ←ローテート後サービス再起動
endscript      ←コマンドの終わり
}

.log { ←ローテートする対象ファイル(ワイルドカード指定可能)
missingok      ←ログファイルが存在しない場合でもエラーとしない
notifempty     ←ログファイルが空ならローテーションしない
daily        ←日次で実行
compress      ←圧縮。デフォルトではgzを圧縮コマンドとして利用
rotate 365      ←365世代の過去ファイルを保管
postrotate     ←ローテーション後コマンド(次行~endscriptまで)を実行
/bin/kill -HUP ‘cat /var/run/syslogd.pid 2> /dev/null’ 2> /dev/null || true ←ローテート後サービス再起動
endscript      ←コマンドの終わり
}

5.ファイアウォールでsyslog通信許可しサービスを再起動して設定を有効化

通信許可コマンド
firewall-cmd –permanent –add-port=514/tcp
firewall-cmd –permanent –add-port=514/udp
firewall-cmd –reload

サービス再起動
systemctl restart rsyslog

以上でログサーバの構築は完了

最後にCentOSサーバからログサーバに転送する際の設定も紹介

「/etc/rsyslog.conf」を編集
@@ [IPアドレス]:514でTCP、 @ [IPアドレス]:514でUDPで通信

以上です。
今回は単純にrsyslogサービスでのログ転送ですが、実際に運用するとなるとAppatchだったら一回自前のsyslogにログを出すようにしてから転送したりとか、nginxだったら直接ログ転送する設定があったりとか、クライアントによって違うのでいろいろ調査が必要だったりします。

ひとまず、サーバ構築の手順については以上です。