J'ai essayé d'obtenir des données CloudWatch avec Python

Déclencheur

Chaque jour, je vérifie l'état du serveur sur le tableau de bord CloudWatch. Quand vous venez travailler, vérifiez d'abord les tableaux de bord dans l'ordre ... c'est ennuyeux! : persévérer: Je veux avoir des informations sur le tableau de bord à la fois! D'accord, écrivons en Python!

Obtenez des informations CloudWatch avec Python

Ce serait bien d'utiliser get_metric_statistics () de Boto3. Conformément aux Documents officiels, préparez-vous d'abord à charger CloudWatch avec Boto3.


import boto3
client = boto3.client('cloudwatch')

Il semble que get_metric_statistics () soit utilisé comme suit.

response = client.get_metric_statistics(
           Namespace = 'string',
           MetricName = 'string',
           Dimensions = [
             {
               'Name': 'string',
               'Value': 'string'
             },
           ],
           StartTime = datetime(2020, 2, 11),
           EndTime = datetime(2020, 2, 11),
           Period = 123,
           Statistics = [
             'SampleCount'|'Average'|'Sum'|'Minimum'|'Maximum',
           ])

Namespace ʻAWS / EC2 ou ʻAWS / ElastiCache ou ʻAWS / RDS. Il est écrit en haut des informations affichées lorsque le curseur de la souris est placé sur les informations détaillées de l'onglet Métriques graphiques` de CloudWatch. CloudWatch.png

MetricName CPUUtilization, MemoryUtilization, DiskSpaceAvailable, etc. Il est écrit au-dessus de la ligne de séparation, la seconde à partir du haut des informations affichées lorsque le curseur de la souris est placé sur les informations détaillées de l'onglet Métriques graphiques de CloudWatch.

Dimensions ʻInstanceId, CacheClusterId, DBInstanceIdentifier, etc. Il est écrit sous le séparateur d'informations qui apparaît lorsque vous passez le curseur de votre souris sur les informations détaillées de l'onglet Métriques graphiquesde CloudWatch. (Toutes les informations sur les dimensions sous la ligne de séparation) Comme dans l'exemple ci-dessus, Dimensions est écrit sous la forme suivante.Dimensions=[{'Name': 'string', 'Value': 'string'}] Donc spécifiquement Dimensions = [{'Nom': 'InstanceId', 'Valeur': 'i-xxxxxxxxxxx'}] Dimensions=[{'Name': 'Role', 'Value': 'WRITER'}, {'Name': 'DBClusterIdentifier', 'Value': 'xxxxxxxxxxx'}]` Il aura la forme.

Period Écrivez la période en secondes. Alors 1 minute → 60 5 minutes → 300 24 heures → 86400

Statistics Écrivez des statistiques.

réponse

La réponse de «get_metric_statistics ()» est la suivante.

{'Label': 'CPUUtilization', 'Datapoints': [{'Timestamp': datetime.datetime(2020, 2, 10, 19, 8, tzinfo=tzutc()), 'Maximum': 6.66666666666667, 'Unit': 'Percent'}], 'ResponseMetadata': {'RequestId': 'xxxxxxxxxxx', 'HTTPStatusCode': 200, ...(réduction)

Alors La valeur est response ['Datapoints'] [0] [valeur spécifiée dans Statistics (Maximum dans la réponse ci-dessus)] L'unité de la valeur est response ['Datapoints'] [0] ['Unit'] Il semble que vous puissiez vous sentir bien si vous utilisez autour.

Ce que j'ai réellement écrit (en partie)

Comme j'ai vérifié visuellement avec CloudWatch tous les jours, dans ce script, j'obtiendrai les dernières 24 heures à partir de la date et de l'heure d'exécution du script. Une fois que vous avez un script, vous pouvez l'exécuter régulièrement avec cron.

import boto3
from datetime import datetime, timedelta

client = boto3.client('cloudwatch')

def get_metric_statistics(name_space, metric_name, dimensions_values, statistic):
    #Obtenir des informations CloudWatch
    response = client.get_metric_statistics(
               #Pour l'utilisation du processeur`AWS/EC2`Entrer
               Namespace = name_space,
               #Pour l'utilisation du processeur`CPUUtilization`Entrer
               MetricName = metric_name,
               # `[{'Name': 'InstanceId', 'Value': instance_id}]`Entrer
               Dimensions = dimensions_values,
               #Date et heure de début`Date et heure d'exécution du script-Un jour`Spécifié par
               StartTime = datetime.now() + timedelta(days = -1),
               #Date et heure de fin`Date et heure d'exécution du script`Spécifié par
               EndTime = datetime.now(),
               #Précisez 24 heures
               Period = 86400,
               # `Maximum`Entrer
               Statistics = [statistic]
               )

    #Création de l'instruction de sortie
    response_text = name_space + ' ' + metric_name + statistic + ': ' + str(response['Datapoints'][0][statistic]) + ' ' + response['Datapoints'][0]['Unit']
    print(response_text)

#Métrique cible de sortie
instance_id = 'i-xxxxxxxxxxx'
#l'utilisation du processeur
get_metric_statistics('AWS/EC2', 'CPUUtilization', [{'Name': 'InstanceId', 'Value': instance_id}], 'Maximum')
#Utilisation de la mémoire
get_metric_statistics('System/Linux', 'MemoryUtilization', [{'Name': 'InstanceId', 'Value': instance_id}], 'Maximum')

Résultat de sortie

AWS/EC2 CPUUtilizationMaximum: 6.66666666666667 Percent
System/Linux MemoryUtilizationMaximum: 18.1909615159559 Percent

Résumé

J'ai essayé d'obtenir des informations CloudWatch à partir d'un script Python. Cette fois, j'ai utilisé un modèle avec un seul Datapoints, mais selon la période spécifiée, il y aura plusieurs sorties. Dans ce cas, utilisez le traitement en boucle pour viser les données nécessaires.

We're hiring! Nous développons un chatbot IA. Si vous êtes intéressé, n'hésitez pas à nous contacter depuis la page Wantedly!

Article de référence

Boto3 Docs CloudWatch

Recommended Posts

J'ai essayé d'obtenir des données CloudWatch avec Python
J'ai essayé de démarrer avec le script python de blender_Part 01
J'ai essayé de démarrer avec le script python de blender_Partie 02
J'ai essayé de créer diverses "données factices" avec Python faker
J'ai essayé de commencer avec Hy
[Python] Un mémo que j'ai essayé de démarrer avec asyncio
[Pandas] J'ai essayé d'analyser les données de ventes avec Python [Pour les débutants]
Essayez d'obtenir des métriques CloudWatch avec la source de données python re: dash
[Python] J'ai essayé d'obtenir diverses informations en utilisant l'API de données YouTube!
J'ai essayé de sauvegarder les données avec discorde
J'ai essayé de sortir LLVM IR avec Python
J'ai essayé d'automatiser la fabrication des sushis avec python
J'ai essayé fp-growth avec python
J'ai essayé de gratter avec Python
Obtenez des données Youtube avec python
J'ai essayé gRPC avec Python
J'ai essayé de gratter avec du python
[Bases de la science des données] J'ai essayé d'enregistrer de csv à mysql avec python
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
J'ai essayé l'analyse de données IRMf avec python (Introduction au décodage des informations cérébrales)
J'ai essayé d'obtenir les informations sur le film de l'API TMDb avec Python
J'ai essayé d'implémenter Mine Sweeper sur un terminal avec python
J'ai essayé de toucher un fichier CSV avec Python
J'ai essayé de résoudre Soma Cube avec python
J'ai essayé d'implémenter le perceptron artificiel avec python
J'ai essayé de résoudre le problème avec Python Vol.1
[Python] J'ai essayé d'obtenir Json de squid ring 2
J'ai essayé de résoudre la théorie des nombres entiers d'AOJ avec Python
Lien pour commencer avec python
J'ai essayé de toucher Python (installation)
J'ai essayé webScraping avec python.
[Python] Obtenez des données économiques avec DataReader
Comment démarrer avec Python
Je veux déboguer avec Python
J'ai essayé d'exécuter prolog avec python 3.8.2.
J'ai essayé la communication SMTP avec Python
J'ai essayé d'obtenir et d'analyser les données statistiques de la nouvelle Corona avec Python: données de l'Université John's Hopkins
J'ai essayé de trouver l'entropie de l'image avec python
Je veux pouvoir analyser des données avec Python (partie 3)
J'ai essayé de simuler la propagation de l'infection avec Python
J'ai essayé différentes méthodes pour envoyer du courrier japonais avec Python
Je veux pouvoir analyser des données avec Python (partie 1)
Je veux pouvoir analyser des données avec Python (partie 4)
Je veux pouvoir analyser des données avec Python (partie 2)
J'ai essayé "Comment obtenir une méthode décorée en Python"
J'ai essayé de commencer avec Hy ・ Définir une classe
[Python] J'ai essayé de visualiser des tweets sur Corona avec WordCloud
Mayungo's Python Learning Episode 3: J'ai essayé d'imprimer des nombres
J'ai essayé de créer une interface graphique à trois yeux côte à côte avec Python et Tkinter
Obtenez des données supplémentaires vers LDAP avec python (Writer et Reader)
[Introduction à Python] Comment obtenir des données avec la fonction listdir
J'ai essayé d'obtenir rapidement des données d'AS / 400 en utilisant pypyodbc
J'ai essayé d'agréger et de comparer les données de prix unitaires par langue avec Real Gachi by Python
J'ai essayé de créer un cadre de données pandas en grattant les informations de rappel d'aliments avec Python
J'ai essayé de résumer la gestion des exceptions Python
J'ai essayé d'implémenter PLSA en Python
[Note] Obtenir des données de PostgreSQL avec Python
J'ai essayé d'implémenter Autoencoder avec TensorFlow