7. 使用 Terraform 将 Kinesis 数据流式传输到 CloudWatch
Source: Dev.to
请提供您想要翻译的文章正文内容(除代码块和 URL 之外),我将为您翻译成简体中文并保持原有的 Markdown 格式。
实验室信息
监控团队希望提升对流式基础设施的可观测性。请使用 Amazon Kinesis 和 CloudWatch 实现一个解决方案,使得当写入吞吐量超过预置限制时立即触发警报。
任务(使用 Terraform):
-
创建 Kinesis 数据流
- 名称:
xfusion-kinesis-stream - 分片数量:
1
- 名称:
-
启用监控
- 启用分片级别指标,以跟踪摄入和吞吐错误。
-
创建 CloudWatch 警报
- 名称:
xfusion-kinesis-alarm - 监控
WriteProvisionedThroughputExceeded指标。 - 当指标超过阈值
1时触发。
- 名称:
-
确保警报
- 配置警报以检测写入吞吐量超过预置限制的问题。
-
Terraform 文件
main.tf– 供应 Kinesis 流和 CloudWatch 警报。outputs.tf– 输出流和警报的名称。
实验解决方案
main.tf
# Kinesis Data Stream
resource "aws_kinesis_stream" "xfusion_kinesis" {
name = "xfusion-kinesis-stream"
shard_count = 1
shard_level_metrics = [
"IncomingBytes",
"IncomingRecords",
"WriteProvisionedThroughputExceeded"
]
}
# CloudWatch Alarm for write throughput exceeded
resource "aws_cloudwatch_metric_alarm" "xfusion_kinesis_alarm" {
alarm_name = "xfusion-kinesis-alarm"
comparison_operator = "GreaterThanThreshold"
evaluation_periods = 1
metric_name = "WriteProvisionedThroughputExceeded"
namespace = "AWS/Kinesis"
period = 60
statistic = "Sum"
threshold = 1
dimensions = {
StreamName = aws_kinesis_stream.xfusion_kinesis.name
}
alarm_description = "Alarm when Kinesis write throughput exceeds provisioned limits"
}
outputs.tf
output "kke_kinesis_stream_name" {
value = aws_kinesis_stream.xfusion_kinesis.name
}
output "kke_kinesis_alarm_name" {
value = aws_cloudwatch_metric_alarm.xfusion_kinesis_alarm.alarm_name
}
Terraform 命令(必需)
terraform init
terraform validate
terraform apply
# type "yes" when prompted

Source: …
步骤说明(原因与发生的事情)
什么是 Amazon Kinesis?
一个接收流式数据的数据管道,例如:
- 应用日志
- 点击流数据
- IoT 事件
什么是 Shard(分片)?
高速公路上的车道。每个分片都有写入限制,超过该限制会导致错误。在本实验中,shard_count = 1 创建了单个车道。
为什么要启用 Shard‑Level Metrics(分片级指标)?
shard_level_metrics = [
"IncomingBytes",
"IncomingRecords",
"WriteProvisionedThroughputExceeded"
]
启用后可以在分片内部获得详细可视化;如果不启用,CloudWatch 将看不到分片级别的问题,导致告警失效。
WriteProvisionedThroughputExceeded 指标
表示生产者发送数据的速度超过了分片的接受能力,导致写入被拒绝,可能出现数据丢失并触发重试。
CloudWatch 告警的目的
将指标监控转化为可操作的警报。告警配置:
comparison_operator = "GreaterThanThreshold"threshold = 1evaluation_periods = 1period = 60(秒)statistic = "Sum"
含义:每分钟统计写入吞吐错误的次数总和;如果总和超过 1,则立即触发告警。
为什么要使用 Dimensions(维度)?
dimensions = {
StreamName = aws_kinesis_stream.xfusion_kinesis.name
}
确保告警仅监控 此特定流,而不是账户中所有的 Kinesis 流。
terraform apply 时会发生什么?
- Terraform 创建 Kinesis 流。
- 启用分片级指标。
- Terraform 创建 CloudWatch 告警。
- 告警立即开始监控。
- Terraform 将资源记录在状态文件中。
- 输出值(
kke_kinesis_stream_name、kke_kinesis_alarm_name)被显示。
常见错误需避免
- 忘记启用
shard_level_metrics。 - 使用了错误的指标命名空间。
- 漏掉
StreamName维度。 - 设置了错误的告警阈值。
- 在
main.tf和outputs.tf之外创建了额外的.tf文件。
资源与后续步骤
- 完整代码仓库: KodeKloud Learning Labs
- 更多深度探讨: Whispering Cloud Insights
- 讨论社区: DEV Community
致谢
- 实验内容来源于 KodeKloud