Convertir un panel agregado en una consulta programada - Amazon Timestream

Para obtener capacidades similares a las de Amazon Timestream, considere Amazon Timestream LiveAnalytics para InfluxDB. Ofrece una ingesta de datos simplificada y tiempos de respuesta a las consultas en milisegundos de un solo dígito para realizar análisis en tiempo real. Obtenga más información aquí.

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Convertir un panel agregado en una consulta programada

Suponga que está calculando las estadísticas de toda la flota, como la cantidad de hosts de la flota según los cinco microservicios y las seis regiones en las que está implementando su servicio. En la siguiente instantánea, puede observar que hay 500 000 servidores que emiten métricas y que algunas de las regiones más grandes (por ejemplo, us-east-1) tienen más de 200 000 servidores.

Al calcular estos agregados, en los que se calculan nombres de instancias distintas en cientos de gigabytes de datos, puede producirse una latencia de consulta de decenas de segundos, además del costo de digitalización de los datos.

Instance counts for microservices: apollo and zeus 150k, hercules 100k, athena and demeter 50k each.

Consulta original del panel

El agregado que se muestra en el panel de control del panel se calcula a partir de datos sin procesar mediante la consulta que se encuentra a continuación. La consulta utiliza varios constructos de SQL, como recuentos distintos y varias funciones de agregación.

SELECT CASE WHEN microservice_name = 'apollo' THEN num_instances ELSE NULL END AS apollo, CASE WHEN microservice_name = 'athena' THEN num_instances ELSE NULL END AS athena, CASE WHEN microservice_name = 'demeter' THEN num_instances ELSE NULL END AS demeter, CASE WHEN microservice_name = 'hercules' THEN num_instances ELSE NULL END AS hercules, CASE WHEN microservice_name = 'zeus' THEN num_instances ELSE NULL END AS zeus FROM ( SELECT microservice_name, SUM(num_instances) AS num_instances FROM ( SELECT microservice_name, COUNT(DISTINCT instance_name) as num_instances FROM "raw_data"."devops" WHERE time BETWEEN from_milliseconds(1636526171043) AND from_milliseconds(1636612571043) AND measure_name = 'metrics' GROUP BY region, cell, silo, availability_zone, microservice_name ) GROUP BY microservice_name )

Convertir en una consulta programada

La consulta anterior puede convertirse en una consulta programada de la siguiente manera. Primero debe calcular los distintos nombres de host de una implementación determinada en una región, celda, silo, zona de disponibilidad y microservicio. A continuación, se suman los hosts para calcular un recuento por hora y por microservicio. Al utilizar el parámetro @scheduled_runtime compatible con las consultas programadas, puede volver a calcularlo para la última hora en que se invoque la consulta. La bin(@scheduled_runtime, 1h) en la cláusula WHERE de la consulta interna garantiza que, incluso si la consulta está programada a media hora, se seguirán obteniendo los datos de toda la hora.

Aunque la consulta calcula los agregados por hora, como se verá en la configuración de cálculo programado, está configurada para que se actualice cada media hora, de modo que pueda recibir las actualizaciones en la tabla derivada con mayor rapidez. Puede ajustarlo en función de los requisitos de actualización, por ejemplo, volver a calcular los agregados cada 15 minutos o volver a calcularlos según los límites horarios.

SELECT microservice_name, hour, SUM(num_instances) AS num_instances FROM ( SELECT microservice_name, bin(time, 1h) AS hour, COUNT(DISTINCT instance_name) as num_instances FROM raw_data.devops WHERE time BETWEEN bin(@scheduled_runtime, 1h) - 1h AND @scheduled_runtime AND measure_name = 'metrics' GROUP BY region, cell, silo, availability_zone, microservice_name, bin(time, 1h) ) GROUP BY microservice_name, hour
{ "Name": "MultiPT30mHostCountMicroservicePerHr", "QueryString": "SELECT microservice_name, hour, SUM(num_instances) AS num_instances FROM ( SELECT microservice_name, bin(time, 1h) AS hour, COUNT(DISTINCT instance_name) as num_instances FROM raw_data.devops WHERE time BETWEEN bin(@scheduled_runtime, 1h) - 1h AND @scheduled_runtime AND measure_name = 'metrics' GROUP BY region, cell, silo, availability_zone, microservice_name, bin(time, 1h) ) GROUP BY microservice_name, hour", "ScheduleConfiguration": { "ScheduleExpression": "cron(0/30 * * * ? *)" }, "NotificationConfiguration": { "SnsConfiguration": { "TopicArn": "******" } }, "TargetConfiguration": { "TimestreamConfiguration": { "DatabaseName": "derived", "TableName": "host_count_pt1h", "TimeColumn": "hour", "DimensionMappings": [ { "Name": "microservice_name", "DimensionValueType": "VARCHAR" } ], "MultiMeasureMappings": { "TargetMultiMeasureName": "num_instances", "MultiMeasureAttributeMappings": [ { "SourceColumn": "num_instances", "MeasureValueType": "BIGINT" } ] } } }, "ErrorReportConfiguration": { "S3Configuration" : { "BucketName" : "******", "ObjectKeyPrefix": "errors", "EncryptionOption": "SSE_S3" } }, "ScheduledQueryExecutionRoleArn": "******" }

Uso de los resultados calculados previamente en un nuevo panel

Ahora verá cómo crear su panel de vista agregada mediante el uso de la tabla derivada de la consulta programada que creó. A partir de la instantánea del panel, también podrá validar que los agregados calculados a partir de la tabla derivada y la tabla base coinciden. Una vez que haya creado los paneles con las tablas derivadas, observará que el tiempo de carga es considerablemente más rápido y los costos más bajos que supone utilizar las tablas derivadas en comparación con el cálculo de estos agregados a partir de los datos sin procesar. A continuación, se muestra una instantánea del panel con datos calculados previamente y la consulta utilizada para representar este panel con datos calculados de manera previa y almacenados en la tabla como "derived"."host_count_pt1h". Tenga en cuenta que la estructura de la consulta es muy similar a la consulta que se utilizó en el panel sobre datos sin procesar, excepto que utiliza la tabla derivada, que ya calcula los distintos recuentos que esta consulta agrega.

Instance count by microservice showing values for apollo, athena, demeter, hercules, and zeus.
SELECT CASE WHEN microservice_name = 'apollo' THEN num_instances ELSE NULL END AS apollo, CASE WHEN microservice_name = 'athena' THEN num_instances ELSE NULL END AS athena, CASE WHEN microservice_name = 'demeter' THEN num_instances ELSE NULL END AS demeter, CASE WHEN microservice_name = 'hercules' THEN num_instances ELSE NULL END AS hercules, CASE WHEN microservice_name = 'zeus' THEN num_instances ELSE NULL END AS zeus FROM ( SELECT microservice_name, AVG(num_instances) AS num_instances FROM ( SELECT microservice_name, bin(time, 1h), SUM(num_instances) as num_instances FROM "derived"."host_count_pt1h" WHERE time BETWEEN from_milliseconds(1636567785421) AND from_milliseconds(1636654185421) AND measure_name = 'num_instances' GROUP BY microservice_name, bin(time, 1h) ) GROUP BY microservice_name )