在 AWS Direct Connect VIF 上监控 BGP 状态,并跟踪通过 Transit
- 40
监控 AWS Direct Connect VIF 的 BGP 状态并跟踪通过 Transit VIF 广播的前缀计数
关键要点
本篇文章探讨了企业如何在迁移到云基础设施的过程中,通过 AWS Direct Connect 监控 BGP 状态,这是确保企业与云环境之间可靠连接的关键所在。文章内容包括:
如何在 AWS 账户中建立通知机制,以便接收 VIF 状态变化的警报。监视 AWS Direct Connect Gateway (DXGW) 向 AWS Transit Gateway 路由表传播的前缀数量,以及定义阈值以接收通知。文章概述
随着企业向云基础设施转型,构建连接本地和云环境间的可靠性变得至关重要。AWS Direct Connect 提供了一条专用网络连接,将企业数据中心网络扩展到亚马逊网络服务AWS云中。连接的核心是边界网关协议BGP,这是一种动态路由协议,旨在启动并维护这些网络之间的连接。本文考察了监控这些连接的机制,并在其状态改变时发送警报。
警报与监控解决方案概述
在本文中,我们探讨了两个常见需求:
建立一个通知机制,以接收 AWS 账户中虚拟接口VIF状态变化的警报, 无论是 Transit、Private 还是 Public VIF。监控从 AWS Direct Connect Gateway (DXGW) 附加到 AWS Transit Gateway 路由表的前缀数量,当前缀数量超过设定的阈值时,发送通知。文章讨论了提高 Direct Connect 服务的监控和可视化的实用解决方案,从而能够快速响应意外的变化或阈值。
前提条件跟随本文需要您具备以下条件:
AWS 账户一条运营中的 Direct Connect 连接专用或托管及其 VIF。创建 AWS Lambda 函数、Amazon CloudWatch、Amazon Simple Notification Service (SNS) 和 Amazon EventBridge 的权限。操作步骤:
监控 VIF 状态AWS Direct Connect 监控目前包括连接级别和虚拟接口级别的监控。Direct Connect 连接有 ConnectionState 指标。尽管它不特定于每个 VIF,但仍然重要并应予以监控。
我们的解决方案利用 AWS Lambda、Amazon CloudWatch 日志组和 Amazon SNS 来监控 VIF 状态并发出警报。经过测试的解决方案在 AWS 账户中遵循以下逻辑顺序:
使用 DescribeVirtualInterfaces API 获取 VIF 信息,包括 BGP peer 状态。将 VIF 详细信息记录到 CloudWatch 日志组。设置条件检查监控 VIF 状态变化,并向指定主题触发 Amazon SNS 警报。使用 EventBridge 触发的 Lambda 函数每分钟自动执行该过程可根据需要调整。配置步骤为 Lambda 函数创建一个 IAM 角色,具备以下权限:
CloudWatch Logs 权限 AWSLambdaBasicExecutionRole
Amazon SNS 权限 snsPublishDirect Connect 权限 directconnectDescribeVirtualInterfaces
创建一个 SNS 主题 和 订阅:
在 Amazon SNS 控制台中创建一个名为 VIFAlert 的 Amazon SNS 主题,以接收警报通知。
在订阅部分创建新的订阅。选择 VIFAlert 主题 ARN。选择 Email 作为协议,输入接收通知的电子邮件地址。创建订阅。设置 CloudWatch 日志组和日志流:
在 CloudWatch 控制台 中创建一个名为 VIFAlert 的新日志组。
在日志组内创建一个名为 VIFAlert 的新日志流,以存储详细的 VIF 信息,如 VIF ID 和 BGP 状态更新,下面的截图展示了这一点图 2。创建 VIF 监控的 Lambda 函数:
在 AWS Lambda 控制台 中创建一个新函数。
选择 从头开始创建,提供一个名称。选择 Python 312 作为运行时。保持架构设置为 x8664 并创建该函数。使用该 GitHub 仓库 中提供的代码。将此逻辑集成到 Lambda 函数中,以将 VIF 详细信息从 DescribeVirtualInterfaces API 推送到 CloudWatch 日志中。
配置触发器以 调用 Lambda 函数。在此示例中,我们创建 EventBridge 触发器:
打开 Lambda 控制台的 Functions 页面,选择如图 3 所示的函数,然后选择 Add trigger。
选择 EventBridge (Cloudwatch events) 作为来源。创建一个新的规则并给其一个您选择的名称和描述。对于 规则类型,选择 调度表达式 并使用 cron 表达式 rate(1 minute),如图 4 所示,以确保 Lambda 函数每分钟运行一次,提供对 VIF 状态的实时更新。选择添加触发器。按照这些步骤,您将创建一套全面的解决方案以有效且及时地监控 AWS 环境中的 VIF 状态。
测试 VIF 状态监控:当 VIF 状态从 up 变为 down 时。模拟 VIF 故障:
关闭本地网关设备上的 BGP 邻居关系,或在 AWS 控制台中使用 故障转移 选项,将剩余的 VIF 指定为生产 VIF。
验证 Lambda 函数:
运行 Lambda 函数并检查执行结果选项卡以获得 200 响应代码,表示成功执行,如图 5 所示。
Lambda 函数每分钟通过 EventBridge 被触发,并将 VIF ID 和 BGP 状态推送到 CloudWatch 日志组。
CloudWatch 日志验证:
查看 CloudWatch 日志以验证 VIF 状态和 ID 是否成功传输到指定的日志组,如图 6 所示。
确认日志条目带有准确的时间戳,表示记录机制的有效运行。
电子邮件警报验证:
查看电子邮件中的警报通知,如图 7 所示。
电子邮件警报详细说明了 VIF 的 BGP 故障以及警报时间戳与事件时间的一致性。测试 VIF 状态监控:当 VIF 状态从 down 变为 up 时一旦 VIF 上的 BGP 邻居关系恢复,可以按照以下步骤测试系统。
测试 Lambda 函数:
选择测试以运行 Lambda 函数,如下图 8 所示。Lambda 函数输出表明运行正常,没有错误提示。
验证 CloudWatch 日志流:
审查日志流确认到位的日志记录,包括 VIF BGP 恢复的成功记录,如图 9 所示。日志中的时间戳提供了准确的文档记录。根据 EventBridge 触发器定期的日志条目确保可靠、及时的更新,您可以根据需要进行调整。
电子邮件警报确认:
验证电子邮件警报,确认利益相关者在 VIF 上恢复 BGP 时及时收到通知。
收到的电子邮件警报提供明确和详细的内容,表明 BGP 邻居的恢复,如图 10 所示。总结来说,测试验证了设置能按预期响应 VIF 上的 BGP 更改。Lambda 代码是一个可靠的资源,您可以通过替换日志流、组和 SNS 主题 ARN 的值来进行自定义。
监控 DXGW 附加到 Transit Gateway 路由表的前缀
AWS Direct Connect 作为一项关键连接解决方案,通过 transit VIF 连接多个 VPC。然而,当前在 transit VIF 上广播的前缀数量限制为 100包括 IPv4 和 IPv6。如果前缀的数量超过 100,BGP 会话将进入空闲状态,导致路由被移除,流量通过 VIF 停止。
值得注意的是,AWS 不会在 BGP 前缀超过限制时自动通知您。在生产应用需要最小停机时间的关键情况下,当通过 transit VIF 发送的学习前缀接近或超过最大允许值 100 的某个阈值时,发送警报非常重要。
为了实现这种前治逃逸监控,我们使用 AWS Lambda、Amazon SNS 和 CloudWatch,帮助客户保持对潜在中断的了解,并采取及时的预防措施。
前缀监控设置的实现步骤为 Lambda 函数创建一个 IAM 角色,具备以下权限:
Transit Gateway (EC2):ec2DescribeTransitGatewayRouteTable 和 ec2SearchTransitGatewayRoutesCloudWatch Logs 权限:AWSLambdaBasicExecutionRoleAmazon SNS 权限:snsPublishLambda 权限:lambdaInvokeFunction为了建立一个有效的监控系统以监控 AWS Direct Connect transit VIF 上的前缀,遵循以下步骤:
创建一个 CloudWatch 日志组和日志流:
打开 CloudWatch 控制台,导航至日志组。
选择操作,然后创建日志组。在日志组内创建一个日志流,以便组织和存储详细信息,包括 DXGW 和 TGW ID,以及学习的前缀计数。点击您创建的日志组,然后在日志流下点击创建日志流,输入日志流名称。
建立一个 SNS 主题 和 订阅:
登录到 Amazon SNS 控制台。为警报通知创建 SNS 主题。
选择主题类型为标准并输入名称。创建订阅,选择电子邮件作为协议并输入电子邮件地址。
开发一个 Lambda 函数 进行前缀监控:
打开 Lambda 控制台 的函数页面。
选择创建函数。选择从头开始创建。输入 Lambda 函数名称,选择 Python 312 作为运行时。架构保持设置为 x8664,并选择创建函数。使用该 Github 仓库 中提供的代码。Lambda 函数使用 SearchTransitGatewayRoutes API 调用。我们使用此 API 检查从 Direct Connect Gateway 附加学习到的路由总数,并将计数推送到指定的 CloudWatch 日志流。

基于阈值的 Amazon SNS 警报:
我们在 Lambda 函数中实现逻辑,将路由计数与配置的阈值进行比较。
如果路由计数超过阈值,发送 SNS 通知以提醒潜在问题。
tk加速器可选:CloudWatch 警报以实现高级警报:
此步骤超出本篇文章范围。客户可以根据与路由计数相关的特定条件设置 CloudWatch 警报,以实现更高级的警报机制。有关如何创建 CloudWatch 警报的更多详细信息,请参阅 基于静态阈值创建 CloudWatch 警报。
配置触发器以调用 Lambda 函数。在此示例中,我们创建 EventBridge 触发器:
打开 Lambda 控制台的函数页面,选择要创建触发器的函数。
在功能概述面板中,选择添加触发器。在触发器配置窗格中,从下拉菜单中选择 EventBridge (CloudWatch Events) 作为来源。选择创建新规则,并输入您的规则名称。在规则描述中您可以输入规则的描述。这是可选的。对于规则类型,选择调度表达式并使用 cron 表达式rate(1 minute),如图 4 所示,以确保 Lambda 函数每分钟运行一次,提供前缀计数的实时更新。您可以根据特定使用情况选择 [自定义 cron 表