解决此问题的方法是可以创建一个 Lambda 函数和 CloudWatch 日志流,该函数会将可用并以 JSON 格式存储为指定 CloudWatch 日志流的 CloudWatch 仪表板 JSON 表格数据。在代码示例中,我们可以使用以下 Python 代码作为 Lambda 函数。
import boto3
import json
def lambda_handler(event, context):
dashboard_name = event['dashboard_name'] #获取仪表板名称
client = boto3.client('cloudwatch')
response = client.get_dashboard(DashboardName=dashboard_name) #获取仪表板定义
widgets = response['DashboardBody']
#创建 CloudWatch 日志流
logs_client = boto3.client('logs')
log_group_name = '/aws/CloudWatch/dashboard/'+dashboard_name
logs_client.create_log_group(logGroupName=log_group_name)
log_stream_name = dashboard_name+'/'+context.aws_request_id
logs_client.create_log_stream(logGroupName=log_group_name, logStreamName=log_stream_name)
#将 CloudWatch 仪表板 JSON 存储为 CloudWatch 日志事件
for widget in widgets['widgets']:
logs_client.put_log_events(
logGroupName=log_group_name,
logStreamName=log_stream_name,
logEvents=[
{
'timestamp': int(event['timestamp']),
'message': json.dumps(widget)
}
]
)