3
votes

Puis-je utiliser boto pour ajouter une "ok_action" à une alarme cloudwatch existante sans créer une nouvelle alarme?

J'ai 700 alarmes cloudwatch que mes utilisateurs ont créées sans actions dans les "OKActions", ce qui signifie qu'elles ne se résolvent pas automatiquement.

Celles-ci sont déjà en cours de production, j'hésite donc à supprimer \ move \ etc. p>

Dans la console AWS, je peux simplement ajouter une nouvelle action. Cependant, je ne trouve pas une telle action dans le 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()

Puis-je utiliser boto pour ajouter un "ok_action" à une alarme cloudwatch existante sans créer de nouvelle alarme?

AWS cli? Une autre automatisation aws?


0 commentaires

3 Réponses :


0
votes

Utilisez put_metric_alarm avec Boto3. J'ajouterai un exemple de code lorsque j'aurai quelques minutes, ci-dessous une référence CLI.

REMARQUE !!

Lorsque vous mettez à jour une alarme existante, son état reste inchangé, mais la mise à jour écrase complètement la configuration précédente de l'alarme.

J'ai vérifié qu'il s'agissait de la même action lors de l'utilisation des outils de ligne de commande.

Avant:

{
        "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>

    }
Commande 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"

Après:

    {
        "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>
    }

Depuis AWS Support

Bonjour,

Merci d'avoir contacté AWS Premium Support. Je m'appelle Sonal et je vous assisterai dans cette affaire.

Je comprends que vous souhaitez ajouter une action OK aux alarmes existantes sans rien modifier dans la configuration des alarmes. Puisque vous devez ajouter cette action à toutes vos alarmes, vous recherchez un moyen de faire ce script personnalisé.

"PutMetricAlarm" est la seule API utilisée pour créer et mettre à jour une alarme. Veuillez noter que lorsque vous mettez à jour une alarme existante à l'aide de l'API "PutMetricAlarm", la mise à jour écrase complètement la configuration précédente de l'alarme. Cela signifie que vous devez spécifier tous les paramètres de l'alarme existante ainsi que les paramètres que vous souhaitez modifier.

Donc, afin de modifier les alarmes existantes, votre script personnalisé devra faire ce qui suit: -> Obtenir une liste de toutes les alarmes à mettre à jour. Vous pouvez utiliser l'API "DescribeAlarms" 1 -> Vous pouvez analyser la liste des alarmes, extraire les paramètres requis -> Utiliser les paramètres ci-dessus pour faire un appel API "PutMetricAlarm" [2] avec le paramètre OKActions.

Veuillez noter que fournir un code réel pour déployer ces solutions pour votre environnement spécifique serait hors du champ d'application d'AWS Support mais, bien sûr, nous serons en mesure de vous guider tout au long du processus si vous rencontrez des problèmes. p >

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/cloudwatch.html


3 commentaires

mais cela signifie toujours traiter l'ensemble de la configuration. Je ne peux pas simplement ajouter une action ok, cela ne crée pas TECHNIQUEMENT une nouvelle alarme, mais cela ne me permet pas de toucher une seule chose sans rien changer d'autre.


Ne tirez pas sur le messager. Vous avez demandé si cela pouvait être fait, la réponse est oui. La mise en garde est que vous devez inclure votre configuration actuelle lorsque vous l'ajoutez.


veuillez modifier la réponse pour inclure mes commentaires et je vais la voter et confirmer qu'elle a obtenu la réponse



0
votes

Réponse d'Amazon:

tl; dr: Il n'y a pas de bon moyen de faire cela.

Bonjour,

Merci d'avoir contacté AWS Premium Support. Mon nom est Sonal et moi vous assistera dans cette affaire.

Je comprends que vous souhaitez ajouter l'action OK à la alarmes sans rien modifier dans la configuration des alarmes. Puisque vous devez ajouter cette action à toutes vos alarmes, vous êtes à la recherche d'un moyen de faire ce script personnalisé.

"PutMetricAlarm" est la seule API utilisée pour la création et la mise à jour une alarme. Veuillez noter que lorsque vous mettez à jour une alarme existante en utilisant API "PutMetricAlarm", la mise à jour écrase complètement la précédente configuration de l'alarme. Cela signifie que vous devez tout spécifier les paramètres de l'alarme existante ainsi que les paramètres que vous voulez modifier.

Ainsi, pour modifier les alarmes existantes, votre script personnalisé devez faire ce qui suit: -> Obtenez une liste de toutes les alarmes à mettre à jour. Vous pouvez utiliser l'API "DescribeAlarms" [1] -> Vous pouvez analyser la liste des alarmes, extraire les paramètres requis -> Utilisez les paramètres ci-dessus pour effectuer un appel API "PutMetricAlarm" [2] avec le paramètre OKActions.

Veuillez noter que fournir le code réel pour déployer ces les solutions pour votre environnement spécifique seraient hors de portée d'AWS Support mais, bien sûr, nous pourrons vous guider pendant la processus si vous rencontrez des problèmes.


0 commentaires

0
votes

J'ai donc dû faire quelque chose de similaire avec le paramètre 'AlarmActions' de boto3. Je vais changer mon code pour un paramètre fictif «OKActions». La fonction ci-dessous n'est pas exactement ce que j'ai écrit, mais je la simplifie pour plus de clarté.

{'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'}

si vous revenez en arrière et imprimez votre alarme, vous récupérez la nouvelle OKAction.

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)

Source: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/cloudwatch.html#CloudWatch.Client.put_metric_alarm a >


0 commentaires