我有700个用户未在“ OKActions”中执行任何操作而创建的cloudwatch警报,这意味着他们不会自行解决。
这些已经在生产中,因此我不愿意删除\ move \ etc。
在AWS控制台中,我可以简单地添加一个新操作。 但是我在docs for boto中找不到这样的动作:
can_paginate()
delete_alarms()
delete_dashboards()
describe_alarm_history()
describe_alarms()
describe_alarms_for_metric()
disable_alarm_actions()
enable_alarm_actions()
generate_presigned_url()
get_dashboard()
get_metric_data()
get_metric_statistics()
get_metric_widget_image()
get_paginator()
get_waiter()
list_dashboards()
list_metrics()
put_dashboard()
put_metric_alarm()
put_metric_data()
set_alarm_state()
我可以使用boto向现有的cloudwatch警报添加“ ok_action”而不创建新警报吗?
AWS CLI? 其他一些aws自动化吗?
答案 0 :(得分:0)
在Boto3中使用put_metric_alarm
。几分钟后,我将添加一些示例代码,以下是CLI参考。
注意!
更新现有警报时,其状态保持不变,但更新会完全覆盖警报的先前配置。
我验证了使用命令行工具时的相同操作。
之前:
{
"AlarmName": "CPU_High",
"AlarmArn": "arn:aws:cloudwatch:us-east-1:<redacted>:alarm:CPU_High",
"AlarmDescription": "Check for High CPU usage",
"AlarmConfigurationUpdatedTimestamp": "2019-02-04T17:53:54.236Z",
"ActionsEnabled": true,
"OKActions": [],
"AlarmActions": [
"arn:aws:sns:us-east-1:<redacted>:<redacted>"
],
<deleted non-pertinent info>
}
CLI命令:
aws cloudwatch put-metric-alarm --alarm-name "CPU_High" --metric-name "CPUUtilization" --period 300 --ok-actions "arn:aws:sns:us-east-1:<redacted>:<redacted>" --evaluation-periods 1 --threshold 99.0 --comparison-operator "GreaterThanOrEqualToThreshold" --namespace "AWS/EC2" --statistic "Average"
之后:
{
"AlarmName": "CPU_High",
"AlarmArn": "arn:aws:cloudwatch:us-east-1:<redacted>:alarm:CPU_High",
"AlarmConfigurationUpdatedTimestamp": "2019-02-04T18:05:02.592Z",
"ActionsEnabled": true,
"OKActions": [
"arn:aws:sns:us-east-1:<redacted>:<redacted>"
],
"AlarmActions": [],
<deleted non-pertinent info>
}
从AWS支持中心
你好
感谢您与AWS Premium支持联系。我的名字叫Sonal,我将为您提供帮助。
我知道您想在现有警报中添加“确定操作”,而不修改警报配置中的其他任何内容。由于您需要将此操作添加到所有警报中,因此您正在寻找一种执行此自定义脚本的方法。
“ PutMetricAlarm”是用于创建和更新警报的唯一API。请注意,当您使用“ PutMetricAlarm” API更新现有警报时,更新将完全覆盖警报的先前配置。这意味着您必须指定现有警报的所有参数以及要修改的参数。
因此,为了修改现有警报,您的自定义脚本将需要执行以下操作:->获取所有要更新的警报的列表。您可以使用“ DescribeAlarms” API 1->您可以分析警报列表,提取所需的参数->使用以上参数与OKActions参数一起进行“ PutMetricAlarm” API [2]调用
请注意,为您的特定环境提供用于部署这些解决方案的实际代码将不在AWS Support的范围内,但是,如果您遇到任何问题,我们当然可以在此过程中为您提供指导。
参考:
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/cloudwatch.html
答案 1 :(得分:0)
亚马逊的答案:
tl; dr:没有一个好方法。
你好
感谢您与AWS Premium支持联系。我叫Sonal,我 将为您提供帮助。
我了解您想向现有的添加OK操作 警报,而无需修改警报配置中的其他任何内容。 由于您需要将此操作添加到所有警报中,因此您 寻找一种方法来执行此自定义脚本。
“ PutMetricAlarm”是用于创建和更新的唯一API 警报。请注意,当您使用来更新现有警报时 “ PutMetricAlarm” API,此更新完全覆盖了以前的版本 警报的配置。这意味着您必须指定所有 现有警报的参数以及您的参数 要修改。
因此,为了修改现有警报,您的自定义脚本将 需要执行以下操作: ->获取所有要更新的警报的列表。您可以使用“ DescribeAlarms” API [1] ->您可以解析警报列表,提取所需的参数 ->使用以上参数与OKActions参数一起进行“ PutMetricAlarm” API [2]调用。
请注意,提供了用于部署这些代码的实际代码 您特定环境的解决方案将不在AWS的范围内 支持,但是,当然,我们将能够在 如果遇到任何问题,请进行处理。
答案 2 :(得分:0)
所以我不得不对 boto3 中的“AlarmActions”参数做一些类似的事情。我将为虚构的“OKActions”参数更改我的代码。下面的函数不是完全我写的,但为了清楚起见,我简化了它。
def change_alarm_ok_action(cloudwatch_client, alarm):
new_ok_action = 'arn:aws-us-east-1:blah:blah:new_ok_action'
new_alarm_dict = alarm
new_alarm_dict['OKActions'] = [new_ok_action]
#when I ran the code, it gave me an error that a bunch of parameters I had in my alarm
#were not allowed,
#so I went down the list of the parameters it told me to remove and popped them.
#you may need to do the same.
new_alarm_dict.pop('AlarmArn', None)
new_alarm_dict.pop('StateValue', None)
new_alarm_dict.pop('StateReason', None)
new_alarm_dict.pop('StateReasonData', None)
new_alarm_dict.pop('StateUpdatedTimestamp', None)
new_alarm_dict.pop('AlarmConfigurationUpdatedTimestamp', None)
#here is where I then used the put_metric_alarm() command
#because the command only takes kwargs, I had to change my dict into kwargs
#luckily python has an easy way to do this
cloudwatch_client.put_metric_alarm(**new_alarm_dict)
如果您返回并打印闹钟,您将获得新的 OKAction。
{'ActionsEnabled': True,
'AlarmActions': ['arn:us-east-1:blah:blah'],
'AlarmDescription': 'CPU_Utilization_instance:blah',
'AlarmName': 'CPU_Utilization_instance:blah',
'ComparisonOperator': 'GreaterThanOrEqualToThreshold',
'DatapointsToAlarm': 3,
'Dimensions': [{'Name': 'InstanceId', 'Value': 'blah'}],
'EvaluationPeriods': 3,
'InsufficientDataActions': [],
'MetricName': 'CPUUtilization',
'Namespace': 'AWS/EC2',
'OKActions': ['arn:aws-us-east-1:blah:blah:new_ok_action'],
'Period': 300,
'Statistic': 'Average',
'Threshold': 80.0,
'TreatMissingData': 'missing'}