如何获取AWS Aurora Serverless V2单实例中各数据库的资源使用指标?
Aurora Serverless V2(MySQL 8)单数据库级监控方案
可行,但CloudWatch默认仅提供实例级指标,要获取单个数据库的资源占用情况,需要结合MySQL内置工具和自定义CloudWatch指标实现,具体方法如下:
1. 利用MySQL内置Schema实时查询库级指标
Aurora兼容MySQL的Performance Schema和Information Schema,可直接查询单个数据库的连接数、查询统计、资源消耗数据:
(1)查询单个数据库的当前连接数
SELECT DB AS database_name, COUNT(*) AS active_connections FROM information_schema.processlist WHERE DB IS NOT NULL GROUP BY DB;
(2)统计单个数据库的查询量与总耗时
SELECT OBJECT_SCHEMA AS database_name, COUNT_STAR AS total_queries, SUM_TIMER_WAIT/1000000000 AS total_query_time_seconds FROM performance_schema.events_statements_summary_by_database WHERE OBJECT_SCHEMA IS NOT NULL GROUP BY OBJECT_SCHEMA;
(3)查看单个数据库的资源等待事件(判断瓶颈)
SELECT OBJECT_SCHEMA AS database_name, EVENT_NAME AS wait_event, COUNT_STAR AS wait_count, SUM_TIMER_WAIT/1000000000 AS total_wait_time_seconds FROM performance_schema.events_waits_summary_by_database WHERE OBJECT_SCHEMA IS NOT NULL GROUP BY OBJECT_SCHEMA, EVENT_NAME;
注意:若Performance Schema未启用或统计数据不全,需调整实例参数组中的performance_schema相关参数(如performance_schema_max_statement_classes),重启实例后生效。
2. 自定义指标推送到CloudWatch实现持续监控
如果需要长期跟踪每个数据库的指标,可编写脚本定期查询并将数据推送到CloudWatch:
步骤:
- 配置IAM权限:给执行脚本的实体(EC2实例、Lambda函数等)配置IAM角色,允许
cloudwatch:PutMetricData权限,以及Aurora实例的连接权限(推荐用IAM数据库认证)。 - 编写监控脚本:用Python/Shell连接Aurora,执行上述SQL获取指标,按数据库名称作为维度构造CloudWatch指标数据。
- 定期执行脚本:用CloudWatch Events(规则触发Lambda)或EC2的cron任务,按固定频率(如5分钟一次)运行脚本。
示例AWS CLI推送命令:
aws cloudwatch put-metric-data \ --namespace "AuroraPerDatabaseMetrics" \ --metric-data \ "[ { \"MetricName\": \"ActiveConnections\", \"Dimensions\": [{\"Name\": \"DatabaseName\", \"Value\": \"customer_db_001\"}], \"Value\": 15, \"Unit\": \"Count\" }, { \"MetricName\": \"TotalQueries\", \"Dimensions\": [{\"Name\": \"DatabaseName\", \"Value\": \"customer_db_002\"}], \"Value\": 2300, \"Unit\": \"Count\" } ]"
3. 利用Aurora高级审计分析库级行为(可选)
启用Aurora高级审计功能,将数据库操作日志发送到CloudWatch Logs,再通过Logs Insights分析单个数据库的查询行为:
- 在RDS控制台开启高级审计,指定要审计的数据库列表。
- 将审计日志导出到CloudWatch Logs。
- 使用Logs Insights查询统计,比如:
fields @timestamp, database_name, query | filter database_name is not null | stats count(*) as total_queries, avg(query_duration) as avg_query_time by database_name | sort total_queries desc
内容的提问来源于stack exchange,提问作者Walter
相关产品推荐
相关产品推荐

