Skip to content

Instantly share code, notes, and snippets.

@akira345
Created December 31, 2017 12:39
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save akira345/772d80d8e154e3ba1511c30d395e37f9 to your computer and use it in GitHub Desktop.
Save akira345/772d80d8e154e3ba1511c30d395e37f9 to your computer and use it in GitHub Desktop.
Node.JS勉強がてら作成した、RDSのログファイルを一括ダウンロードするスクリプトです。日付ごとにディレクトリを作成して格納します。 いろいろ動きが怪しいです。非同期処理良く分からん・・・
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