Terraform实现:为每个Lambda生成CloudWatch Dashboard分组监控组件
解决方案:按Lambda分组生成CloudWatch Dashboard布局
核心思路是遍历每个Lambda函数,为其生成独立的标题+指标widget组,再将所有组合并为一维列表,这样就能实现按Lambda分组的布局,而非按指标类型集中排列。
代码示例
1. 定义变量
先声明要监控的Lambda函数列表及通用监控配置:
variable "lambda_functions" { type = list(string) description = "List of Lambda function names to monitor" default = ["func-1", "func-2", "func-3"] } variable "dashboard_time_range" { type = string description = "Time range for dashboard widgets" default = "PT3H" }
2. 生成按Lambda分组的Widget列表
使用Terraform的for循环和flatten函数,为每个Lambda生成包含标题和三个指标的widget组:
locals { # 为单个Lambda生成对应的所有widget lambda_widget_groups = [ for lambda_name in var.lambda_functions : [ # Markdown标题widget(占满整行12列) { type = "markdown" width = 12 height = 1 properties = { markdown = "### Lambda Function: *${lambda_name}*" } }, # 错误率指标widget(占4列) { type = "metric" width = 4 height = 6 properties = { metrics = [ ["AWS/Lambda", "Errors", "FunctionName", lambda_name, { "stat" : "Sum" }] ] view = "timeSeries" stacked = false title = "Error Rate" period = 60 timeRange = var.dashboard_time_range } }, # 节流率指标widget(占4列) { type = "metric" width = 4 height = 6 properties = { metrics = [ ["AWS/Lambda", "Throttles", "FunctionName", lambda_name, { "stat" : "Sum" }] ] view = "timeSeries" stacked = false title = "Throttle Rate" period = 60 timeRange = var.dashboard_time_range } }, # 持续时间异常指标widget(占4列) { type = "metric" width = 4 height = 6 properties = { metrics = [ ["AWS/Lambda", "Duration", "FunctionName", lambda_name, { "stat" : "p95" }] ] view = "timeSeries" stacked = false title = "Duration (p95)" period = 60 timeRange = var.dashboard_time_range } } ] ] # 将二维的widget组列表展平为一维列表,供Dashboard使用 dashboard_widgets = flatten(local.lambda_widget_groups) }
3. 创建CloudWatch Dashboard资源
将生成的widget列表传入aws_cloudwatch_dashboard资源:
resource "aws_cloudwatch_dashboard" "lambda_monitoring" { dashboard_name = "Lambda-Monitoring-Dashboard" dashboard_body = jsonencode({ widgets = local.dashboard_widgets }) }
关键说明
- 布局控制:通过
width参数控制每个widget的宽度(CloudWatch Dashboard总宽度为12列),标题占12列,每个指标widget占4列,三个刚好填满一行。 - flatten函数:将每个Lambda对应的widget数组(二维列表)展平为一维数组,确保Dashboard能正确识别所有widget的顺序。
- 可扩展性:如果需要调整指标配置(比如统计方式、时间段),只需修改
lambda_widget_groups中的对应参数即可;新增Lambda只需在lambda_functions变量中添加名称。
内容的提问来源于stack exchange,提问作者squareben
相关产品推荐
相关产品推荐

