下記記事にてPython版AWSコマンドラインツールを用いたスクリプトを作成しました。

しかし、シェルスクリプトでは、かゆいところに手が届きづらいこともあり、今回Rubyを使ってみました。
対象のログは下記です。

スクリプトは、以下になります。

# cat download-db-log-file
#!/usr/bin/ruby

require 'rubygems'
require 'aws-sdk'

AWS.config({ :region => 'ap-northeast-1' })
db_instance_identifier = 'suzuki'
max_records            = 0
number_of_lines        = 0

client = AWS::RDS.new.client

log_files = client.describe_db_log_files({
    :db_instance_identifier => db_instance_identifier,
    :max_records            => max_records
})

log_files.describe_db_log_files.each do |log_file|

    additional_data_pending = true
    marker                  = '0:0'

    while additional_data_pending do

        log = client.download_db_log_file_portion({
            :db_instance_identifier => db_instance_identifier,
            :log_file_name          => log_file.log_file_name,
            :marker                 => marker,
            :number_of_lines        => number_of_lines
        })

        log_file_name = log_file.log_file_name.split("/")[1]
        File.open(log_file_name, "a") do |io|
            if !log.log_file_data.nil? then
                io.print(log.log_file_data)
            end
        end
        timestamp = log_file.last_written / 1000
        File::utime(timestamp, timestamp, log_file_name)

        additional_data_pending = log.additional_data_pending
        marker                  = log.marker

    end

end

実行すると、このようになります。

# ./download-db-log-file
# ll
合計 904
-rw-r--r-- 1 ...      0  5月 13 12:00 2013 mysql-error-running.log
-rw-r--r-- 1 ...   1915  5月 13 10:48 2013 mysql-error-running.log.2
-rw-r--r-- 1 ...   1356  5月 13 11:05 2013 mysql-error-running.log.3
-rw-r--r-- 1 ...      0  5月 13 13:20 2013 mysql-error.log
-rw-r--r-- 1 ...  29956  5月 13 13:23 2013 mysql-general.log
-rw-r--r-- 1 ...  80236  5月 13 12:05 2013 mysql-general.log.3
-rw-r--r-- 1 ...  69861  5月 13 13:00 2013 mysql-general.log.4
-rw-r--r-- 1 ...  94849  5月 13 13:23 2013 mysql-slowquery.log
-rw-r--r-- 1 ... 320669  5月 13 12:05 2013 mysql-slowquery.log.3
-rw-r--r-- 1 ... 306948  5月 13 13:05 2013 mysql-slowquery.log.4

また「Python版AWSコマンドラインツールでRDSのログ(すべてのファイル)をダウンロード」 にて課題となっていた
下記事項にも対応しています。

本件、”Marker”や”AdditionalDataPending”は考慮していません。 また、”AdditionalDataPending: true”、つまり未ダウンロードのログが残っている場合は、 そのログはダウンロードできません。

ダウンロードファイルのタイムスタンプも”Last Written”に揃えています。

次回はダウンロードしたファイルをS3にアーカイブしてみようと思います。

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら