Appel de l'API CloudWatch (utilisation dans le plugin Blackbird AWS)

C'est peut-être un article peu courant, mais utilisons boto pour accéder à l'API CloudWatch afin d'obtenir diverses métriques. Ce mécanisme est également utilisé dans divers plugins AWS de blackbird, et approfondissons ensemble notre compréhension de NameSpace et de ces éléments conceptuels dans CloudWatch.

CloudWatch Outline

Le concept de base de CloudWatch est

Il y a. Ensuite, ce n'est pas dans un ordre particulier, mais je suivrai dans l'ordre de celui qui est facile à comprendre.

Metrics

Les métriques sont l'un des concepts les plus simples, du point de vue Zabbix, Items. C'est une image qu'un élément contient diverses valeurs dans l'ordre chronologique. Par exemple, dans le cas de RDS, la valeur de la quantité de swap a été permutée est entrée en octets dans les métriques appelées Swap Usage.

Namespaces

Les espaces de noms sont un grand nombre des métriques ci-dessus, qui sont gentilles et quantitatives. En termes Zabbix, cela correspond au concept d'hôte (ou aussi de groupes d'hôtes).

Il semble qu'il existe une métrique appelée Swap Usage ou une métrique appelée Connexions de base de données dans un hôte appelé db001.

Dimensions

Les dimensions sont un peu moelleuses et déroutantes (du moins je le pensais). En termes de Zabbix, ce sera Application (si HostGroup est Namespaces, Host sera Dimensions).

Periods

Du point de vue de l'API pour obtenir la métrique, cela correspond à 1min, 5min en Avg (1min) ou Avg (5min) du point de vue de CloudWatch UI, selon l'intervalle de données acquis. C'est la période de temps.

Time stamps

C'est un horodatage. Des horodatages sont définis pour chaque métrique dans les espaces de noms pour indiquer quelle est la métrique de temps et combien. Quiconque envoie parfois des données avec un horodatage sur Zabbix Sender peut le considérer comme l'équivalent de cet horodatage.

Statistics

En japonais, c'est considéré comme des statistiques, mais je me demande si c'est plus proche de la méthode personnellement que des statistiques, et comment récupérer des données. Cela peut être disponible ou non avec Metric.

Par exemple, si l'unité de métrique est Bytes, Sum calculera le total des octets par unité de temps, Average indiquera la moyenne par unité de temps et Count indiquera la fréquence d'occurrence.

Dans Zabbix, je pense que cela correspond au calcul au moment de l'enregistrement, mais la grande différence est que vous ne pouvez mettre que des données brutes et appeler des statistiques arbitraires lors de la récupération.

Units

Comme son nom l'indique, c'est une unité. Il peut s'agir d'octets, d'octets / seconde, de% ou du nombre de fois (simplement un nombre).

How to get CloudWatch metrics

Maintenant que vous avez une idée générale de ce que vous faites, utilisons réellement l'API CloudWatch pour obtenir des métriques. Tout d'abord

pip install boto

Installation de boto. boto est une bibliothèque de liaisons Python pour appeler les API AWS, bien qu'il ne soit pas nécessaire de l'expliquer. Même blackbird utilise boto en interne.

Obtenir une connexion pour CloudWatch

Le nom de la classe est boto.ec2.cloudwatch.CloudWatchConnection, mais l'image est comme un objet jeton API.

import datetime

import boto.ec2.cloudwatch

conn = boto.ec2.cloudwatch.connect_to_region(
    region_name='ap-northeast-1',
    aws_access_key_id='YOUR_AWS_ACCESS_KEY_ID',
    aws_secret_access_key='YOUR_AWS_SECRET_ACCESS_KEY'
)

Si vous donnez les informations d'identification correctes ici, vous obtiendrez une instance de connexion. Ainsi, lorsque j'essaie d'obtenir le nombre de demandes pendant 15 minutes à partir du dernier ELB et Sum toutes les 5 minutes à l'aide de l'instance de connexion


end_time = datetime.datetime.utcnow()
start_time = end_time - datetime.timedelta(minutes=15)

metrics = conn.get_metric_statistics(
    #période spécifie le nombre de secondes avec int
    period=300,
    #start_time est le début de la période d'horodatage datetime.Spécifié par l'objet datetime
    start_time=start_time,
    #end_l'heure est de commencer_Comme le temps
    #datetime à la fin de la période d'horodatage.Spécifié par l'objet datetime
    end_time=end_time,
    #metric_Comme son nom l'indique, spécifiez le nom de la métrique avec str
    metric_name='RequestCount',
    #Spécifiez l'espace de noms avec str
    namespace='AWS/ELB',
    statistics='Sum',
    #Les dimensions spécifient la clé et la valeur avec le dictionnaire
    dimensions={
        'LoadBalancerName': 'YOUR_ELB_NAME',
        'AvailabilityZone': 'ap-northeast-1a'
    },
    #Certaines unités n'ont pas de sens même si elles sont spécifiées en métrique
    unit=None
)

print metrics

Une telle valeur sera retournée.

[
    {
        u'Timestamp': datetime.datetime(2014, 12, 7, 10, 48),
        u'Sum': 143426.0,
        u'Unit': u'Count'
    },
    {
        u'Timestamp': datetime.datetime(2014, 12, 7, 10, 38),
        u'Sum': 135535.0,
        u'Unit': u'Count'
    },
    {
        u'Timestamp': datetime.datetime(2014, 12, 7, 10, 43),
        u'Sum': 139088.0,
        u'Unit': u'Count'
    }
]

Un dictionnaire avec Timestamp comme clé, l'objet datetime.datetime comme valeur, les statistiques spécifiées comme clé, la valeur Metrics comme valeur, l'unité comme clé et le nom de l'unité spécifiée (ou par défaut) comme valeur. La liste de est retournée (c'est évident à partir de la structure ci-dessus).

Ainsi, blackbird envoie des données au serveur zabbix sur cette base.

Recommended Posts

Appel de l'API CloudWatch (utilisation dans le plugin Blackbird AWS)
Fonctionnement de la souris à l'aide de l'API Windows en Python
Essayez d'utiliser l'API Wunderlist en Python
Essayez d'utiliser l'API Kraken avec Python
Recevoir des e-mails à l'aide de l'API Gmail en Java
Tweet à l'aide de l'API Twitter en Python
Obtenez des données Youtube en Python à l'aide de l'API Youtube Data
J'ai essayé d'utiliser l'API Detect Labels d'AWS Rekognition
Essayez d'utiliser l'API BitFlyer Ligntning en Python
Obtenir l'URL de l'image à l'aide de l'API Flickr en Python
Jugons les émotions à l'aide de l'API Emotion en Python
Essayez d'utiliser l'API ChatWork et l'API Qiita en Python
Essayez d'utiliser l'API DropBox Core avec Python
Importez un fichier JPG à l'aide de l'API Google Drive en Python
[AWS IoT] Enregistrer des éléments dans AWS IoT à l'aide du SDK AWS IoT Python
Obtenez des données LEAD à l'aide de l'API REST de Marketo en Python
Essayez de supprimer des tweets en masse à l'aide de l'API de Twitter
OpenVINO utilisant l'API Python d'Inference Engine dans un environnement PC
Utiliser l'API de recherche de la Bibliothèque du Parlement national en Python