てしりこじり

しりがちいさいエンジニアがいるという

Amazon RDS(MySQL) の error.log や slowquery.log について

Aurora を使いたいのだが、まだまだ MySQL にもお世話になっている。
ログについて確認したのでまとめ。

概要

RDS(MySQL)では以下のログを出力可能。

  1. error.log
  2. general.log
  3. slowquery.log

デフォルトでテーブルに記録されるが ParamaterGroup で設定すればログファイルに記録される。
また、1はデフォルトで出力されており、2,3については ParamaterGroup で設定が必要。

保管場所

  • テーブルでもファイルでもRDS のストレージ内
  • どちらでも勝手にローテートされる

    • ファイルの場合
      • 1時間ごとにファイルが切り替わる
      • 24時間でローテートされる
      • 容量がストレージの2%を超えている場合、ローテート時に2%以下に収まるように削除されるので注意
    • テーブルの場合
      • ストレージの使用容量によってローテートタイミングが決まる
        • 使用容量 < 90%
          • ログ容量がストレージの 20% を超えた、もしくは ログ容量が10GBを超えたとき
            • 24時間毎にローテート
          • それまでは
            • 蓄積
        • 使用容量 > 90%
          • ログ容量がストレージの 10% を超えた、もしくは ログの合計が5GBを超えたとき
            • 24時間毎にローテート
          • それまでは
            • 蓄積
  • あれ?TABLE の方がいいんじゃない?

    • Console、APICLI からアクセスするにはFILEに出力する必要がある。お好みで。

出力設定

パラメータグループにて以下のパラメータを適宜設定する

パラメータ 設定 デフォルト 説明
slow_query_log 1 or 0 0 slowquery ログを出力する場合、1に設定
general_log 1 or 0 0 general ログを出力する場合、1に設定
long_query_time 0~ (秒数) 10 slowqueryログに出力させる時間を設定
log_queries_not_using_indexes 1 or 0 0 インデックスを使用しないすべてのクエリをスロークエリログに記録する場合、1に設定
log_output FILE/TABLE/NONE TABLE ログの出力先設定

確認方法(ファイルに出力した場合)

  1. Amazon RDS Console
  2. AWS Cli
  3. APISDK

AWS RDS Console で確認する

こちらの手順を参照

AWS Cli で確認する

RDS の以下のサブコマンドを利用する

  • describe-db-log-files
  • download-db-log-file-portion

なお download-db-log-file-portion では 一度に10,000行までしか取得できないので注意。

# まず LogFileName を確認
$ aws rds describe-db-log-files --db-instance-identifier HOGE

# 次に LogFile を表示(1文字づつ出るらしいので jq で加工する)
$ aws rds download-db-log-file-portion --db-instance-identifier HOGE --log-file-name FUGA/PIYO.log | jq -r ".LogFileData | add"

APISDK

こちらは カッツ…アイ!

ログの閲覧権限

  • IAMポリシーで制御可能
    • DescribeDBLogFiles
    • DownloadDBLogFilePortion
    • DownloadCompleteDBLogFile

※ DownloadCompleteDBLogFile がないとダウンロードに失敗した。


Amazon Web Services パターン別構築・運用ガイド

Amazon Web Services パターン別構築・運用ガイド