LoginSignup
2
3

More than 3 years have passed since last update.

AWS CLI で RDSのログを最初からすべて取得する

Last updated at Posted at 2016-07-26

RDSのログを見たい

RDSのログ取得してSlowqueryなど見たい時ありますよね。
(見れるかは設定しだいですが...)

手軽に見る方法としてwebコンソール見たり、aws clidownload-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

もっと綺麗に取れる方法があれば教えていただければ幸いです。

2
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3