概要
今回、業務の中にて新規にログ取得のファイルの作成を行うにあたり、
ログローテーションの設定を行った。
その際に設定ファイルの中身(設定方法)について触れる機会もあったので、
そのアウトプットとして本項目を記載します。
要件
・新規にスクリプトを実装するにあたり、以下内容を併せて用意したい
①スクリプト実行の中身がわかるログ
②①のログの一年間保持する設定(その後は削除)
③日次でスクリプトを定期実行させるための設定
実行環境
OS(ホスト):MacOS 10.15.4 Darwin Kernel Version 19.4.0
OS(仮想):Linux CentOS 7.9.2009
実装手順
要件満たすため、以下のような設定を実施していく。
①スクリプト実行の中身がわかるログ
→/var/log配下にスクリプト内容を出力するログファイルを用意
②①のログの一年間保持する設定(その後は削除)
→/etc/loglorate.d配下にログローテーションの設定ファイルを用意
③日次でスクリプトを定期実行させるための設定
→/etc/cron.d配下に用意したスクリプトを定期実行する設定ファイルを用意
※今回作成したスクリプトファイルの詳細については割愛
順々に実装の仕方とその中での技術的なまとめについて、記載していきます。
①スクリプト実行の中身がわかるログ
□ /var/log配下にスクリプト内容を出力するログファイルを用意する
今回、下記コマンドでログファイルを作成しました。
こちらに後述するcronの設定にて、スクリプト実行のログを残すようにします。
# touch /var/log/[ファイル名]
②①のログの一年間保持する設定(その後は削除)
□ /etc/logrorate.d配下へログローテーションの設定ファイルを配置する
こちらも新規に設定ファイルを作成しました。
この設定により①のファイルが1ヶ月ごとに分かれ、1年だけ保持するようにしています。
→具体的には、1ヶ月でログの切替りを行い、12世代まで管理する設定
# touch /etc/logrorate.d/[設定ファイル名]
~ファイル内設定後~
# cat /etc/logrorate.d/[設定ファイル名]
/var/log/[ファイル名]
{
create 0644
mothly
rotate 12
start 1
missingok
shredscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
上記、いくつか設定項目がありますが、肝になってくるのが、
・”create 0644”にてローテーション後、自動的に作成されるファイルの権限を指定
・”mothly”にてローテーションされる期間を指定
・”rotate 12”にて世代管理される数を指定
の3つとなり、要件に適した内容を実装するのに必要な設定となります。
※各設置値詳細は以下を参照
③日次でスクリプトを定期実行させるための設定
□ /etc/cron.d配下に用意したスクリプトを定期実行する設定ファイルを用意する
最後にスクリプトを定期実行するための設定を行います。
また、設定ファイル内にて①で作成したファイルへ、実行内容を出力するように指定をしてあげます。
# touch /etc/cron.d/[設定ファイル名]
~ファイル内設定後~
# cat /etc/cron.d/[設定ファイル名]
00 3 * * * root bash -xv /opt/bin/[スクリプト名] >> /var/log/[ファイル名] 2>&1
大まかな設定内容の詳細としては以下のようになります。
・毎日AM3:00に実行する
・root権限にてスクリプトを実行
・/var/log/[ファイル名]へ上書きしていく
また、”bash -xv”の実行結果は標準出力ではないので、”2>&1”を最後に追記しないと、
ファイルへ出力されません。
※詳細は以下記事が分かりやすかったです
全体を通して
簡単ですが、以上がログローテーションとcronの設定についてです。
実装内容は資格試験の学習内で触れたことはあったが、
実装は初だったので、調べながらやってなるほどねと改めて理解しながら行えたと思います。
個人的にはスクリプトのログ出力がうまくできず、苦戦しました
(”2>&1”を入れず実行していた)
付随して、標準出力、エラー出力の仕組みについても触れることができよかったです。
今後も実装でためになったことをどんどん発信していければと。