[PYTHON] [blackbird-dynamodb] Überwachung von AWS DynamoDB

Dieses Plug-in erhält verschiedene Metriken von DynamoDB.

What metric does it get?

Sie können Metriken in jeder Tabelle und Antwortzeiten in jeder API abrufen.

Table Metrics

Zunächst aus den Metriken jeder Tabelle. Die Statistik in der folgenden Tabelle zeigt, welche Formel zu erhalten ist (Summe ist der Gesamtwert pro Zeiteinheit, Durchschnitt ist der Durchschnittswert pro Zeiteinheit).

Metric Name Statistics Detail
UserErrors Sum Client-Fehler
SystemErros Sum AWS-Seitenfehler(Ich möchte denken, dass es nur wenige geben wird)
ThrottleRequests Sum Anzahl der gedrosselten Anforderungen, die das Limit für bereitgestellte Kapazitätseinheiten erreicht haben
ReadThrottleEvents Sum Lesen Sie Anforderungen, die die Obergrenze der bereitgestellten Kapazitätseinheiten erreicht haben
WriteThrottleEvents Sum Schreiben Sie Anforderungen, die die Obergrenze der bereitgestellten Kapazitätseinheiten erreicht haben
ProvisionedReadCapacityUnits Maximum Anzahl der in der Tabelle angegebenen ProvisionedReadCapacityUnits
ProvisionedWriteCapacityUnits Maximum Anzahl der in der Tabelle angegebenen ProvisionedWriteCapacityUnits
ConsumedReadCapacityUnits Maximum Maximale Anzahl der pro Zeiteinheit verbrauchten Lesekapazitätseinheiten
ConsumedReadCapacityUnits Average Durchschnittliche Anzahl der pro Zeiteinheit verbrauchten Lesekapazitätseinheiten
ConsumedWriteCapacityUnits Maximum Maximale Anzahl der pro Zeiteinheit verbrauchten WriteCapacityUnits
ConsumedWriteCapacityUnits Average Durchschnittliche Anzahl der pro Zeiteinheit verbrauchten WriteCapacityUnits

about UserErrors

Ich denke, es fühlt sich wie UserErrors an, aber es ist ein Fehler beim Aufrufen von DynamoDB auf der SDK-Seite. Insbesondere, wenn der 4XX-Statuscode zurückgegeben wird.

about Each CapacityUnits

DynamoDB ist eine verteilte Datenbank mit mehreren Shards auf der Rückseite. Die von Ihnen festgelegten CapacityUnits werden jedoch der gesamten Tabelle zugewiesen. Es ist leicht zu glauben, dass es kein Problem gibt, da sich der Splitter proportional zur Größe der Kapazitätseinheiten teilt und skaliert. Ich finde es großartig, dass Sie sich nicht um Skalierung oder Belastung kümmern müssen.

Da CapacityUnits jedoch der Tabelle zugewiesen ist, ist jeder Shard der Wert geteilt durch die Anzahl der Shards. Ich erhalte eine LimitExceededException, obwohl ConsumedReadCapacityUnits das Limit überhaupt nicht erreicht hat! !! !! !! Das kann Passieren.

Dies liegt daran, dass (wenn Sie die Dokumentation richtig lesen, ist sie recht gut geschrieben, aber ...) der Hash-Schlüssel weit verbreitet ist und der Wert hart ist, sodass ein heißer Shard erstellt wird. Sobald es passiert ist, denke ich, dass es ziemlich schwierig ist, es zu beheben, deshalb würde ich es gerne in der Entwurfsphase gut machen, wenn es möglich ist.

Each Operation Metrics

Sie können die Antwortzeit abrufen, wenn die API erfolgreich ist, und die Anzahl der Elemente, die bei der Ausgabe der Bereichsabfrage zurückgegeben werden. Seien Sie beispielsweise vorsichtig, wenn die Scan-API oder die Abfrage-API zu viele Elemente zurückgibt. (Wenn überhaupt, werden Sie anscheinend feststellen, dass sich die Latenz von ELB zuerst verschlechtert hat.)

In Bezug auf ResponseTime gibt es Folgendes:

Für die Anzahl der erworbenen Artikel

es gibt. Beide Werte sind auf Maximum und Durchschnitt ausgelegt.

How to Install

EntschuldigungIch habe Pip und RPM noch nicht vorbereitet, daher werde ich so schnell wie möglich antworten.

Configuration

Die Optionen sind wie folgt.

Key Name Default Require Detail
region_name us-east-1 No Name der AWS-Region
aws_access_key_id - Yes AWS Acces Key ID
aws_secret_access_key - Yes AWS Secret Access Key
table_name - Yes Tabellenname von DynamoDB
hostname - Yes Hostname auf Zabbix(Es ist eine gute Idee, es zuerst zu machen)
module - Yes Welches Plugin soll man also hier verwendendynamodbIst festgelegt bei
ignore_metrics - No Wenn es eine Metrik gibt, die Sie nicht erhalten möchten, schreiben Sie sie bitte durch Kommas getrennt.
ignore_operations - No Wenn es eine Operationsmetrik gibt, die Sie nicht erhalten möchten, trennen Sie sie bitte durch ein Komma.

about ignore_XXXXX parameter

Wenn es Werte gibt, die Sie für ignore_metrics nicht erhalten möchten (CloudWatch kostet auch Geld, um API über die einmonatige kostenlose Stufe hinaus aufzurufen), trennen Sie diese bitte durch Kommas wie "ignore_metrics = UserErrors, ConsumedWriteCapacityUnits".

Gleiches gilt für ignore_operations. Wenn Sie die BatchWrite- und Scan-API nicht verwenden, schreiben Sie bitte mit ignore_operations = BatchWriteItem, Scan!

Example

Dies ist eine Beispielkonfigurationsdatei

#Der Abschnittsname kann beliebig sein, aber es ist der Name des Threads, der intern generiert wird. Daher ist es möglicherweise besser, ihn nicht mit anderen zu tragen. Da das Debug-Protokoll einen Thread-Namen hat, verwende ich den Namen der DynamoDB-Tabelle.
[ANYTHING_OK]

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

#Bitte geben Sie den Tabellennamen von DynamoDB ein
table_name = YOUR_DYNAMODB_TABLE_NAME

#Hostname auf Zabbix. Aufgrund von Einschränkungen für zabbix frage ich mich, was ich tun soll, wenn es nicht an einen solchen Server gebunden ist, aber ich erstelle und verwende denselben Hostnamen wie den Tabellennamen.
hostname = HOSTNAME_ON_ZBX_SERVER

#Es ist auf dynamodb festgelegt.
module = dynamodb

Es sieht aus wie das!

Recommended Posts

[blackbird-dynamodb] Überwachung von AWS DynamoDB
[blackbird-rds] Überwachung von AWS RDS
[blackbird-sqs] Überwachung von AWS SQS
[blackbird-elb] Überwachung von AWS ElasticLoadBalancing
[Amsel-Elastik] Überwachung von AWS ElastiCache (Redis)
[blackbird-aws-service-limits] Überwachung der AWS-Servicelimits
[Amsel-Kinesis-Stream] Überwachung von AWS KinesisStream
AWS IoT Device Alive Monitoring