案例中心

  • Home
  • 监控和警报 Amazon RDS for MySQL、Amazon RDS for MariaDB

监控和警报 Amazon RDS for MySQL、Amazon RDS for MariaDB

2026-01-27 14:36:31 60

监控和警报 Amazon RDS 的 DDL 和 DCL 更改

关键要点

使用 Amazon CloudWatch、Amazon RDS 性能洞察和增强监控,可以构建强大的监控和警报体系。DDL数据定义语言和 DCL数据控制语言变更需要特别的监控,以保障 RDS 数据库实例的可用性和稳定性。本文将介绍如何通过使用 AWS Lambda 和 Amazon SNS 集成,设置 MySQL、MariaDB 和 Aurora MySQL 兼容版本的审计功能。

在 Amazon RDS、MariaDB 和 Aurora MySQL 中有强大的监控和告警机制,但对于 DDL 和 DCL 的变更通知缺乏现成的解决方案。这些更改可能会影响数据库实例的可用性和稳定性。因此,按照本文的指导,我们将设置日志记录并集成其他 AWS 服务,从而实现 DDL 和 DCL 更改的通知。

解决方案概述

MariaDB 审计插件是一个开源插件,提供 MySQL 数据库引擎的审计功能。Amazon RDS 为 MySQL 数据库实例提供此插件,作为可添加到选项组的选项。该插件记录每个客户端会话的数据库活动,包括连接用户、执行的查询、访问的表和更改的服务器变量的信息。该审计插件已经开源,并可以在 GitHub 上找到 auditpluginformysql。

Aurora MySQL 兼容版利用先进的审计功能,使用自定义数据库集群参数组来捕获数据库活动。存储在日志文件中的记录会发布到 CloudWatch 日志以供处理,并通过 Lambda 解析发布的数据库审计日志,以发送通知至 Amazon SNS。

以下是我们解决方案架构的示意图:

要部署此解决方案,请按照以下步骤操作:

为 Amazon RDS 的 MySQL 或 MariaDB,使用选项组启用审计插件;对于 Aurora MySQL 兼容版,使用参数组启用高级审计。配置和启用审计以捕获 DDL 和 DCL 数据库活动。将 MySQL 审计日志发布到 CloudWatch 日志。 调整保留策略,以定义日志数据在日志组中存储的时间。创建一个 SNS 主题和订阅。创建一个 Lambda 函数,并添加触发器,通过 Lambda 函数解析数据库日志。

先决条件

请参考以下 AWS 管理控制台的数据库创建说明:

对于 Amazon RDS 的 MySQL,请参见 创建并连接到 MySQL DB 实例对于 Amazon RDS 的 MariaDB,请参见 创建并连接到 MariaDB DB 实例对于 Aurora MySQL 兼容版,请参见 创建并连接到 Aurora MySQL DB 集群

请按照以下说明启用 AWS Command Line InterfaceAWS CLI以便通过命令行与 AWS 服务进行交互:

安装,请参考 安装或更新 AWS CLI配置,请参考 新配置快速设置

启用 Amazon RDS for MySQL 的审计插件

默认的 Amazon RDS for MySQL 选项组未启用审计插件。由于默认选项组无法修改,需创建一个 自定义选项组,并 添加选项,将其应用于 RDS 实例。启用审计插件,请完成以下步骤:

在 Amazon RDS 控制台中,选择左侧导航栏中的 选项组。选择 创建组。输入组名称,例如:customoptiongrpmysql57。输入描述信息。选择 引擎 为 mysql。选择 主要引擎版本 为您使用的引擎版本57。选择 创建。在 选项组 页面,选择您的选项组,然后选择 添加选项。在 选项名称 中,选择 MARIADBAUDITPLUGIN。在 选项设置 部分,根据需要修改所需的参数值: 在 选项设置 中,使用 SERVERAUDITEVENTS。在 值 中,使用 QUERYDDL QUERYDCL。选择 立即应用 为 是。选择 添加选项。

以下是使用 AWS CLI 在 Amazon Linux 2 EC2 实例的终端窗口中创建选项组的命令:

bashaws rds createoptiongroup optiongroupname customoptiongrpmysql57 enginename mysql majorengineversion 57 optiongroupdescription MySQL 57 审计日志已启用

添加选项至选项组的命令:

bashaws rds addoptiontooptiongroup optiongroupname customoptiongrpmysql57 options [{OptionSettings[{NameSERVERAUDITEVENTSValueQUERYDDLQUERYDCL}]OptionNameMARIADBAUDITPLUGIN}] applyimmediately

启用 Aurora MySQL 兼容版的高级审计

启用 Aurora MySQL 兼容版的高级审计特性,须创建一个 自定义 DB 集群参数组,并启用高级审计。请按照以下步骤进行:

在 Amazon RDS 控制台中,选择 参数组。选择 创建参数组。在 参数组系列 中,选择 auroramysql57。在 类型 中,选择 DB 集群参数组。输入组名,例如:customauroramysqlcluster57。输入描述信息。选择 创建。在 参数组 页面中,选择参数组并从操作菜单中选择 编辑。在 参数 部分,按照需要修改参数值: 将服务器审计日志设置值修改为 1。将服务器审计事件的值设置为 QUERYDDL QUERYDCL。选择 保存更改。

以下是使用 AWS CLI 在 Amazon Linux 2 EC2 实例中的命令,用于创建参数组:

bashaws rds createdbclusterparametergroup dbclusterparametergroupname customauroramysqlcluster57 dbparametergroupfamily auroramysql57 description 启用审计的 Aurora MySQL 集群参数组

实现参数组中的审计启用:

bashaws rds modifydbclusterparametergroup dbclusterparametergroupname customauroramysqlcluster57 parameters ParameterName=serverauditloggingParameterValue=1ApplyMethod=immediate ParameterName=serverauditeventsParameterValue=QUERYDDLQUERYDCLApplyMethod=immediate

修改 Amazon RDS for MySQL或 MariaDB或 Aurora MySQL 兼容版

现在,需将自定义选项组分配给 Amazon RDS for MySQL DB 实例,或将集群参数组分配给 Aurora MySQL 兼容版 DB 实例。按照以下步骤操作:

在 Amazon RDS 控制台中,选择左侧导航栏中的 数据库。选择你的 DB 实例,并选择 修改。在 其他配置 下,在 数据库选项 部分,修改以下内容: 对于 Amazon RDS for MySQL 或 MariaDB,选择您创建的自定义选项组。对于 Aurora MySQL 兼容版,选择您创建的自定义参数组。

请注意,将此新参数组附加到 DB 实例需要重新启动该个 DB 实例。对于 Aurora MySQL 兼容版,修改集群后需要重启集群成员 DB 实例。

选择 继续。在 计划修改 下,选择 立即应用。选择 修改 DB 实例 或 修改集群。为验证更改,请在 Amazon Linux 2 EC2 实例的终端窗口中运行以下命令:

bashmysql h u pEnter password

MySQL [(none)]gt SHOW VARIABLES LIKE serverauditlogging Variablename Value serverauditlogging ON 1 row in set (000 sec)

MySQL [(none)]gt SHOW VARIABLES LIKE serverauditevents Variablename Value serverauditevents QUERYDDLQUERYDCL 1 row in set (000 sec)

监控和警报 Amazon RDS for MySQL、Amazon RDS for MariaDB

使用 AWS CLI 进行 Amazon RDS for MySQL 或 MariaDB 的修改与新选项组关联的命令如下:

bashaws rds modifydbinstance dbinstanceidentifier rdsmysql01 optiongroupname customoptiongrpmysql57 applyimmediately

验证的命令:

bashaws rds describedbinstances dbinstanceidentifier rdsmysql01

要修改 Aurora MySQL 兼容版以关联新参数组,使用以下代码:

bashaws rds modifydbcluster dbclusteridentifier auroramysql01 dbclusterparametergroupname customauroramysqlcluster57 applyimmediately

验证的命令:

bashaws rds describedbclusters dbclusteridentifier auroramysql01

得到的示例输出:

bashDBCLUSTERMEMBERS pendingreboot auroramysql01instance1 True

若要使更改生效,请重启 DB 集群成员,使用以下命令:

bashaws rds rebootdbinstance dbinstanceidentifier auroramysql01instance1

将 MySQL 审计日志发布到 CloudWatch 日志

启用审计选项后,需要将数据库日志发布到 CloudWatch 日志组。为此,请完成以下步骤:

在 Amazon RDS 控制台中,选择 数据库。选择您的 DB 实例并选择 修改。在 其他配置 下,在 日志导出 部分,选择 审计日志可选择性地,选择 错误日志、一般日志 和 慢查询日志。选择 继续。在 计划修改 下,选择 立即应用。选择 修改 DB 实例 或 修改集群。

使用 AWS CLI,对于 Amazon RDS for MySQL,运行以下命令:

bashaws rds modifydbinstance dbinstanceidentifier rdsmysql01 cloudwatchlogsexportconfiguration {EnableLogTypes[auditerrorgeneralslowquery]}

对于 Aurora MySQL 兼容版,使用以下代码:

bashaws rds modifydbcluster dbclusteridentifier auroramysql01 cloudwatchlogsexportconfiguration {EnableLogTypes[auditerrorgeneralslowquery]}

创建 SNS 主题

SNS 主题充当通信渠道。要创建 SNS 主题,请按以下步骤进行:

在 Amazon SNS 控制台中,选择左侧导航栏中的 主题。选择 创建主题。在 类型 中,选择 标准。在 名称 中,输入名称例如,lambdardsnotification。根据企业标准提供任何可选详细信息。选择 创建主题。

使用 AWS CLI,以下命令可在 Amazon Linux 2 EC2 实例的终端窗口中创建:

bashaws sns createtopic name lambdardsnotificationaws sns settopicattributes topicarn arnawssns[awsregion][youraccountnumber]lambdardsnotification attributename KmsMasterKeyId attributevalue KMSKEY

免费永久加速器苹果版

创建 SNS 订阅

要接收发布到 SNS 主题的消息,必须将一个端点订阅到该主题。当订阅端点到主题时,该端点会接收分配给主题的消息。可以选择多种 端点类型;若要与外部服务和产品集成,请使用 HTTPS 协议及集成 URL。为此示例,我们使用电子邮件作为协议及邮箱作为端点。要创建订阅,请完成以下步骤:

在 Amazon SNS 控制台中,选择左侧导航栏中的 订阅。选择 创建订阅。在 主题 ARN 中,选择之前创建的 SNS 主题。在 协议 中,选择 电子邮件。在 端点 中,输入接收事件通知的电子邮件地址。根据企业标准提供任何可选详细信息。选择 创建订阅。

使用 AWS CLI,在 Amazon Linux 2 EC2 实例的终端窗口中运行以下命令:

bashaws sns subscribe topicarn arnawssnsuseast100000lambdardsnotification protocol email notificationendpoint emailuser@domaincom

您应该会收到一封确认订阅的电子邮件。

选择 确认订阅。

创建 Lambda 函数并添加触发器

Lambda 函数的执行角色是允许该函数访问 AWS 服务和资源的 AWS 身份和访问管理 (IAM) 角色。在这里创建一个具有访问 CloudWatch 和 Amazon SNS 的权限的执行角色。创建函数时提供执行角色。当调用函数时,Lambda 会通过采用此角色自动为您的函数提供临时凭证。您无需在函数代码中调用 stsAssumeRole。为确保 Lambda 能正确采用您的执行角色,角色的信任策略必须指定 Lambda 服务主体lambdaamazonawscom作为受信任的服务。请完成以下步骤以创建您的策略和角色:

创建一个 IAM 角色,并使用以下信任策略 (lambdatrustRDSnotificationjson) 以允许 Lambda 执行角色:

json{ Version 20121017 Statement [ { Effect Allow Action [ stsAssumeRole ] Principal { Service [ lambdaamazonawscom ] } } ]}

创建角色:

bashaws iam createrole rolename lambdaroleRDSnotification assumerolepolicy file//lambdatrustRDSnotificationjson

添加以下内联策略 (lambdapolicyRDSnotificationjson),以允许 Lambda 访问所需资源:

json{ Version 20121017 Statement [ { Effect Allow Action [ logsCreateLogGroup snsPublish ] Resource [ arnawslogs[awsregion][youraccountnumber]loggroup[AuditLogGroup] arnawssns[awsregion][youraccountnumber][SNSTOPIC] arnawslambda[awsregion][youraccountnumber]function ] } { Effect Allow Action [ logsCreateLogStream logsPutLogEvents ] Resource [ arnawslogs[awsregion][youraccountnumber]loggroup/aws/lambda/ ] } { Effect

发表评论