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.
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).
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.
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