Amazon Timestream, une base de données de séries chronologiques entièrement gérée, a été rendue publique le 30 septembre, alors touchons-y. Je connais la base de données des séries chronologiques depuis longtemps, mais je ne l'ai jamais utilisée, donc j'ai hâte d'y être.
C'est trop nouveau et ni CloudFormation ni Terraform ne sont encore pris en charge, donc cette fois je vais l'essayer depuis la console. Au fait, il n'est pas encore disponible dans la région de Tokyo, alors pointons la console vers la région disponible.
Eh bien, je n'étais pas sûr quand j'ai essayé de le faire moi-même, donc dans un tel cas [Tutoriel](https://aws.amazon.com/jp/blogs/news/store-and-access-time-series-data- Ce serait une pratique courante de le faire en regardant à n'importe quelle échelle avec amazon-timestream-now-general-available /).
Appuyez sur le bouton "Créer une base de données" sur l'écran suivant de Timestream.
Ensuite, définissez le nom de la base de données sur l'écran de création de base de données ouvert.
Si vous laissez les paramètres KMS vides, ils créeront la clé pour vous. Définissez la balise comme vous le souhaitez et appuyez sur le bouton "Créer une base de données".
Création terminée!
Maintenant, appuyons sur le lien du nom de table créé dans ↑. Il y a un bouton «Créer une table» sur l'écran des détails de la base de données, alors appuyez dessus.
Ensuite, définissez le nom de la table sur l'écran de création de table ouvert.
Le paramètre de stockage des données est un essai cette fois, c'est donc un manuel.
Définissez la balise comme vous le souhaitez et appuyez sur le bouton "Créer un tableau".
La création de la table est terminée!
Ce n'est pas amusant de faire comme le tutoriel, alors enregistrons Sortie de données par Locust.
Les données à enregistrer sont les suivantes.
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
Créez une commande dans le Python suivant et chargez-la. Vous n'êtes peut-être pas familier avec les dimensions, mais en bref, vous pouvez les considérer comme des informations d'attribut pour la classification. Cette fois, nous avons défini les ressources et méthodes HTTP comme des attributs.
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)
Cependant, comme il s'agit d'une fonctionnalité qui vient d'être rendue publique, certaines personnes peuvent avoir une version plus ancienne de boto3.
$ pip list -o
Alors, vérifions si boto3 est le dernier.
Package Version Latest Type
--------------------- -------- ---------- -----
boto3 1.13.26 1.16.4 wheel
Mettre à jour avec pip avec `` -U```.
$ pip install -U boto3
Aussi, utilisez aws configure
pour pointer la région par défaut vers la région où la base de données a été créée avec ↑.
Si psutil n'est pas inclus, installez-le comme suit.
$ yum install python3-devel
$ pip3 install psutil
Je pense que cela sera corrigé bientôt, mais à partir du 25 octobre 2020, le nom de la commande est erroné dans le blog officiel de ↑, donc si vous croyez au blog et à pip3, vous ne pourrez pas l'installer et vous vous sentirez triste.
Au fait, était-il possible de charger les données en toute sécurité?
Si vous sélectionnez "Editeur de requête" dans le menu de gauche, l'écran suivant sera affiché, alors exécutons SQL tout en réduisant les attributs au texte. Je veux connaître le temps de réponse moyen des requêtes GET dans / xxxxx /!
Quand je l'ai exécuté, seules les informations que je voulais ont été extraites!
Pour obtenir cela sous forme de données brutes, récupérez-le à nouveau avec CLI ou boto3. C'est assez gênant car un page nator est nécessaire. En premier lieu, il est facile d'utiliser des pandas pour une petite quantité, mais dans la scène d'utilisation réelle, les informations collectées avec un certain sens sur des milliers de serveurs, etc. sont rapidement récupérées, donc avec la quantité d'informations qui peuvent être formatées localement avec des pandas Il ne devrait pas y en avoir. Le fait qu'il puisse être surveillé en temps réel en combinaison avec Grafana est la vraie valeur.
Recommended Posts