簡體   English   中英

如何使用 Boto3 一次性創建多個 cloudwatch 警報

[英]How to create multple cloudwatch alarms using Boto3 in a one shot

我想創建〜267個Cloudwatch警報,手動過程太可憐了,有人可以指導我使用Boto3腳本,以便我可以一次性設置所有警報。

import boto3

# Create CloudWatch client
cloudwatch = boto3.client('cloudwatch')

# Create alarm
cloudwatch.put_metric_alarm(
    AlarmName='Web_Server_CPU_Utilization',
    ComparisonOperator='GreaterThanThreshold',
    EvaluationPeriods=1,
    MetricName='CPUUtilization',
    Namespace='AWS/EC2',
    Period=60,
    Statistic='Average',
    Threshold=70.0,
    ActionsEnabled=False,
    AlarmDescription='Alarm when server CPU exceeds 70%',
    Dimensions=[
        {
          'Name': 'InstanceId',
          'Value': 'i-xxxxxxxxxx'
        },
    ],
    Unit='Seconds'
)

假設您要為不同的 EC2 實例添加 CloudWatch 警報,您可以簡單地將實例 ID 放在一個列表中並遍歷該列表以創建警報。 看起來像:

import boto3

cloudwatch = boto3.client('cloudwatch')

ec2_instances = [
    'i-xxxxxxxxx1',
    'i-xxxxxxxxx2',
    'i-xxxxxxxxx3'
]

for ec2_instance in ec2_instances:
    cloudwatch.put_metric_alarm(
        AlarmName='Web_Server_CPU_Utilization_%s' % ec2_instance,
        ComparisonOperator='GreaterThanThreshold',
        EvaluationPeriods=1,
        MetricName='CPUUtilization',
        Namespace='AWS/EC2',
        Period=60,
        Statistic='Average',
        Threshold=70.0,
        ActionsEnabled=False,
        AlarmDescription='Alarm when server CPU exceeds 70%',
        Dimensions=[
            {
              'Name': 'InstanceId',
              'Value': ec2_instance
            },
        ],
        Unit='Seconds'
    )

這是我用來在運行的 EC2 實例上設置 CloudWatch 警報的簡單腳本。 目的是在 StatusCheckFailed_Instance 為 True 時重啟我的 EC2 實例。

如果您也收到“數據不足”消息,那么值得在 EC2 控制台上創建相同的警報,然后確保您的 put_metric_alarm 調用與源/CloudFormation JSON 匹配。

AWS 似乎對 JSON 非常挑剔。 一旦我完全匹配了 EC2 控制台的 JSON,它就像一個魅力。

希望這可以幫助某人。

import boto3

# Specify your region here
region = "ap-northeast-1"

ec2_client = boto3.client("ec2", region_name=region)
cloudwatch = boto3.client('cloudwatch')

# Get running EC2 instances
reservations = ec2_client.describe_instances(Filters=[
    {
        "Name": "instance-state-name",
        "Values": ["running"],
    }
]).get("Reservations")

# Set up an alarm for each instance
for reservation in reservations:
    for instance in reservation["Instances"]:
        instance_id = instance['InstanceId']

        cloudwatch.put_metric_alarm(
            AlarmName=f'Status_Check_{instance_id}',
            AlarmDescription=f'Alarm when status check fails on {instance_id}',
            ActionsEnabled=True,
            OKActions=[],
            AlarmActions=[
                f"arn:aws:automate:{region}:ec2:reboot"
            ],
            InsufficientDataActions=[],
            MetricName='StatusCheckFailed_Instance',
            Namespace='AWS/EC2',
            Statistic='Maximum',
            Dimensions=[
                {
                  'Name': 'InstanceId',
                  'Value': instance_id
                },
            ],
            Period=60,
            EvaluationPeriods=2,
            DatapointsToAlarm=2,
            Threshold=0.99,
            ComparisonOperator='GreaterThanOrEqualToThreshold'
        )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM