APIログをlogrotateのみで収集する
Webサーバでapacheなどが出力するAPIログを、定期的に収集する事はよくありますよね。 シェルを用意してcronで回すのも面倒だったので、logrotateのみを使って収集を行ってみました。
logrotate
logrotateは放っておけば際限なく肥大してしまう各種ログファイルに対して、 世代ローテーションを行いN世代以前の破棄や、転送など、様々な処理が行える。 世代管理やサイズ制限などの機構を自前で持たないプログラムからのログを管理するのに使用する。
環境
OS |
---|
CentOS release 6.5 (Final) |
要件
- 昨日のAPIのログをストレージサーバ(xxx.xxx.xxx.xxx)に転送する
- ログは圧縮する
- ログのローテートは一日ごと
- ログのsuffixに日付を付ける
- 7日以前のログはWEBサーバから削除する(容量対策)
対象ログ |
---|
/var/log/httpd/api_access_log |
/var/log/httpd/api_error_log |
API用のlogrotate設定ファイルを作成する
logrotate設定ファイル |
---|
/etc/logrotate.d/httpd-api |
apacheをインストールすると自動でhttpdの設定ファイルが作成されます。 /etc/logrotate.d/httpd こちらにも設定が書いてあるので処理が被らないようにしましょう。 apacheのデフォルト設定が不要であればこちらを直接編集しても良いと思います。
/var/log/httpd/api_access_log { daily rotate 7 dateext create 0644 apache apache olddir /var/backup/log/api missingok sharedscripts compress lastaction /bin/mv /var/backup/log/api/api_access_log-`date '+%Y%m%d'`.gz /var/backup/log/api/api_access_log-`date '+%Y%m%d' -d '1days ago'`.gz endscript } /var/log/httpd/api_error_log { daily rotate 7 dateext create 0644 apache apache olddir /var/backup/log/api missingok sharedscripts compress postrotate /sbin/service httpd reload > /dev/null 2>/dev/null || true endscript lastaction /bin/mv /var/backup/log/api/api_error_log-`date '+%Y%m%d'`.gz /var/backup/log/api/api_error_log-`date '+%Y%m%d' -d '1days ago'`.gz /usr/bin/rsync -az -e ssh /var/backup/log/api/ user@xxx.xxx.xxx.xxx:/var/backup/log/api/ endscript }
- 昨日のログをgzip化してolddirに移動
- ログファイル名の日付が今日になっているので昨日に変更
- olddirをrsyncでストレージサーバに転送
- access_logとerror_logのolddirは同じなのでrsyncは一回のみ
各パラメータの詳細はこのサイトが参考になります。
ログローテーション(logrotate)を使ってみる ( httpd(apache)の設定例 ) http://server-setting.info/centos/loglotation.html
エラーチェック
下記コマンドを叩いてエラーが出ない事を確認します。
# logrotate -dv /etc/logrotate.d/httpd
- 作者: 大角祐介
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2015/06/06
- メディア: 大型本
- この商品を含むブログ (5件) を見る