Created
December 31, 2017 12:39
-
-
Save akira345/772d80d8e154e3ba1511c30d395e37f9 to your computer and use it in GitHub Desktop.
Node.JS勉強がてら作成した、RDSのログファイルを一括ダウンロードするスクリプトです。日付ごとにディレクトリを作成して格納します。 いろいろ動きが怪しいです。非同期処理良く分からん・・・
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var AWS = require('aws-sdk'); | |
require('date-utils'); | |
var db_instance_identifire = "mysql-db"; //RDSインスタンス名 | |
var log_base_path = "./log/"; | |
AWS.config.update({region:"us-east-1"}); | |
var rds = new AWS.RDS(); | |
//ログを取得 | |
var params = { | |
DBInstanceIdentifier: db_instance_identifire | |
}; | |
var fs = require("fs-extra"); | |
rds.describeDBLogFiles(params).eachPage( | |
//ファイル名一覧取得 | |
function(err, data) { | |
if (err) { | |
console.log(err,err.stack); | |
return; | |
}else if (data){ | |
data.DescribeDBLogFiles.forEach( | |
function(log){ | |
//タイムスタンプ取得 | |
var timestamp = log.LastWritten ; | |
//console.log(timestamp); | |
var str_timestamp = new Date(timestamp).toFormat("YYYYMMDD"); | |
//ディレクトリ作成 | |
var log_path = log_base_path + str_timestamp + "/"; | |
fs.mkdirs(log_path); | |
//余計なファイルを除外 | |
if (log.LogFileName == "mysqlUpgrade"){ | |
return; | |
} | |
//ファイル名はslowquery/mysql-slowquery.logのような形式なので、ファイル名だけ抜き出す。 | |
var log_file_name = log_path + log.LogFileName.split("/")[1]; | |
console.log(log_file_name); | |
//いったんファイル削除 | |
fs.unlink(log_file_name,function(err){ | |
if (err){ | |
if (err.code === 'ENOENT') { | |
console.log('not exists!!'); | |
} | |
return; | |
} | |
}); | |
//ログファイルの中身取得 | |
var additional_data_pending = true; | |
var marker = "0:0"; | |
var number_of_line = 0; | |
var params = { | |
DBInstanceIdentifier: db_instance_identifire, /* required */ | |
LogFileName: log.LogFileName, /* required */ | |
}; | |
rds.downloadDBLogFilePortion(params).eachPage( | |
function(err,data){ | |
if (err) { | |
console.log(err,err.stack); | |
return; | |
}else if (data){ | |
console.log("step"); | |
const util = require('util'); | |
if (util.isNull(data.LogFileData) != true){ | |
//中身があればファイルへ出力。長いファイルは一発で取れないので、追記で保存する。 | |
fs.appendFile(log_file_name,data.LogFileData,"utf-8",function(err){ | |
console.log("step2"); | |
if(err){ | |
console.log(err,err.stack); | |
}; | |
}); | |
//タイムスタンプ更新 | |
fs.utimes(log_file_name,timestamp,timestamp,function(err){ | |
console.log(err,err.stack); | |
}); | |
} | |
//additional_data_pending = data.AdditionalDataPending; | |
//marker = data.Marker; | |
} | |
} | |
); | |
} | |
); | |
} | |
} | |
); | |
console.log("ok"); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment