Comment surveiller quotidiennement la métrique EstimatedCharges et déclencher une alarme CloudWatch en fonction de mon seuil d'utilisation ?

Lecture de 4 minute(s)
0

Comment surveiller quotidiennement la métrique EstimatedCharges et déclencher une alarme Amazon CloudWatch en fonction de mon seuil d'utilisation ?

Brève description

La métrique EstimatedCharges est publiée toutes les six heures, environ. Les résultats sont réinitialisés tous les mois. L'expression MetricMath RATE est calculée en divisant la différence entre la dernière valeur de point de données et la valeur de point de données précédente par la différence de temps en seconde entre les deux valeurs. Vous pouvez utiliser cette expression pour calculer la valeur EstimatedCharges pour chaque jour.

Solution

Remarque : si vous recevez des erreurs lors de l'exécution de commandes depuis l’Interface de la ligne de commande AWS (AWS CLI), assurez-vous d'utiliser la version la plus récente de l'AWS CLI.

Tester l'expression RATE et vérifier la sortie

Avant de créer une alarme CloudWatch, appelez l'API GetMetricData pour tester l'expression RATE :

$ cat metric_data_queries.json
{
    "MetricDataQueries": [
        {
            "Id": "m1",
            "MetricStat": {
                "Metric": {
                    "Namespace": "AWS/Billing",
                    "MetricName": "EstimatedCharges",
                    "Dimensions": [
                        {
                            "Name": "Currency",
                            "Value": "USD"
                        }
                    ]
                },
                "Period": 86400,
                "Stat": "Maximum"
            }
        },
    {
            "Id": "e1",
            "Expression": "IF(RATE(m1)>0,RATE(m1)*86400,0)",
            "Label": "DailyEstimatedCharges",
        "Period": 86400
        }
    ],
    "StartTime": "2020-06-01T00:00:00Z",
    "EndTime": "2020-06-05T00:00:00Z",
    "ScanBy": "TimestampAscending"
}


$ aws cloudwatch get-metric-data --cli-input-json file://metric_data_queries.json
{
    "MetricDataResults": [
        {
            "Id": "m1",
            "Label": "EstimatedCharges",
            "Timestamps": [
                "2020-06-01T00:00:00Z",
                "2020-06-02T00:00:00Z",
                "2020-06-03T00:00:00Z",
                "2020-06-04T00:00:00Z"
            ],
            "Values": [
                0.0,
                22.65,
                34.74,
                46.91
            ],
            "StatusCode": "Complete"
        },
        {
            "Id": "e1",
            "Label": "DailyEstimatedCharges",
            "Timestamps": [
                "2020-06-02T00:00:00Z",
                "2020-06-03T00:00:00Z",
                "2020-06-04T00:00:00Z"
            ],
            "Values": [
                22.65,
                12.090000000000003,
                12.169999999999995
            ],
            "StatusCode": "Complete"
        }
    ],
    "Messages": []
}

Tableau de sortie :

Horodatages2020-06-01T00:00:00Z2020-06-02T00:00:00Z2020-06-03T00:00:00Z2020-06-04T00:00:00Z
EstimatedCharges0,022,6534,7446,91
DailyEstimatedCharges---22,6512,0912,17

Dans la table en sortie, vérifiez que DailyEstimatedCharges est correctement calculée comme la différence entre le dernier point de données et le point de données précédent. Vous utilisez cette expression pour créer votre alarme CloudWatch.

Créer une alarme CloudWatch à l'aide d'AWS Management Console

1.    Suivez les étapes de la section Création d'une alarme CloudWatch basée sur une expression mathématique de métrique.

2.    Collez le code suivant dans l'onglet Sourcede la page Métriques de CloudWatch. Ce code crée une expression mathématique métrique [IF (RATE (m1) >0, RATE (m1) *86400,0)] en utilisant EstimatedCharges comme métrique de base avec l'étiquette «m1 ».

{
    "metrics": [
        [ { "expression": "IF(RATE(m1)>0,RATE(m1)*86400,0)", "label": "Expression1", "id": "e1", "period": 86400, "stat": "Maximum" } ],
        [ "AWS/Billing", "EstimatedCharges", "Currency", "USD", { "id": "m1" } ]
    ],    
    "view": "timeSeries",
    "stacked": false,
    "region": "us-east-1",
    "stat": "Maximum",
    "period": 86400
}

3.    Créez une alarme CloudWatch pour l'expression MetricMath. Pour ce faire, sélectionnez Métriques graphiques. Dans la colonne Actionsde la métrique DailyEstimatedCharges, choisissez l'icône Alarme.

4.    Dans l'assistant de création d'alarme CloudWatch : confirmez les détails de la configuration de la métrique. Ajoutez une valeur seuil appropriée pour recevoir des notifications en cas de dépassement du seuil (par exemple 50 USD). Configurez vos actions d'alarme. Ajoutez un nom et une description d'alarme.

Créer une alarme CloudWatch à l'aide de l'interface de ligne de commande AWS

1.    Créez une configuration d'alarme en tant que fichier JSON :

$ cat alarm_config.json
{
    "AlarmName": "DailyEstimatedCharges",
    "AlarmDescription": "This alarm would be triggered if the daily estimated charges exceeds 50$",
    "ActionsEnabled": true,
    "AlarmActions": [
        "arn:aws:sns:<REGION>:<ACCOUNT_ID>:<SNS_TOPIC_NAME>"
    ],
    "EvaluationPeriods": 1,
    "DatapointsToAlarm": 1,
    "Threshold": 50,
    "ComparisonOperator": "GreaterThanOrEqualToThreshold",
    "TreatMissingData": "breaching",
    "Metrics": [{
        "Id": "m1",
        "MetricStat": {
            "Metric": {
                "Namespace": "AWS/Billing",
                "MetricName": "EstimatedCharges",
                "Dimensions": [{
                    "Name": "Currency",
                    "Value": "USD"
                }]
            },
            "Period": 86400,
            "Stat": "Maximum"
        },
        "ReturnData": false
    },
    {
        "Id": "e1",
        "Expression": "IF(RATE(m1)>0,RATE(m1)*86400,0)",
        "Label": "DailyEstimatedCharges",
        "ReturnData": true
    }]
}

Remarque : veillez à mettre à jour REGION, ACCOUNT_ID et SNS_TOPIC_NAME avec les valeurs correspondantes.

2.    Appelez l'API PutMetricAlarm :

aws cloudwatch put-metric-alarm --cli-input-json file://alarm_config.json

(Facultatif) Trouver les dix principaux contributeurs de la journée précédente à la valeur DailyEstimatedCharges maximum

Utilisez la requête suivante :

$ cat top_contributors_query.json
{
    "MetricDataQueries": [{
        "Id": "e1",
        "Expression": "SORT(RATE(SEARCH('{AWS/Billing,Currency,ServiceName} AWS/Billing ServiceName', 'Maximum', 86400))*86400, MAX, DESC, 10)",
        "Label": "DailyEstimatedCharges",
        "Period": 86400
    }],
    "ScanBy": "TimestampAscending"
}


$ aws cloudwatch get-metric-data --cli-input-json file://top_contributors_query.json --start-time `date -v -2d '+%Y-%m-%dT%H:%M:%SZ'` --end-time `date '+%Y-%m-%dT%H:%M:%SZ'` --region us-east-1

**Remarque :**le format DateTime pris en charge pour StartTimeet EndTimeest « 2020-01-01T00:00:00Z ».

**Important :**la commande précédente entraîne des frais en fonction du nombre de métriques récupérées par chaque appel d'API GetMetricData. Pour plus d'informations, consultez la page Tarification Amazon CloudWatch.


AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans