Amazon RDS のエラーログをCLIで取得する。

  • 3
    いいね
  • 0
    コメント

はじめに

Amazon RDS for MySQL においてエラーログを取得したいと思います。
一般ログとスローログに関してはテーブルへ出力させることができるため、mysqlコマンドでも取得できるようになります。ですがエラーログはできないみたいです。
MySQL エラーログにアクセスする
なのでAWS CLIを利用することで取得したいと思います。

ログファイルの確認

まずはログを確認します。RDSのログを確認するには describe-db-log-files を使います。

ログファイル一覧
$ aws rds describe-db-log-files --db-instance-identifier rds001
{
    "DescribeDBLogFiles": [
        {
            "LastWritten": 1491455703000, 
            "LogFileName": "error/mysql-error-running.log", 
            "Size": 19425
        }, 
        {
            "LastWritten": 1491436546000, 
            "LogFileName": "error/mysql-error-running.log.0", 
            "Size": 63825
        }, 
        {
            "LastWritten": 1491440100000, 
            "LogFileName": "error/mysql-error-running.log.1", 
            "Size": 62255
...

ですが、JSON形式だと見づらいのですね。 --filename-contains error とすることで error ログのみを抽出することができ、さらに --output text で一覧表示させることができます。

エラーログ一覧
$ aws rds describe-db-log-files --db-instance-identifier rds001 --filename-contains error --output text
DESCRIBEDBLOGFILES  1491469200000   error/mysql-error-running.log   0
DESCRIBEDBLOGFILES  1491436546000   error/mysql-error-running.log.0 63825
DESCRIBEDBLOGFILES  1491440100000   error/mysql-error-running.log.1 62255
DESCRIBEDBLOGFILES  1491404111000   error/mysql-error-running.log.15    72150
DESCRIBEDBLOGFILES  1491407728000   error/mysql-error-running.log.16    72150
DESCRIBEDBLOGFILES  1491411306000   error/mysql-error-running.log.17    70300
DESCRIBEDBLOGFILES  1491414901000   error/mysql-error-running.log.18    71225
DESCRIBEDBLOGFILES  1491418516000   error/mysql-error-running.log.19    68450
DESCRIBEDBLOGFILES  1491443708000   error/mysql-error-running.log.2 62620
DESCRIBEDBLOGFILES  1491422125000   error/mysql-error-running.log.20    67525
DESCRIBEDBLOGFILES  1491425715000   error/mysql-error-running.log.21    65675
DESCRIBEDBLOGFILES  1491429300000   error/mysql-error-running.log.22    65675
DESCRIBEDBLOGFILES  1491432938000   error/mysql-error-running.log.23    65675
DESCRIBEDBLOGFILES  1491447334000   error/mysql-error-running.log.3 61050
DESCRIBEDBLOGFILES  1491450949000   error/mysql-error-running.log.4 61050
DESCRIBEDBLOGFILES  1491454500000   error/mysql-error-running.log.5 59200
DESCRIBEDBLOGFILES  1491458107000   error/mysql-error-running.log.6 59200
DESCRIBEDBLOGFILES  1491461705000   error/mysql-error-running.log.7 58275
DESCRIBEDBLOGFILES  1491465304000   error/mysql-error-running.log.8 56425
DESCRIBEDBLOGFILES  1491468300000   error/mysql-error-running.log.9 45012
DESCRIBEDBLOGFILES  1491491100000   error/mysql-error.log   0

エラーログは mysql-error-running.log という名前で1時間ごとに出力されます。

エラーログの取得

では実際にエラーログの中身を見て見ます。
エラーログは download-db-log-file-portion コマンドを使います。

エラーログ
$ aws rds download-db-log-file-portion --db-instance-identifier rds001 --log-file-name error/mysql-error-running.log.6

ここでも --output text として通常のログと同じように出力させたいと思います。

エラーログ
$ aws rds download-db-log-file-portion --db-instance-identifier rds001 --log-file-name error/mysql-error-running.log.6 --output text
2017-04-06 04:55:08 3372 [Note] Error reading relay log event: slave SQL thread was killed
2017-04-06 04:55:08 3372 [Note] Slave I/O thread killed while connecting to master
2017-04-06 04:55:08 3372 [Note] Slave I/O thread exiting, read up to log 'db001-bin.000002', position 353
2017-04-06 04:55:09 3372 [Warning] Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information.
2017-04-06 04:55:09 3372 [ERROR] Slave I/O: error connecting to master 'repl@10.0.0.205:3306' - retry-time: 60  retries: 1, Error_code: 2003
2017-04-06 04:55:09 3372 [Note] Slave SQL thread initialized, starting replication in log 'db001-bin.000002' at position 353, relay log '/rdsdbdata/log/relaylog/relaylog.001308' position: 236
...

これでエラーログの確認ができました。

ログについて

  • エラーログは mysql-error.log ファイルへ書き込まれる。
  • mysql-error.logは5分ごとにフラッシュされる。
  • フラッシュされた内容は mysql-error-running.log へ追加される。
  • mysql-error-running.log は1時間ごとにローテーションされる。
  • ローテーションされたログは24時間保持される。
  • 各ログファイルはUTC時間がファイル名に付加される。(ローテーションされたUTC時刻の%H)
  • エラーログへの書き込みは 「起動時」、「シャットダウン時」、「エラー検出時」にのみ行われる。

ポリシー

CLIで取得する際のポリシーです。

policy
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1491493558000",
            "Effect": "Allow",
            "Action": [
                "rds:DescribeDBLogFiles",
                "rds:DownloadCompleteDBLogFile",
                "rds:DownloadDBLogFilePortion"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
Actions Description
DescribeDBLogFiles DBインスタンスのログをリストする。
DownloadCompleteDBLogFile 指定したデータベースログファイルの内容をダウンロードする。
DownloadDBLogFilePortion 指定されたログファイルの全部または一部をダウンロードする(最大1 MBのサイズ)。

おわりに

CLIを利用するとエラーログも取得できるようになります。ですが、やっぱりスローログや一般ログと同じようにtableへ出力できるようになって欲しいですね。。。