You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取RDS集群实例最大连接数,配置CloudWatch告警阈值为其75%?

解决思路:基于RDS实例最大连接数75%设置CloudWatch告警阈值

针对你遇到的问题,这里提供三种实用的解决思路,适配不同场景需求:

方法一:预定义实例类型与最大连接数映射表

Aurora MySQL的默认max_connections值与实例类型、引擎版本强相关,官方文档有明确对应关系。你可以预先整理一个映射表,直接在代码中根据实例类型获取最大连接数,再计算75%作为阈值。

代码示例

// 预定义对应引擎版本(2.09.2)的实例类型与最大连接数映射
const auroraMysqlMaxConnections = {
  't3.medium': 1000, // 请根据官方文档确认对应版本的实际值
  't3.large': 2000,
  // 按需添加其他需要的实例类型
};

// 定义实例类型(可复用)
const instanceType = ec2.InstanceType.of(ec2.InstanceClass.T3, ec2.InstanceSize.MEDIUM);

// 创建RDS集群
const TestCluster = new rds.DatabaseCluster(this, "TestDbCluster", {
  engine: rds.DatabaseClusterEngine.auroraMysql({
    version: rds.AuroraMysqlEngineVersion.VER_2_09_2,
  }),
  instances: 1,
  instanceProps: {
    instanceType: instanceType,
    vpcSubnets: {
      subnetType: ec2.SubnetType.PRIVATE_ISOLATED,
    },
    vpc: vpc,
  },
  clusterIdentifier: "TestDbCluster",
});

// 计算告警阈值
const maxConnections = auroraMysqlMaxConnections[instanceType.toString()];
const threshold = maxConnections * 0.75;

// 创建CloudWatch告警
const ConnectionsMetric = TestCluster.metricDatabaseConnections();
const dbConnectionsAlarm = ConnectionsMetric.createAlarm(this, "TestAlarm", {
  alarmName: "DB-DbConnections-Alarm",
  threshold: threshold,
  evaluationPeriods: 1,
});

优缺点

  • 优点:实现简单,无额外资源开销
  • 缺点:需要手动维护映射表,引擎版本升级或实例类型变更时需同步更新

方法二:通过自定义资源动态查询集群参数

利用CDK的自定义资源(Custom Resource)调用AWS SDK查询RDS集群的max_connections参数值,动态计算阈值,适配实例类型和参数的变更。

代码示例

import { CustomResource, CustomResourceProvider } from 'aws-cdk-lib/custom-resources';
import { PolicyStatement } from 'aws-cdk-lib/aws-iam';
import { Fn } from 'aws-cdk-lib';

// 创建RDS集群
const TestCluster = new rds.DatabaseCluster(this, "TestDbCluster", {
  engine: rds.DatabaseClusterEngine.auroraMysql({
    version: rds.AuroraMysqlEngineVersion.VER_2_09_2,
  }),
  instances: 1,
  instanceProps: {
    instanceType: ec2.InstanceType.of(ec2.InstanceClass.T3, ec2.InstanceSize.MEDIUM),
    vpcSubnets: {
      subnetType: ec2.SubnetType.PRIVATE_ISOLATED,
    },
    vpc: vpc,
  },
  clusterIdentifier: "TestDbCluster",
});

// 自定义资源:查询集群的max_connections参数
const maxConnectionsResource = new CustomResource(this, 'MaxConnectionsResource', {
  serviceToken: CustomResourceProvider.getOrCreate(this, 'Custom::RDSMaxConnections', {
    policyStatements: [
      new PolicyStatement({
        actions: ['rds:DescribeDBClusterParameters'],
        resources: [TestCluster.clusterArn],
      })
    ],
    onCreate: {
      service: 'RDS',
      action: 'describeDBClusterParameters',
      parameters: {
        DBClusterParameterGroupName: TestCluster.clusterParameterGroup!.parameterGroupName,
        Filters: [{ Name: 'parameter-name', Values: ['max_connections'] }]
      },
      physicalResourceId: { id: Date.now().toString() },
    },
    onUpdate: {
      service: 'RDS',
      action: 'describeDBClusterParameters',
      parameters: {
        DBClusterParameterGroupName: TestCluster.clusterParameterGroup!.parameterGroupName,
        Filters: [{ Name: 'parameter-name', Values: ['max_connections'] }]
      },
      physicalResourceId: { id: Date.now().toString() },
    },
  }),
});

// 从自定义资源中提取参数值,计算75%阈值
const maxConnections = maxConnectionsResource.getAttString('Parameters.0.ParameterValue');
const threshold = Fn.toNumber(maxConnections) * 0.75;

// 创建CloudWatch告警
const ConnectionsMetric = TestCluster.metricDatabaseConnections();
const dbConnectionsAlarm = ConnectionsMetric.createAlarm(this, "TestAlarm", {
  alarmName: "DB-DbConnections-Alarm",
  threshold: threshold,
  evaluationPeriods: 1,
});

优缺点

  • 优点:动态获取参数值,无需手动维护映射,适配实例类型和参数变更
  • 缺点:引入自定义资源,增加少量部署复杂度(会创建一个Lambda函数)

方法三:使用CloudWatch Metric Math实现比例告警

通过定期推送max_connections到CloudWatch自定义指标,再用Metric Math计算当前连接数占最大连接数的比例,直接对比例阈值(75%)告警。

步骤说明

  1. 编写Lambda函数:定期调用RDS API查询max_connections,并推送到CloudWatch自定义指标
  2. 在CDK中创建Metric Math告警,对比当前连接数与最大连接数的比例

告警代码示例

import * as cloudwatch from 'aws-cdk-lib/aws-cloudwatch';

const ConnectionsMetric = TestCluster.metricDatabaseConnections();
// 自定义指标:预先通过Lambda推送的max_connections值
const maxConnectionsMetric = new cloudwatch.Metric({
  namespace: 'Custom/RDS',
  metricName: 'MaxConnections',
  dimensionsMap: { DBClusterIdentifier: TestCluster.clusterIdentifier },
});

// 创建比例告警:当连接数占比超过75%时触发
const dbConnectionsAlarm = new cloudwatch.Alarm(this, "TestAlarm", {
  alarmName: "DB-DbConnections-Ratio-Alarm",
  evaluationPeriods: 1,
  metric: ConnectionsMetric.divide(maxConnectionsMetric).multiply(100), // 计算百分比
  threshold: 75,
  comparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_THRESHOLD,
});

优缺点

  • 优点:基于运行时实际参数值,告警更精准
  • 缺点:需要额外配置Lambda和CloudWatch指标推送,增加运维成本

内容的提问来源于stack exchange,提问作者ShanWave007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 18:45:40