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

Date de la dernière mise à jour : 14/09/2020

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.

Résolution

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

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": "RATE(m1) * 86400",
            "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 :

Horodatages 2020-06-01T00:00:00Z 2020-06-02T00:00:00Z 2020-06-03T00:00:00Z 2020-06-04T00:00:00Z
EstimatedCharges 0,0 22,65 34,74 46,91
DailyEstimatedCharges --- 22,65 12,09 12,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 Source de la page Métriques de CloudWatch. Ce code crée une expression MetricMath [ RATE(m1) * 86400 ] en utilisant EstimatedCharges comme métrique de base avec l'étiquette « m1 ».

{
    "metrics": [
        [ { "expression": "RATE(m1) * 86400", "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 Graphed metrics (Métriques graphiques). Dans la colonne Actions de la métrique DailyEstimatedCharges, choisissez l'icône Alarm (Alarme).

4.    Dans l'assistant de création d'alarmes 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": "RATE(m1) * 86400",
        "Label": "DailyEstimatedCharges",
        "ReturnData": true
    }]
}

Remarque : veillez à mettre à jour les paramètres REGION (RÉGION), ACCOUNT_ID (ID DE COMPTE), et SNS_TOPIC_NAME (NOM DE RUBRIQUE SNS) 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'`

Remarque : le format DateTime pris en charge pour StartTime et EndTime est « 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 Tarification Amazon CloudWatch.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?