暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

技术专栏 | RDS MySQL 的日志管理

西云数据云计算 2020-08-11
1161



本篇作者:喻亮
AWS 解决方案架构师,负责 AWS 云计算方案的咨询、设计和架构评估。在运维,DevOPS 和 DBA 方面有十余年经验,目前侧重于大数据领域的研究。




01

概述


数据库日志是分析研究业务状态的参考资料,也是发生事故或审计时,可追溯检查的最具可靠性和权威性的原始记录,是寻找问题根源的重要的证据之一。

RDS MySQL 的默认参数组和选项组并没有打开所有的日志选项。RDS 的控制台里提供了把日志直接输出到 CloudWatch 的方法,可以在 CloudWatch 里面直接分析日志。如果对于成本比较敏感,我们也可以通过 Lambda 定期把日志导出到 S3 做存储和分析。

本教程旨在帮助初次接触 RDS 并想导出日志的用户,包含以下几部分内容:
  • 通过 S3 存储桶做日志的生命周期管理
  • 开启 RDS(MySQL) 的日志
  • 通过 Lambda 转储 RDS 日志

02

通过 S3 存储桶

做日志的生命周期管理


Amazon S3 是一种对象存储服务,有行业领先的扩展性、数据可用性、安全性和性能。S3 不但能可靠又低成本的保存日志,还能通过生命周期管理功能自动归档或删除过期的日志。

03

创建 S3 存储桶


因为 S3 存储桶的名字是 DNS 的一部分,要起一个独一无二的名字,然后选择区域,创建存储桶。

阻止所有公有访问权限选项默认是选中的,强烈建议不要改这个地方,否则数据有被他人访问的风险。


04

为存储桶

设置生命周期管理策略


1)进入存储桶,在管理选项卡内点击+添加生命周期


2)设置生命周期规则

设立一个30-365为名的规则,30天后自动用智能分层功能降低存储成本,365天后删除日志。


05

开启 RDS(MySQL) 的日志


MySQL 有错误日志、慢查询日志、常规日志、审计日志和 Binlog。错误日志是默认打开的,慢查询日志和审计日志需要修改参数组才能打开,审计日志需要修改选项组才能打开。Binlog 默认不保存。


06
创建选项组
开启审计日志

注意:更换选项组或修改审计选项不会造成 RDS 重启,但可能造成连接中断。
支持 MySQL5.6和5.7 版本。

1)选择正确的引擎版本,创建选项组


2)给新创建的选项组增加审计插件选项

默认:保留9个审计文件,每个文件大小1MiB。请根据业务情况修改。

例:100个文件,每个100MiB(占10GiB)。
SERVER_AUDIT_FILE_ROTATIONS: 100
SERVER_AUDIT_FILE_ROTATE_SIZE: 100000000

选项的含义和取值范围可参考下面的链接

https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/Appendix.MySQL.Options.AuditPlugin.html



开启常规日志和慢查询日志,performance_schema 


注意:更换参数组需要重启 RDS,更改参数组中的参数可能需要重启 RDS。
开启常规日志和慢查询日志会影响 DB 的性能,尤其是 DB 负载很高查询很多的时候。因此请根据情况选择是否打开。

修改参数的影响请参考下面的链接:https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/USER_ModifyInstance.MySQL.html#USER_ModifyInstance.MySQL.Settings

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,建议打开。


07

在 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天以上。

下载 binlog 要用 mysqlbinlog 程序,详情请参照https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/USER_LogAccess.Concepts.MySQL.html


08

修改 RDS 实例使用新创建的

选项组和参数组(需要重启 RDS)



RDS 的 Configuration 页面是 pending-reboot 状态,RDS 重启后变成 in-sync 状态,设置生效。


09

通过 Lambda 转储 RDS 日志


AWS Lambda 无服务器计算服务,可运行代码来响应事件并自动管理底层计算资源。它非常适合在一天导出几次日志这样的场景来使用。

10

代码说明


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)日志会储存到指定的存储桶,路径结构如下
<bucket>–RDS–<rds_id>–<log_type>–<YYYY-MM-DD>


11

创建 Lambda 的步骤


1)从头创建 lambda 函数


这个步骤将创建一个拥有基本的 Lambda 执行权限的角色。后面第4)步中再给它添加 RDS 和 S3 的访问权限。

2)配置一个 CloudWatch Events,每小时的第10分钟自动执行 Lambda Schedule 可以用 Crontab 格式:cron(10 * ? * * *)


3)复制示例代码到函数代码框

Lambda 示例代码(NodeJS 12):
下面的代码里面,rdsid、bucket、region 三个变量需要根据实际情况修改。


粘贴和修改完代码以后,要点击一下画面右上角的保存按钮。

4)编辑基本设置中的内存和超时


权限设置,点击下方查看…角色的链接,为 RDS 和 S3 的相关操作附加策略。权限设置完成后再点保存。


先附加策略 AWSLambdaExecute


再添加内联策略


在 JSON 窗口粘贴以下内容,创建一个名为 LambdaDownloadRDSLog 的策略



5)测试 Lambda 函数

这个 Lambda 函数是定时驱动的,不需要传入参数。点击测试按钮后用默认事件模版创建一个测试事件,然后再测试。


执行结果的详细信息里面,会列出 describeDBLogFiles 获得的1小时内新生成的日志一览,downloadDBLogFilePortion 分页下载日志的结果,putObject 上传日志文件到 S3 存储桶的结果。


Lambda 函数测试通过以后,就可以保存下来。这个函数会被刚才配置的 CloudWatch 事件定期触发,自动转储日志到 S3 存储桶。

12

参考链接


1.S3对象生命周期管理:

https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/dev/object-lifecycle-mgmt.html

2.RDS MySQL 日志文件:

https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/USER_LogAccess.Concepts.MySQL.html

3.MariraDB 审核插件支持:

https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/Appendix.MySQL.Options.AuditPlugin.html

4.修改 RDS 数据库实例:

https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/USER_ModifyInstance.MySQL.html#USER_ModifyInstance.MySQL.Settings


5.在 Lambda 控制台配置函数

https://docs.aws.amazon.com/zh_cn/lambda/latest/dg/configuration-console.html

6.Node.js 中的 Lambda 函数处理程序

https://docs.aws.amazon.com/zh_cn/lambda/latest/dg/nodejs-handler.html

7.AWS Node.js SDK

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/RDS.html


* 本篇文章引用自 AWS Blog,点击下方阅读原文查看 AWS Blog 原文。

【相关推荐】


- END -

长按识别二维码,关注我们




关于西云数据(NWCD)

宁夏西云数据科技有限公司(简称“西云数据”)是 AWS 中国(宁夏)区域云服务的运营方和服务提供方作为西云数据的战略技术合作伙伴,AWS 向西云数据提技术、指导和专业知识。西云数据成立于 2015 年,是一家持有互联网数据中心服务和互联网资源协作服务牌照的云服务提供商。2017 年 12 月 12 日, 西云数据正式推出 AWS 中国(宁夏)区域云服务,现已开通 3 个可用区。西云数据市场销售总部设立于北京,在全国多地设有分支机构以服务全国各地的企业客户。
西云数据致力于将世界先进的 AWS 云计算技术带给中国客户,为客户提供优质、安全、稳定、可靠的云服务,全力支持中国企业和机构的创新发展。


关于 AWS

14年来,Amazon Web ServicesAWS)一直是世界上服务丰富、应用广泛的云服务平台。AWS 提供超过175项全功能的服务,涵盖计算、存储、数据库、联网、分析、机器人、机器学习与人工智能、物联网、移动、安全、混合云、虚拟现实与增强现实、媒体,以及应用开发、部署与管理等方面,遍及 24 个地理区域的 76 个可用区(AZ),并已公布计划在印度尼西亚、日本和西班牙新建 个 AWS 区域、个可用区。全球数百万客户,包括发展迅速的初创公司、大型企业和领先的政府机构都信赖 AWS,通过 AWS 的服务强化其基础设施,提高敏捷性,降低成本。欲了解 AWS 的更多信息,请访问:http://aws.amazon.com


文章转载自西云数据云计算,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论