RDSのログを見たい
RDSのログ取得してSlowqueryなど見たい時ありますよね。
(見れるかは設定しだいですが...)
手軽に見る方法としてwebコンソール見たり、aws cli
のdownload-db-log-file-portion
を利用する方法があります。
aws cli
の使い方は単純で以下のようにすれば取得できます。
$ aws rds download-db-log-file-portion --db-instance-identifier [RDSの名前] --log-file-name [取得したいログ名]
全部表示できない
手軽に実行できるのですが、10000行?か超えるとそれより前のが切れて見れないようです。
ドキュメント読むと
In order to download the entire file, you need --starting-token 0 parameter:
と書いてあるのでつけて実行してみると...
$ aws rds download-db-log-file-portion --db-instance-identifier [RDSの名前] --log-file-name [取得したいログ名] --starting-token 0
Bad starting token: 0
エラーになって取得できない…
ぐぐってみたけどよくわからない…
別のオプションを試す
aws cli
にはjsonを読みこませるオプション(--cli-input-json
)があるのでjsonを使ってみようとおもいます。
ちなみに、jsonのskeletonを生成するオプションもあるのでそれを利用します。
$ aws rds download-db-log-file-portion --generate-cli-skeleton
{
"DBInstanceIdentifier": "",
"LogFileName": "",
"Marker": "",
"NumberOfLines": 0
}
パラメータ名全然違うな…
Marker
ってのがログの位置?らしいのでそこに0
を渡してやれば最初からとれるみたい。
すべてのログを取得するには
結果として私がログすべてを取得するのに利用した方法はこちら
$ aws rds download-db-log-file-portion --db-instance-identifier [RDSの名前] --log-file-name [取得したいログ名] --cli-input-json '{ "Marker": "0" }'
これで全部取れた…はず…
ちなみに利用していたバージョンは以下なのでそんなに古いわけではない?
boto3のdownloadDBLogFilePortionは、Maker=0を指定した場合でも、最初の1Mのみしか取得できない。(1M以上の残りのログについては、1Mで切られます。)
boto3で実装する場合は、残りのデータがあるかをAdditionalDataPendingで確認できるので、次のMarkerポジションで指定して、続きのログを取得するようにしています。
https://github.com/aws/aws-sdk-js/issues/1463
DownloadCompleteDBLogFile APIがあるのだが、現状botocore等のSDKに対応していないので、対応が待たれるところ。
$ aws --version
aws-cli/1.10.8 Python/2.7.10 Linux/4.4.8-20.46.amzn1.x86_64 botocore/1.3.30
もっと綺麗に取れる方法があれば教えていただければ幸いです。