RDSのログの話

というわけで、懇親会で話題に上がったSqaleでやっているRDSのログの扱いを晒して、お茶を濁させて頂こうかと思います。

RDSってAWSのDBインスタンスのあれです。で、あれって当然、中にSSHでログインしたり出来ないので、ログ(一般ログ、スロークエリログ)をファイルで見ることができません、その代わりテーブルに書き込まれる(デフォルトではオフです)ので、それをselectすれば確認できます。しかし、この仕様だと下記の様な不都合が発生します。

  • 放っておくと容量を圧迫する
  • ローテート出来るが1世代のみ
  • スロークエリログを料理する既存のツールが使えない
    • mysqldumpslow
    • mk-query-digest など

なので、Sqaleではその問題を解消すべく運用ツールを作りました。

それが、rds-logrotate-and-upload-to-s3 です。

これはcronで実行することを想定していて、下記のことを行います。

  1. 特定AWSアカウントの全RDSインスタンスに対して
  2. slow_log, generic_logをローテート
  3. ログの内容をローカルの日付suffixをつけたファイルに書き出し
  4. スロークエリログについては、通常のファイルと同じフォーマットに変換と、mk-query-digestでの解析
  5. ログファイルを設定されたS3バケットに同期

スロークエリログのフォーマット変換部分は別のperlスクリプトに分離してあるので、単体でも使えます(パーサ部分はもともと何処かで見つけたpythonスクリプトが下敷きになっています。)。

公開するにあたって、結構コードを変えたんですが、ちゃんとデバッグしてないので、近い内にちゃんと仕上げます。pullreqくれてもいいです。というか下さい。