share facebook facebook2 twitter menu hatena pocket slack

2013.06.04 TUE

RubyでRDSのログ(すべてのファイル)をダウンロード

鈴木 宏康

WRITTEN BY鈴木 宏康

下記記事にて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)監修のもと掲載しています。
元記事は、こちら

鈴木 宏康

鈴木 宏康

愛知県生まれ。東京工業大学大学院修士課程修了。在学時より、ベンチャー企業でインターネットに関する業務に携わり、現在はクラウド(主にAmazon Web Services)上での開発・運用を軸とした事業の、業務の中心として活躍。