AWS CloudWatch 默认情况下不支持动态标签。要启用动态标签功能,您需要创建一个 Lambda 函数来生成标签,然后将这些标签添加到指定的 CloudWatch 指标中。
以下是一个示例 Lambda 函数,它获取 EC2 实例的名称和状态,并将这些信息添加到 CloudWatch 指标中:
import boto3
import json
import os
cloudwatch = boto3.client('cloudwatch')
def lambda_handler(event, context):
reservations = boto3.client('ec2').describe_instances().get(
'Reservations', [])
instances = sum(
[
[i for i in r['Instances']]
for r in reservations
], [])
for instance in instances:
name = next((t.get('Value') for t in instance['Tags'] if t['Key'] == 'Name'), None) or instance['InstanceId']
response = cloudwatch.put_metric_data(
Namespace='Custom/EC2',
MetricData=[
{
'MetricName': 'StatusCheckFailed',
'Dimensions': [
{
'Name': 'InstanceId',
'Value': instance['InstanceId']
},
{
'Name': 'Name',
'Value': name
},
],
'Value': int(instance['State']['Name'] == 'running')
},
]
)
return True
在此示例中,我们将 EC2 的名称和状态添加到 CloudWatch 指标“Custom/EC2”中,名称定义为 Name
维度,如果存在,则从实例标记中获取名称,否则使用实例 ID。状态定义为 StatusCheckFailed
指标,并使用 Value
设置为 0 或 1,具体取决于实例是否正在运行。
请注意,Lambda 函数需要 IAM 角色允许向 CloudWatch 写入数据。另外,如果您需要添加其他动态标签,可以根据自己的需求修改 Lambda 函数。