空間日志代碼_【AWS 案例】RDS MySQL的日志管理[親測有效]敏捷云是AWS全球核心合作伙伴,我們致力于為企業提供云遷移、成本優化、安全合規及托管運維服務。敏捷云將與AWS一起為中國企業保駕護航,讓廣大用戶擁有優質的云端應用。今天我們與大家分享AWS的RDSMySQL的日志管理。數據庫日志是分析研究業務狀態的參考資料,也是發生事故或審計時,可追溯檢查的最具可靠性和權威性的原始記錄,是尋找問題根源的重要的證據…
敏捷云是AWS全球核心合作伙伴,我們致力于為企業提供云遷移、成本優化、安全合規及托管運維服務。敏捷云將與AWS一起為中國企業保駕護航,讓廣大用戶擁有優質的云端應用。
今天我們與大家分享AWS的RDS MySQL的日志管理。
數據庫日志是分析研究業務狀態的參考資料,也是發生事故或審計時,可追溯檢查的最具可靠性和權威性的原始記錄,是尋找問題根源的重要的證據之一。
RDS MySQL的默認參數組和選項組并沒有打開所有的日志選項。RDS的控制臺里提供了把日志直接輸出到CloudWatch的方法,可以在CloudWatch里面直接分析日志。如果對于成本比較敏感,可以通過Lambda定期把日志導出到S3做存儲和分析。
本案例旨在幫助初次接觸RDS并想導出日志的用戶,主要包含以下幾個內容:
通過S3存儲桶做日志的生命周期管理
開啟RDS(MySQL) 的日志
通過Lambda轉儲RDS日志
通過S3存儲桶做日志的生命周期管理
Amazon S3是一種對象存儲服務,有行業領先的擴展性、數據可用性、安全性和性能。S3不但能可靠又低成本的保存日志,還能通過生命周期管理功能自動歸檔或刪除過期的日志。
創建S3存儲桶
因為S3存儲桶的名字是DNS的一部分,要起一個獨一無二的名字,然后選擇區域,創建存儲桶。
阻止所有公有訪問權限選項默認是選中的,建議不要改這個地方,否則數據有被他人訪問的風險。
為存儲桶設置生命周期管理策略
1)進入存儲桶,在管理選項卡內點擊+添加生命周期
2)設置生命周期規則
設立一個30-365為名的規則,30天后自動用智能分層功能降低存儲成本,365天后刪除日志。
開啟RDS(MySQL) 的日志
MySQL 有錯誤日志、慢查詢日志、常規日志、審計日志和Binlog。錯誤日志是默認打開的,慢查詢日志和審計日志需要修改參數組才能打開,審計日志需要修改選項組才能打開。Binlog默認不保存。
MySQL RDS | 打開方法 | 默認保存周期 |
審計日志 | 修改選項組 | 文件達到1MiB后輪換,保留9個文件 |
錯誤日志 | 已默認打開 | 文件每小時輪換一次,保留24小時 |
慢查詢日志 | 修改參數組 | mysql.slow_log表,每24小時輪換 |
常規日志 | 修改參數組 | mysql.general_log表,每24小時輪換 |
binlog | 執行存儲過程 | 生成后盡快被刪除,不保存 |
創建選項組開啟審計日志
1)選擇正確的引擎版本,創建選項組
2)給新創建的選項組增加審計插件選項
默認:保留9個審計文件,每個文件大小1MiB。請根據業務情況修改。
例:100個文件,每個100MiB(占10GiB)。
SERVER_AUDIT_FILE_ROTATIONS: 100
SERVER_AUDIT_FILE_ROTATE_SIZE: 100000000
注意:更換參數組需要重啟RDS,更改參數組中的參數可能需要重啟RDS。
開啟常規日志和慢查詢日志會影響DB的性能,尤其是DB負載很高查詢很多的時候。
1)選擇正確的數據庫系列,創建參數組
2)編輯新創建的參數組
存儲日志到文件:log_output = FILE
開啟常規日志:general_log = 1
開啟慢查詢日志:slow_query_log = 1
long_query_time = 3.5(記錄超過3.5秒的查詢)
log_queries_not_using_indexes = 1 (記錄未使用索引的查詢)
開啟performance_schema:performance_schema = 1
RDS參數組沒有默認打開performance_schema,建議打開。
在RDS上保存Binlog
RDS的Binlog生成后會很快被刪除。為了故障調查等原因,建議保留一定時間。保留Binlog會占用RDS的磁盤空間。
連上RDS后可以用下面的存儲過程行設定Binlog的保存時間,比如24小時:
> call mysql.rds_set_configuration(‘binlog retention hours’,24);
查詢當前設置用下面的存儲過程
> call mysql.rds_show_configuration;
注:如果要RDS生成Binlog,還需要修改數據庫實例,設置備份保留期在1天以上。
修改RDS實例,使用新創建的選項組和參數組(需要重啟RDS)
RDS的Configuration頁面是pending-reboot狀態,RDS重啟后變成in-sync狀態,設置生效。
通過Lambda轉儲RDS日志
AWS Lambda是無服務器計算服務,可運行代碼來響應事件并自動管理底層計算資源。它非常適合在一天導出幾次日志這樣的場景來使用。
代碼說明
1)這段代碼利用API獲得RDS的日志狀態。其中describeDBLogFiles獲得1小時內新生成的日志一覽后依次處理各個日志。downloadDBLogFilePortion下載日志并壓縮后存儲到Lambda的/tmp臨時路徑,putObject上傳日志文件到S3存儲桶。
2)Lambda代碼最多運行15分鐘,處理能力與分配的內存大小有關。建議分配256MiB以上的內存并指定15分鐘的超時時間。如果RDS在業務繁忙時間生成的日志量太大,Lambda不能在15分鐘內處理完所有日志,就需要分配更大的內存。
3)Lambda的臨時路徑/tmp的容量是512MiB,以20%的壓縮比率計算,能處理最大2.5GiB的單個日志。
4)Lambda除了基本的執行權限以外,還需要內聯策略下載RDS日志,附加AWSLambdaExecute權限上傳到S3。
5)日志會儲存到指定的存儲桶,路徑結構如下
–RDS–––
創建Lambda的步驟
1)從頭創建lambda函數
這個步驟將創建一個擁有基本的Lambda執行權限的角色。后面第4步中再給它添加RDS和S3的訪問權限。
2)配置一個CloudWatch Events,每小時的第10分鐘自動執行Lambda
Schedule可以用Crontab格式:cron(10 * ? * * *)
3)復制示例代碼到函數代碼框
下面的代碼里面,rdsid、bucket、region三個變量需要根據實際情況修改。
const zlib =require(‘zlib’);
const fs =require(‘fs’);
const rdsid =”;
const bucket =”;
const AWS =require(‘aws-sdk’);
AWS.config.update({region: ‘cn-northwest-1’});
function listLog(context) {
let params = {
DBInstanceIdentifier: rdsid,
// filter for non 0-byte file rotated in 1 hour
FileLastWritten: Date.now()-3600000,
FileSize: ‘1’,
FilenameContains: ‘log.’
};
let request = new AWS.RDS().describeDBLogFiles(params);
request.on(‘success’,(response)=> {
console.log(response.data);
getRdsLog(context, response.data.DescribeDBLogFiles,’0′);
}).on(‘error’,(err)=> {
context.fail(err);
}).send();
}
function getRdsLog(context, logArray, marker) {
if(!logArray[0])return;
let logObj = logArray[0];
let s3name = logObj.LogFileName.slice(0,5)+’-‘+ rdsid +’-‘+ logObj.LastWritten +’.log.gz’;
let params = {
DBInstanceIdentifier: rdsid,
LogFileName: logObj.LogFileName,
Marker: marker
};
let request = new AWS.RDS().downloadDBLogFilePortion(params);
request.on(‘success’,(response)=> {
console.log(s3name +’ ‘+ response.data.Marker);
try {
fs.appendFileSync(‘/tmp/’+ s3name, zlib.gzipSync(response.data.LogFileData));
}
catch (err) {
context.fail(err);
};
if(response.data.AdditionalDataPending) {
getRdsLog(context, logArray, response.data.Marker);
}
else {
console.log(s3name +’ downloaded’);
logArray.shift();
putLog(context, s3name, logArray);
}
}).on(‘error’,(err)=> {
context.fail(err);
}).send();
}
function putLog(context, s3name, logArray) {
let params = {
Body: fs.readFileSync(‘/tmp/’+ s3name),
Bucket: bucket,
ContentType: ‘text/plain’,
ContentEncoding: ‘gzip’,
ServerSideEncryption: ‘AES256’,
Key: ‘RDS/’+ rdsid +’/’+ s3name.slice(0,5)+’/’+ new Date().toISOString().slice(0,10)+’/’+ s3name
};
let request = new AWS.S3().putObject(params);
request.on(‘success’,()=> {
console.log(s3name +’ uploaded to S3′);
fs.unlinkSync(‘/tmp/’+ s3name);
getRdsLog(context, logArray,’0′);
}).on(‘error’,(err)=> {
context.fail(err);
}).send();
}
粘貼和修改完代碼以后,要點擊一下畫面右上角的保存按鈕。
4)編輯基本設置中的內存和超時
權限設置,點擊下方查看…角色的鏈接,為RDS和S3的相關操作附加策略。權限設置完成后再點保存。
先附加策略AWSLambdaExecute
再添加內聯策略
在JSON窗口粘貼以下內容,創建一個名為LambdaDownloadRDSLog的策略
{
“Version”:”2012-10-17″,
“Statement”:[
{
“Effect”:”Allow”,
“Action”:[
“rds:DescribeDBLogFiles”,
“rds:DownloadDBLogFilePortion”
],
“Resource”:”*”
}
]
}
5)測試Lambda函數
這個Lambda函數是定時驅動的,不需要傳入參數。點擊測試按鈕后用默認事件模版創建一個測試事件,然后再測試。
執行結果的詳細信息里面,會列出describeDBLogFiles獲得的1小時內新生成的日志一覽,downloadDBLogFilePortion分頁下載日志的結果,putObject上傳日志文件到S3存儲桶的結果。
Lambda函數測試通過以后,就可以保存下來。這個函數會被剛才配置的CloudWatch事件定期觸發,自動轉儲日志到S3存儲桶。
文章資料來源AWS官方,由敏捷云編寫
圖片來自網絡,版權歸原作者所有
侵刪致歉
延伸閱讀:
【AWS ·創新科技】AWS CloudFront 根據客戶端IP做302重定向 【AWS ·創新科技】AWS CloudFront + Lambda@Edge 的切圖方案【AWS ·創新科技】使用AWS Lambda和Amazon Cloudwatch定時重啟Instance指南 F5的分布式多云活架構 F5 的公有云WEB安全與合規性 Fortinet SD-WAN的優勢與應用場景Fortinet :安全驅動網絡互聯,保駕數字化業務創新 Prisma Cloud落地中國,為本土云安全保駕護航 Prisma Cloud商業合規版的功能 【Veeam Backup for AWS】經濟高效且安全無 憂的 AWS 原生備份 【Veeam Backup & Replication】強大的現代數據保護解決方案
深圳敏捷云計算科技有限公司是一家專注于公有云增值服務的技術創新型公司,為企業客戶提供云遷移,培訓,開發,安全合規以及運維服務。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
(資料圖片)2022年8月LPR利率報價公布。據數據顯示,新一期貸款市場報價利率(LPR):1年期LPR為3.65%,5年期以上LPR為4.3%,分別較上月下調5個基點和15個基點,這也是5年期以上LPR今年第三次下調。據媒體稱,LPR下降后,多個地區的銀行分支行及網點首套房貸款利率隨5年期以上LPR進行下調。目前,北上廣深四大一線城市首套房貸款利率均降至5%以下,蘇州、呼和浩特等地首套房貸款利率...
(相關資料圖)在生活中,很多人都不知道循環小數的概念是法則的是什么意思,其實他的意思是非常簡單的,下面就是小編搜索到的循環小數的概念是法則的相關的一些知識,我們一起來學習下吧!循環小數,是從小數部分的某一位起,一個數字或幾個數字,依次不斷地重復出現的小數。在數的分類中,循環小數屬于有理數。兩數相除,如果得不到整數商,會有兩種情況:一種,得到有限小數。一種,得到無限小數。從小數點后某一位開始依次不斷...
螞蟻金服是干什么的?1、螞蟻金服是一家正規成立的企業集團,成立時間是2014年10月,全稱是螞蟻金融服務集團,后來改名叫“螞蟻集團”,是大家熟知的支付寶的母公司,其發展主要也就是起步于支付寶這個第三方移動支付平臺。2、螞蟻金服主要是做金融服務業的,以領先的金融科技,為消費者和小微企業提供數字化的生活服務。螞蟻金服和阿里巴巴什么關系?螞蟻金服與阿里巴巴集團是淵源頗深的關聯公司...