※この記事は公開されてから1年半以上経過しています。情報が古い可能性がありますのでご注意ください。
こんにちは。R&D室の佐藤博之(Facebook)です。
前回の「30分でできる!オブジェクトストレージへのログ保存(fluentd編)」に続く、30分でできるログ保存シリーズ第2弾です。今回はLinux系OSログ(以下、OSログ)
・/var/log/cron,/var/log/maillog,/var/log/messages,/var/log/secure,/var/log/spooler
をs3cmdとlogrotateを使って、1日に1回、IDCフロンティア オブジェクトストレージに保存する手順を紹介します。
はじめに
Linux系OSにはログローテーション機能としてlogrotateが標準で用意されており、OSが出力する/var/log/messagesなどのログファイルをローテーションすることが可能になっています。アプリケーションによっては、インストール時にログファイルをlogrotateでローテーションするように自動設定するものもあります。logrotateはデフォルト設定の場合、4週間分のログファイルを保存するように設定されています。障害対応、監査目的等で、さらに長い期間ログを残す必要性がある場合、オブジェクトストレージにログを保存すれば、サーバー/ストレージ管理者の手を煩わせることがなく、そしてデータ容量を気にせずに長期間ログを安全に保存することができて、大変便利です。
今回の構成
前回に引き続きIDCフロンティア セルフクラウド上にサーバー(CentOS 6.5のLATESTのテンプレート)を起動し、そのサーバーで発生したOSログを、オブジェクトストレージに書き込んでみたいと思います。
それでは構築してみましょう。
サーバーの準備
セルフクラウド上にサーバーを準備します。CentOS 6.5のLATESTのテンプレートからサーバーを起動しましょう。そしてポートフォワーディング、ファイアウォールを設定し、sshでログインできるようにします。
s3cmdのインストール
s3cmdのインストール及び設定手順は前回のブログをご参照ください。
- 30分でできる!オブジェクトストレージへのログ保存(fluentd編) > 「s3cmdのインストール」
オブジェクトストレージのユーザーおよびバケット作成
オブジェクトストレージのユーザーおよびバケット作成も前回のブログをご参照ください。
- 30分でできる!オブジェクトストレージへのログ保存(fluentd編) > 「オブジェクトストレージのユーザーおよびバケット作成」をご参照の上、オブジェクトストレージのユーザ作成、s3cmd設定、バケット作成を完了させてください。
/etc/logrotate.d/syslogの設定変更
OSログのローテーションは/etc/logrotate.d/syslogで設定されます。設定変更の前に念のためバックアップを取得しておきます。
# cd /etc/logrotate.d/ # cp syslog syslog.org
/etc/logrotate.d/syslogでログのローテーションタイミングと世代数を設定します。今回は日次ローテーション、10世代管理とします。またlastaction処理を追記します。このlastaction処理により、ログローテーション後にs3cmdを使ってオブジェクトストレージへのログ保存が行われます。変更点を赤字で記載します。
# vi syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
daily
rotate 10
sharedscripts
postrotate
/bin/kill -HUP cat /var/run/syslogd.pid 2> /dev/null
2> /dev/null || true endscript lastaction HOST=`hostname` DATE=`date +%Y%m%d` DATEDIR=`date -I` for SYSLOG in $* ; do FILE=`basename ${SYSLOG}`; /usr/bin/s3cmd put -c /root/.s3cfg ${SYSLOG}-${DATE} s3://バケット名/${HOST}/${DATEDIR}/syslog/${FILE} > /dev/null 2>&1; done endscript }
ログローテーションのタイミング(/etc/cron.daily/logrotateがcronで実行されるタイミング)で、オブジェクトストレージにOSログが保存されたかを確認します。確認はs3cmdで実施します。
# s3cmd -c /root/.s3cfg ls s3://バケット名/ホスト名/YYYY-MM-DD/syslog/
バケット名「sample」、ホスト名「i-3429-61458-VM」、日付「2014-05-29」の場合は次のようになります。
# s3cmd -c /root/.s3cfg ls s3://sample/i-3429-61458-VM/2014-05-29/syslog 2014-05-29 08:24 3732 s3://sample/i-3429-61458-VM/2014-05-29/syslog/cron 2014-05-29 08:24 0 s3://sample/i-3429-61458-VM/2014-05-29/syslog/maillog 2014-05-29 08:24 403 s3://sample/i-3429-61458-VM/2014-05-29/syslog/messages 2014-05-29 08:24 219 s3://sample/i-3429-61458-VM/2014-05-29/syslog/secure 2014-05-29 08:24 0 s3://sample/i-3429-61458-VM/2014-05-29/syslog/spooler
同じ方法で、logrotateを使っているアプリケーション(/etc/logrotate.d/httpd等)のログをオブジェクトストレージに保存させることが可能です。
いかがでしたでしょうか?オブジェクトストレージへのログ保存が簡単にできることを感じていただけたら幸いです。
<関連記事>
- 30分でできる!オブジェクトストレージへのログ保存(s3cmd + logrotate編)
- 30分でできる!オブジェクトストレージへのログ保存(fluentd編)
- IDCFオブジェクトストレージサービス × ownCloud
- RiakとRiak CSを使って分散ストレージを構築