[PYTHON] Versuchen Sie, Amazon Timestream auszuführen

Einführung

Amazon Timestream, eine vollständig verwaltete Zeitreihendatenbank, wurde am 30. September für die Öffentlichkeit freigegeben. Ich kenne die Zeitreihendatenbank schon lange, habe sie aber nie benutzt und freue mich darauf.

Es ist zu neu und weder CloudFormation noch Terraform werden noch unterstützt. Dieses Mal werde ich es über die Konsole versuchen. Übrigens ist es in der Region Tokio noch nicht verfügbar. Zeigen wir die Konsole also auf die verfügbare Region.

Versuchen Sie, eine Datenbank zu erstellen

Nun, ich war mir nicht sicher, wann ich versucht habe, es selbst zu machen, also in einem solchen Fall [Tutorial](https://aws.amazon.com/jp/blogs/news/store-and-access-time-series-data- Es wäre eine Standardpraxis, dies zu tun, während Sie in jedem Maßstab mit Amazon-Zeitstrom schauen, der jetzt allgemein verfügbar ist /).

Klicken Sie im folgenden Bildschirm von Timestream auf die Schaltfläche "Datenbank erstellen".

キャプチャ1.png

Legen Sie dann den Datenbanknamen auf dem geöffneten Bildschirm zur Datenbankerstellung fest.

キャプチャ2.png

Wenn Sie die KMS-Einstellungen leer lassen, wird der Schlüssel für Sie erstellt. Stellen Sie das Tag nach Ihren Wünschen ein und klicken Sie auf die Schaltfläche "Datenbank erstellen".

キャプチャ3.png

Erstellung abgeschlossen!

キャプチャ4.png

Versuche einen Tisch zu machen

Drücken wir nun auf den Link des in ↑ erstellten Tabellennamens. Auf dem Bildschirm mit den Datenbankdetails befindet sich die Schaltfläche "Tabelle erstellen". Drücken Sie also darauf.

Legen Sie dann den Tabellennamen auf dem geöffneten Bildschirm zum Erstellen von Tabellen fest.

キャプチャ5.png

Die Datenspeichereinstellung ist diesmal eine Testversion, es handelt sich also um ein Lehrbuch.

キャプチャ6.png

Stellen Sie das Tag nach Ihren Wünschen ein und klicken Sie auf die Schaltfläche "Tabelle erstellen".

キャプチャ7.png

Die Tabellenerstellung ist abgeschlossen!

キャプチャ8.png

Daten registrieren

Es macht keinen Spaß, es wie das Tutorial zu gestalten. Registrieren wir also Datenausgabe von Locust.

Die zu registrierenden Daten lauten wie folgt.

Timestamp,User Count,Type,Name,Requests/s,Failures/s,50%,66%,75%,80%,90%,95%,98%,99%,99.9%,99.99%,100%,Total Request Count,Total Failure Count,Total Median Response Time,Total Average Response Time,Total Min Response Time,Total Max Response Time,Total Average Content Size
1603535373,20,GET,/xxxxx/,1.000000,0.000000,5,6,6,6,8,9,9,9,9,9,9,16,0,4.11685699998543,5.413748562499876,4.11685699998543,9.385663000045952,14265.0

Erstellen Sie einen Befehl im folgenden Python und laden Sie ihn. Sie sind möglicherweise nicht mit Dimensionen vertraut, aber kurz gesagt, Sie können sie als Attributinformationen für die Klassifizierung betrachten. Dieses Mal haben wir HTTP-Ressourcen und -Methoden als Attribute definiert.

import sys
import csv
import time
import boto3
import psutil

from botocore.config import Config

FILENAME = sys.argv[1]

DATABASE_NAME = "xxxxx-test-timestream"
TABLE_NAME = "xxxxx-test-table"

def write_records(records):
    try:
        result = write_client.write_records(DatabaseName=DATABASE_NAME,
                                            TableName=TABLE_NAME,
                                            Records=records,
                                            CommonAttributes={})
        status = result['ResponseMetadata']['HTTPStatusCode']
        print("Processed %d records.WriteRecords Status: %s" %
              (len(records), status))
    except Exception as err:
        print("Error:", err)

if __name__ == '__main__':

    session = boto3.Session()
    write_client = session.client('timestream-write', config=Config(
        read_timeout=20, max_pool_connections=5000, retries={'max_attempts': 10}))
    query_client = session.client('timestream-query')

    with open(FILENAME) as f:
        reader = csv.reader(f, quoting=csv.QUOTE_NONE)

        for csv_record in reader:
            if csv_record[0] == 'Timestamp' or csv_record[3] == 'Aggregated':
                continue

            ts_records = []

            ts_columns = [
                { 'MeasureName': 'Requests/s',                  'MeasureValue': csv_record[4] },
                { 'MeasureName': '95Percentile Response Time',  'MeasureValue': csv_record[10] },
                { 'MeasureName': 'Total Median Response Time',  'MeasureValue': csv_record[18] },
                { 'MeasureName': 'Total Average Response Time', 'MeasureValue': csv_record[19] },
            ]

            for ts_column in ts_columns:
                ts_records.append ({
                    'Time': str(int(csv_record[0]) * 1000),
                    'Dimensions': [ {'Name': 'resource', 'Value': csv_record[3]}, {'Name': 'method', 'Value': csv_record[2]} ],
                    'MeasureName': ts_column['MeasureName'],
                    'MeasureValue': ts_column['MeasureValue'],
                    'MeasureValueType': 'DOUBLE'
                })

            write_records(ts_records)

Da es sich jedoch um eine Funktion handelt, die gerade für die Öffentlichkeit freigegeben wurde, haben einige Benutzer möglicherweise eine ältere Version von boto3.

$ pip list -o

Lassen Sie uns also überprüfen, ob boto3 die neueste Version ist.

Package               Version  Latest     Type
--------------------- -------- ---------- -----
boto3                 1.13.26  1.16.4     wheel

Update mit pip mit `` `-U```.

$ pip install -U boto3

Verwenden Sie außerdem `` `aws configure```, um die Standardregion auf die Region zu verweisen, in der die Datenbank mit ↑ erstellt wurde.

Wenn psutil nicht enthalten ist, installieren Sie es wie folgt.

$ yum install python3-devel
$ pip3 install psutil

Ich denke, es wird eines Tages behoben, aber ab dem 25. Oktober 2020 ist der Befehlsname im offiziellen Blog von ↑ falsch. Wenn Sie also an das Blog und pip3 glauben, können Sie es nicht installieren und werden traurig sein.

War es übrigens möglich, die Daten sicher zu laden?

Stellen Sie eine Abfrage

Wenn Sie im Menü links "Abfrage-Editor" auswählen, wird der folgende Bildschirm angezeigt. Führen Sie also SQL aus, während Sie die Attribute auf den Text eingrenzen. Ich möchte die durchschnittliche Antwortzeit von GET-Anfragen in / xxxxx / wissen!

image.png

Als ich es ausführte, wurden nur die gewünschten Informationen extrahiert!

キャプチャ10.png

Um dies als Rohdaten zu erhalten, rufen Sie es erneut mit CLI oder boto3 ab. Dies ist ziemlich problematisch, da ein Seiten-Nator erforderlich ist. Erstens ist es einfach, Pandas für eine kleine Menge zu verwenden, aber in der tatsächlichen Nutzungsszene können die von Tausenden von Servern usw. gesammelten Informationen schnell abgerufen werden, also mit der Menge an Informationen, die lokal mit Pandas formatiert werden können Das sollte es nicht geben. Der Punkt, an dem es in Kombination mit Grafana in Echtzeit überwacht werden kann, ist der wahre Wert.

Recommended Posts

Versuchen Sie, Amazon Timestream auszuführen
Versuchen Sie, Pyston 0.1 auszuführen
Versuchen Sie, CNN mit ChainerRL auszuführen
Versuchen Sie, Python mit Try Jupyter auszuführen
Versuchen Sie, Tensorflow auf Docker + Anaconda auszuführen
Versuchen Sie, OpenAM unter Amazon Linux zu installieren
Versuchen Sie, Jupyter mit VS-Code auszuführen
Versuchen Sie, Jupyter Notebook auf einem Mac auszuführen
Versuchen Sie es mit Amazon DynamoDB von Python
Versuchen Sie, die PlaidML-Bildbeurteilung auf einem Mac auszuführen
Versuchen Sie, Kobukis 3D-Simulator auf ROS auszuführen