[PYTHON] [blackbird-dynamodb] Surveillance d'AWS DynamoDB

Ce Plug-in obtient diverses métriques de DynamoDB.

What metric does it get?

Vous pouvez obtenir des métriques dans chaque table et le temps de réponse dans chaque API.

Table Metrics

Tout d'abord, à partir des métriques de chaque table. Les statistiques du tableau ci-dessous indiquent la formule à obtenir (la somme est la valeur totale par unité de temps, la moyenne est la valeur moyenne par unité de temps).

Metric Name Statistics Detail
UserErrors Sum Erreur client
SystemErros Sum Erreur côté AWS(Je veux penser qu'il y en aura peu)
ThrottleRequests Sum Nombre de demandes limitées ayant atteint la limite d'unités de capacité provisionnées
ReadThrottleEvents Sum Lire les demandes qui ont atteint la limite supérieure des unités de capacité provisionnées
WriteThrottleEvents Sum Ecrire les demandes qui ont atteint la limite supérieure des unités de capacité provisionnées
ProvisionedReadCapacityUnits Maximum Nombre de ProvisionedReadCapacityUnits spécifié dans la table
ProvisionedWriteCapacityUnits Maximum Nombre de ProvisionedWriteCapacityUnits spécifié dans la table
ConsumedReadCapacityUnits Maximum Nombre maximum d'unités de capacité de lecture consommées par unité de temps
ConsumedReadCapacityUnits Average Nombre moyen d'unités de capacité de lecture consommées par unité de temps
ConsumedWriteCapacityUnits Maximum Nombre maximum de WriteCapacityUnits consommés par unité de temps
ConsumedWriteCapacityUnits Average Nombre moyen d'unités WriteCapacityUnits consommées par unité de temps

about UserErrors

Je pense que cela ressemble à UserErrors, mais c'est une erreur lors de l'appel de DynamoDB du côté du SDK. Plus précisément, lorsque le code d'état 4XX est renvoyé.

about Each CapacityUnits

DynamoDB est une base de données distribuée avec plusieurs fragments à l'arrière. Cependant, les CapacityUnits que vous définissez sont affectés à l'ensemble de la table. Il est facile de penser qu'il n'y a pas de problème car le fragment se divise et se met à l'échelle proportionnellement à la taille des unités de capacité. Je pense que c'est génial que vous n'ayez pas à vous soucier de la montée en charge ou de la charge.

Cependant, comme CapacityUnits est affecté à Table, chaque partition aura la valeur divisée par le nombre de partitions. J'obtiens une LimitExceededException même si ConsumedReadCapacityUnits n'a pas du tout atteint la limite! !! !! !! Cela peut arriver.

C'est parce que (enfin, si vous lisez correctement la documentation, elle est assez bien écrite, mais ...), la clé de hachage est largement distribuée et la valeur est difficile, donc le fragment chaud est créé. Une fois que cela se produit, je pense que c'est assez difficile de le réparer, donc j'aimerais bien le faire au stade de la conception si possible.

Each Operation Metrics

Vous pouvez obtenir le temps de réponse lorsque l'API réussit et le nombre d'éléments renvoyés lors de l'émission de la requête de plage. Faites attention, par exemple, si l'API d'analyse ou l'API de requête renvoie trop d'éléments. (Si quoi que ce soit, il semble que vous remarquerez que la latence de l'ELB s'est d'abord détériorée)

Concernant ResponseTime, il y a les éléments suivants,

Pour le nombre d'articles acquis

il y a. Les deux valeurs sont conçues pour obtenir le maximum et la moyenne.

How to Install

Excusez-moiJe n'ai pas encore préparé pip et RPM, donc je vais répondre dès que possible.

Configuration

Les options sont les suivantes.

Key Name Default Require Detail
region_name us-east-1 No Nom de la région AWS
aws_access_key_id - Yes AWS Acces Key ID
aws_secret_access_key - Yes AWS Secret Access Key
table_name - Yes Nom de table de DynamoDB
hostname - Yes Nom d'hôte sur Zabbix(Faites-le en premier)
module - Yes Quel plugin utiliser, alors icidynamodbEst fixé à
ignore_metrics - No S'il y a une métrique que vous ne souhaitez pas obtenir, veuillez l'écrire séparée par des virgules.
ignore_operations - No S'il y a une métrique d'opération que vous ne souhaitez pas obtenir, veuillez la séparer par une virgule.

about ignore_XXXXX parameter

S'il y a des valeurs que vous ne souhaitez pas obtenir pour ignore_metrics (CloudWatch coûte également de l'argent pour appeler l'API au-delà du mois gratuit), veuillez les séparer par des virgules comme ʻignore_metrics = UserErrors, ConsumedWriteCapacityUnits`.

La même chose est vraie pour ignore_operations, et si vous n'utilisez pas l'API BatchWrite et Scan, veuillez écrire comme ʻignore_operations = BatchWriteItem, Scan`!

Example

Ceci est un exemple de fichier de configuration

#Le nom de la section peut être n'importe quoi, mais ce sera le nom du thread qui est généré en interne, il peut donc être préférable de ne pas le porter avec d'autres. Étant donné que le journal de débogage a un nom de thread, j'utilise le nom de la table DynamoDB.
[ANYTHING_OK]

# AWS Information
region_name = ap-northeast-1
aws_access_key_id = XXXXXXXXXX
aws_secret_access_key = YYYYYYYYYY

#Veuillez saisir le nom de la table DynamoDB
table_name = YOUR_DYNAMODB_TABLE_NAME

#Nom d'hôte sur Zabbix. En raison des restrictions sur zabbix, je me demande quoi faire s'il n'est pas lié à un tel serveur, mais je crée et utilise le même nom d'hôte que le nom de la table.
hostname = HOSTNAME_ON_ZBX_SERVER

#Il est fixé à dynamodb.
module = dynamodb

Ça ressemble à ça!

Recommended Posts

[blackbird-dynamodb] Surveillance d'AWS DynamoDB
[blackbird-rds] Surveillance d'AWS RDS
[blackbird-sqs] Surveillance d'AWS SQS
[blackbird-elb] Surveillance d'AWS ElasticLoadBalancing
[blackbird-elasticache] Surveillance d'AWS ElastiCache (redis)
[blackbird-aws-service-limits] Surveillance des limites de service AWS
[blackbird-kinesis-stream] Surveillance d'AWS KinesisStream
Surveillance active des appareils AWS IoT