IDCF テックブログ

IDCF テックブログ

クラウド・データセンターを提供するIDCフロンティアの公式テックブログ

30分でできる!オブジェクトストレージへのログ保存(s3cmd + logrotate編)

※この記事は公開されてから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のインストール及び設定手順は前回のブログをご参照ください。

オブジェクトストレージのユーザーおよびバケット作成

オブジェクトストレージのユーザーおよびバケット作成も前回のブログをご参照ください。

/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等)のログをオブジェクトストレージに保存させることが可能です。

いかがでしたでしょうか?オブジェクトストレージへのログ保存が簡単にできることを感じていただけたら幸いです。

Copyright © IDC Frontier Inc.