Prometheus es una aplicación utilizada para la monitorización y alerta de sistemas. Prometheus almacena métricas como datos de series temporales, y cada métrica tiene un nombre asociado. Prometheus recopila datos utilizando un modelo pull, consultando una lista de fuentes de datos con una frecuencia de sondeo especificada. En Prometheus, el almacenamiento local tiene una limitación de tamaño. En Prometheus, el almacenamiento puede aumentarse utilizando soluciones de almacenamiento remoto. La solución Amazon Timestream para LiveAnalytics Prometheus Connector permite a Prometheus utilizar Timestream para LiveAnalytics como su sistema de almacenamiento remoto.
Al integrar Prometheus con Timestream for LiveAnalytics, puede liberar todo el potencial de sus datos de monitorización, obteniendo así una comprensión más completa del comportamiento del sistema e impulsando una toma de decisiones más informada. En concreto, Timestream for LiveAnalytics ofrece las siguientes ventajas:
Sin servidor y escalabilidad: Utilizando la arquitectura sin servidor de Timestream for LiveAnalytics, almacene grandes cantidades de datos de series temporales sin preocuparse por las limitaciones de almacenamiento local, lo que permite una retención más prolongada y un análisis más exhaustivo.
Correlación y análisis: Integre los datos de Prometheus con otras fuentes de datos en Timestream, lo que permite una visión más profunda y correlaciones entre diferentes conjuntos de datos.
Consultas basadas en SQL: Acceda y analice rápidamente los datos de Prometheus mediante SQL, lo que simplifica la realización de consultas ad hoc, la creación de cuadros de mando personalizados y la elaboración de informes.
Exploración de datos mejorada: Utilice las capacidades analíticas avanzadas de Timestream for LiveAnalytics, como la agregación, el filtrado y la agrupación, para obtener una comprensión más profunda del rendimiento y el comportamiento del sistema.
Rentabilidad: Reduzca los costes de almacenamiento descargando los datos de Prometheus a una solución de almacenamiento escalable basada en la nube.
El código fuente de Timestream for LiveAnalytics Prometheus Connector y la documentación adicional están disponibles en el sitio web de Amazon. Amazon Timestream para LiveAnalytics Prometheus Connector repositorio.
En este post, mostramos cómo puede utilizar Timestream for LiveAnalytics Prometheus Connector para utilizar Timestream for LiveAnalytics como almacenamiento remoto para Prometheus con un despliegue de un solo clic.
Visión general de la solución
Timestream for LiveAnalytics Prometheus Connector actúa como traductor entre Prometheus y Timestream for LiveAnalytics. Prometheus Connector recibe y envía datos de series temporales entre Prometheus y Timestream for LiveAnalytics a través de las funciones de escritura remota y lectura remota de Prometheus. La siguiente imagen proporciona una visión general de la arquitectura del conector.
El conector puede ejecutarse localmente, ejecutarse como un contenedor Docker o desplegarse como una aplicación de función AWS Lambda de AWS. Este post se centra en la opción recomendada, el despliegue con un solo clic, que despliega el conector como una función Lambda utilizando un archivo de AWS CloudFormation plantilla almacenada en un Amazon Simple Storage Service (Amazon S3) público. La siguiente imagen proporciona una visión general de los recursos creados cuando el conector se implementa como una plantilla de CloudFormation stack con despliegue de un solo clic.
La siguiente imagen muestra los recursos desplegados por la pila CloudFormation cuando está en uso.
La pila CloudFormation puede tardar unos cinco minutos en terminar de crear los recursos. Puede revisar el progreso en la consola de AWS CloudFormation en la pestaña Eventos de la pila. Una vez completado, el estado de la pila se muestra como CREAR_COMPLETO
. La pila despliega los siguientes recursos:
El conector Prometheus de Amazon Timestream for LiveAnalytics como función Lambda, que actúa como capa de traducción entre Prometheus y Timestream for LiveAnalytics.
Un sitio Amazon API Gatewayque enruta las solicitudes entrantes de Prometheus y devuelve las respuestas.
Una función de AWS IAM, utilizada para permitir la implementación de la función Lambda y API Gateway.
Una política de AWS IAM, utilizada para enviar logs a Amazon CloudWatch.
La pila CloudFormation proporciona los siguientes parámetros:
APIGatewayStageName
: El nombre de etapa predeterminado de la puerta de enlace de API. Por defecto es "dev".MemorySize
: El tamaño de memoria en MB de la función Lambda. El valor predeterminado es 512.ApiGatewayTimeoutInMillis
: La cantidad máxima de tiempo en milisegundos que un evento de API Gateway esperará antes de agotarse. El valor predeterminado es 30000.LambdaTimeoutInSeconds
: La cantidad de tiempo en segundos para ejecutar el conector en AWS Lambda antes de que se agote el tiempo de espera. El valor predeterminado es 30.ReadThrottlingBurstLimit
: El número de solicitudes de lectura en ráfaga por segundo que permite API Gateway. El valor predeterminado es 1200.WriteThrotlingBurstLimit
: Número de solicitudes de escritura en ráfaga por segundo que permite la puerta de enlace de API. El valor predeterminado es 1200.DefaultDatabase
: El nombre de la base de datos predeterminada de Prometheus. Por defecto es "PrometheusDatabase".DefaultTable
: El nombre de tabla por defecto de Prometheus. El valor predeterminado es "PrometheusMetricsTable".ExecutionPolicyName
: El nombre de la política de ejecución básica creada para AWS Lambda. El valor predeterminado es "LambdaExecutionPolicy".LogLevel
: El nivel de salida de los registros. Los valores válidos son info, warn, debug y error. El valor predeterminado es info.
Usted es responsable de los costes de los servicios de AWS utilizados en esta solución.
Uso del conector Prometheus de Timestream for LiveAnalytics:
Este post está destinado a ser utilizado como una guía de introducción y no cubre la configuración de cifrado TLS entre Prometheus y Amazon API Gateway. El cifrado TLS es muy recomendable cuando el conector Prometheus se despliega para producción. Para habilitar el cifrado TLS para producción, consulte Configuración de la autenticación TLS mutua para una API HTTP.
Requisitos previos
Se requieren algunos requisitos previos antes de utilizar el conector.
1. Registrarse en AWS - Cree una cuenta de AWS antes de comenzar. Para obtener más información sobre cómo crear una cuenta de AWS y recuperar sus credenciales de AWS, consulte Registrarse en AWS.
2. Crear un usuario IAM - Cree un usuario IAM con los permisos necesarios para implementar el conector con la implementación de un solo clic. Consulte la sección "Configuración del usuario IAM" más abajo.
3. Amazon Timestream - Cree una base de datos denominada PrometheusDatabase con una tabla denominada PrometheusMetricsTable en la región de despliegue de destino para Amazon Timestream for LiveAnalytics. Para crear bases de datos y tablas en Amazon Timestream, consulte Acceso a Timestream for LiveAnalytics y la sección Tutorial de Amazon Timestream para LiveAnalytics.
4. Prometheus - Descargar Prometheus desde su Descargar versión mínima 0.0. Para descargar Prometheus en una Amazon Elastic Compute Cloud (Amazon EC2) utilice wget. Por ejemplo, en Amazon Linux 2023:
wget https://github.com/prometheus/prometheus/releases/download/v2.52.0-rc.1/prometheus-2.52.0-rc.1.linux-amd64.tar.gz && \
tar -xvf prometheus-2.52.0-rc.1.linux-amd64.tar.gz
Para obtener más información sobre Prometheus, consulte su documentación introductoria.
Configuración de usuario IAM
Para utilizar Timestream for LiveAnalytics como almacenamiento remoto para Prometheus, es necesario generar una clave de acceso y configurar los permisos de despliegue y ejecución.
Clave de acceso
Se requiere una clave de acceso para permitir a Prometheus leer y escribir desde Timestream. El usuario IAM utilizado para la ejecución debe tener una clave de acceso. A pesar de ser una práctica recomendada de seguridad de AWS utilizar roles en lugar de claves de acceso, no se puede utilizar un rol de IAM en lugar de una clave de acceso debido a una limitación con Prometheus. MFA no está soportado actualmente.
Para crear una clave de acceso
1. Vaya a la consola de consola de AWS IAM.
2. En el panel de navegación, seleccione Gestión de acceso, Usuarios.
3. Seleccione o Cree el usuario que desea utilizar para la ejecución de la lista de usuarios.
4. En la sección Resumen seleccione Crear clave de acceso.
5. Para Caso de uso seleccione Otros y seleccione Siguiente.
6. Si lo desea, asigne una descripción a la clave de acceso.
7. Seleccione Crear clave de acceso.
8. Tome nota del ID de la clave de acceso y guarde la clave de acceso secreta en un archivo denominado secretAccessKey.txt.
Permisos de despliegue
El usuario que despliega este proyecto debe tener los siguientes permisos. Estos permisos de despliegue garantizan que la pila de CloudFormation pueda desplegar los recursos necesarios. Asegúrese de que los valores de account-id
y región
en la sección de recursos estén actualizados antes de utilizar esta plantilla directamente.
Nota - Todos los permisos tienen recursos limitados excepto las acciones que no pueden limitarse a un recurso específico. Las acciones de API Gateway no pueden limitar recursos ya que el nombre del recurso es autogenerado por la plantilla. Consulte los siguientes enlaces de documentación para conocer las limitaciones de las acciones de CloudFormation, SNS e IAM: CloudFormation, SNSe IAM.
Nota - Esta política es demasiado larga para ser añadida en línea durante la creación del usuario y debe ser creada como una política y adjuntada al usuario en su lugar.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"cloudformation:ListStacks",
"cloudformation:GetTemplateSummary",
"iam:ListRoles",
"sns:ListTopics",
"apigateway:GET",
"apigateway:POST",
"apigateway:PUT",
"apigateway:TagResource"
],
"Resource": [
"arn:aws:apigateway:<region>::/apis/*",
"arn:aws:apigateway:<region>::/apis",
"arn:aws:apigateway:<region>::/tags/*"
]
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"iam:GetRole",
"iam:CreateRole",
"iam:AttachRolePolicy",
"iam:PutRolePolicy",
"iam:CreatePolicy",
"iam:PassRole",
"iam:GetRolePolicy"
],
"Resource": "arn:aws:iam::<account-id>:role/PrometheusTimestreamConnector-IAMLambdaRole-*"
},
{
"Sid": "VisualEditor2",
"Effect": "Allow",
"Action": [
"cloudformation:CreateChangeSet",
"cloudformation:DescribeStacks",
"cloudformation:DescribeStackEvents",
"cloudformation:DescribeChangeSet",
"cloudformation:ExecuteChangeSet",
"cloudformation:GetTemplate",
"cloudformation:CreateStack",
"cloudformation:GetStackPolicy"
],
"Resource": [
"arn:aws:cloudformation:<region>:<account-id>:stack/PrometheusTimestreamConnector/*",
"arn:aws:cloudformation:<region>:<account-id>:stack/aws-sam-cli-managed-default/*",
"arn:aws:cloudformation:<region>:aws:transform/Serverless-2016-10-31"
]
},
{
"Sid": "VisualEditor3",
"Effect": "Allow",
"Action": [
"lambda:ListFunctions",
"lambda:AddPermission",
"lambda:CreateFunction",
"lambda:TagResource",
"lambda:GetFunction"
],
"Resource": "arn:aws:lambda:<region>:<account-id>:function:PrometheusTimestreamConnector-LambdaFunction-*"
},
{
"Sid": "VisualEditor4",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetBucketPolicy",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::timestreamassets-<region>/timestream-prometheus-connector/timestream-prometheus-connector-linux-amd64-*.zip"
},
{
"Sid": "VisualEditor5",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetBucketPolicy",
"s3:GetBucketLocation",
"s3:PutObject",
"s3:PutBucketPolicy",
"s3:PutBucketTagging",
"s3:PutEncryptionConfiguration",
"s3:PutBucketVersioning",
"s3:PutBucketPublicAccessBlock",
"s3:CreateBucket",
"s3:DescribeJob",
"s3:ListAllMyBuckets"
],
"Resource": "arn:aws:s3:::aws-sam-cli-managed-default*"
},
{
"Sid": "VisualEditor6",
"Effect": "Allow",
"Action": [
"cloudformation:GetTemplateSummary"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"cloudformation:TemplateUrl": [
"https://timestreamassets-<region>.s3.amazonaws.com/timestream-prometheus-connector/template.yml"
]
}
}
}
]
}
Permisos de ejecución
El usuario que ejecuta este proyecto debe tener los siguientes permisos. Asegúrese de que los valores de account-id
y región
en la sección de recursos estén actualizados antes de utilizar esta plantilla directamente. Si el nombre de la base de datos y la tabla difieren del recurso de política, asegúrese de actualizar sus valores.
Nota - El recurso Timestream:DescribeEndpoints debe ser *
como se especifica en security_iam_service-con-iam.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"timestream:WriteRecords",
"timestream:Select"
],
"Resource": "arn:aws:timestream:<region>:<account-id>:database/PrometheusDatabase/table/PrometheusMetricsTable"
},
{
"Effect": "Allow",
"Action": [
"timestream:DescribeEndpoints"
],
"Resource": "*"
}
]
}
Estos permisos permiten a la función Lambda escribir y leer en Timestream for LiveAnalytics.
Implementación del conector Prometheus de Timestream for LiveAnalytics con implementación con un solo clic
Utilice una plantilla de AWS CloudFormation para crear la pila. Para instalar el servicio Timestream for LiveAnalytics Prometheus Connector, lance la pila de AWS CloudFormation en la consola de AWS CloudFormation seleccionando el botón "Launch" en la región de AWS en la que creó la base de datos y la tabla de Amazon Timestream for LiveAnalytics:
US East (N. Virginia) us-east-1: VER, Vista en Composer, Iniciar
EEUU Este (Ohio) us-east-2: VER, Ver en Composer, Iniciar
Oeste de EE.UU. (Oregón) us-west-2: VER, Ver en Composer, Lanzar
Asia Pacífico (Sydney) ap-southeast-2: VER, Ver en Composer, Lanzar
Asia Pacífico (Tokio) ap-northeast-1: VER, Vista en Compositor, Lanzamiento
Europa (Fráncfort) eu-central-1: VER, Ver en Composer, Iniciar
Europa (Irlanda) eu-west-1: VER, Ver en Composer, Iniciar
Configuración de Prometheus
Para configurar Prometheus para leer y escribir en Timestream for LiveAnalytics, configure el parámetro lectura_remota
y escritura_remota
en prometheus.yml
el archivo de configuración de Prometheus, sustituyendo InvokeWriteURL
y InvokeReadURL
por las URL de API Gateway de la implementación. Puede encontrar prometheus.yml
en el archivo de lanzamiento de Prometheus extraído con valores prepoblados. Si utilizó el comando de ejemplo para descargar y ejecutar Prometheus en una instancia EC2 de Amazon Linux 2023 en la sección Requisitos previos anterior, prometheus.yml
se encuentra en ~/prometheus-2.52.0-rc.1.linux-amd64/
.
Para encontrar el archivo InvokeWriteURL
y InvokeReadURL
:
1. Abra la consola de AWS CloudFormation.
2. En el panel de navegación, seleccione Pilas.
3. Seleccione PrometheusTimestreamConnector de la lista de pilas en el panel Pilas
4. Seleccione Salidas La siguiente captura de pantalla muestra las Salidas con InvokeReadURL e InvokeWriteURL como salidas:
Para actualizar prometheus.yml
1. Añada la sección remote_write para proporcionar la URL a la que Prometheus enviará las muestras. Sustituya InvokeWriteURL por la InvokeWriteURL que encontró anteriormente y actualice el nombre de usuario y password_file por un ID de clave de acceso IAM válido y un archivo que contenga una clave de acceso secreta IAM válida.
remote_write:
- url: "InvokeWriteURL"
queue_config:
max_samples_per_send: 100
basic_auth:
username: accessKey
password_file: /Users/user/Desktop/credentials/secretAccessKey.txt
2. Añade el archivo lectura_remota
para proporcionar la URL a la que Prometheus enviará las solicitudes de lectura. De nuevo, sustituya InvokeReadURL
por InvokeReadURL
que encontró anteriormente y actualice el nombre de usuario y password_file a un ID de clave de acceso IAM válido y a un archivo que contenga una clave de acceso secreta IAM válida.
remote_read:
- url: "InvokeReadURL"
basic_auth:
username: accessKey
password_file: /Users/user/Desktop/credentials/secretAccessKey.txt
Para obtener más información, consulte la sección lectura remota y escritura remota en la página de configuración de Prometheus.
El archivo_contraseña debe ser la ruta absoluta del archivo, y el archivo de contraseña debe contener únicamente el valor de la variable aws_secret_clave_acceso. Para conocer otras formas de configurar la autenticación, consulte la sección Configuración de Prometheus en la documentación del conector.
NOTA: Recomendamos utilizar el número predeterminado de muestras por solicitud de escritura a través de max_samples_per_send. Para más detalles, consulte la sección Muestras máximas de Prometheus por solicitud de escritura remota en la documentación del conector.
Iniciar Prometheus
1. Asegúrese de que el usuario que invoca la función de AWS Lambda tiene permisos de lectura y escritura en Amazon Timestream. Para obtener más detalles, consulte la sección Permisos de ejecución en la documentación del conector.
2. Inicie Prometheus cambiando al directorio que contiene el binario de Prometheus y ejecutándolo. Por ejemplo:
./prometheus --config.file=prometheus.yml # Start prometheus on localhost:9090
Dado que se han configurado las opciones de almacenamiento remoto para Prometheus, Prometheus comenzará a escribir en Timestream a través del punto final de escritura de API Gateway.
Verificar que el conector Prometheus de Amazon Timestream para LiveAnalytics funciona
1. Para verificar que Prometheus se está ejecutando, abra http://localhost:9090/
en un navegador. Esto abre el navegador de expresionesSi está ejecutando Prometheus en una instancia EC2, después de permitir el tráfico TCP en el puerto 9090, se podrá acceder al navegador de expresiones de Prometheus en http://<EC2 instance public IP or DNS>:9090
.
2. Para verificar que el conector de Prometheus está listo para recibir solicitudes, asegúrese de que el siguiente mensaje de registro se imprime en los registros de la función Lambda en la consola de Amazon CloudWatch. Consulte la sección Solución de problemas de la documentación del conector para ver otros mensajes de error.
level=info ts=2020-11-21T01:06:49.188Z caller=utils.go:33 message="Timestream <write/query> connection is initialized (Database: <database-name>, Table: <table-name>, Region: <region>)"
3. Para verificar que el conector Prometheus está escribiendo datos:
Abra la consola de Amazon Timestream.
En el panel de navegación, en LiveAnalytics, seleccione Herramientas de administración, Editor de consultas.
Introduzca la siguiente consulta SELECT COUNT() FROM PrometheusDatabase.PrometheusMetricsTable
Seleccione Ejecutar.
En Resultados de consulta aparecerá un único número que indica el número de filas que ha escrito Prometheus. Las consultas de Timestream for LiveAnalytics también pueden ejecutarse utilizando el siguiente comando CLI de AWS:
aws timestream-query query --query-string "SELECT COUNT() FROM PrometheusDatabase.PrometheusMetricsTable"
La salida debería ser similar a la siguiente:
{
"Rows": [
{
"Data": [
{
"ScalarValue": "340"
}
]
}
],
"ColumnInfo": [
{
"Name": "_col0",
"Type": {
"ScalarType": "BIGINT"
}
}
],
"QueryId": "AEBQEAMYNBGX7RA"
}
Esta salida de muestra indica que se han ingestado 340 filas. Es probable que su número sea diferente.
4. Para verificar que el conector Prometheus puede consultar datos de Amazon Timestream, visite http://localhost:9090/
en un navegador, que abrirá el navegador de expresiones de Prometheus navegador de expresionesy ejecute una consulta Prometheus Query Language (PromQL). Si está ejecutando Prometheus en una instancia EC2, visite http://<EC2 public IP or DNS>:9090
para acceder al navegador de expresiones de Prometheus. La consulta PromQL utilizará los valores de default-database
y default-table
como la base de datos y la tabla correspondientes que contienen los datos. He aquí un ejemplo sencillo:
prometheus_remote_storage_samples_in_total{}[99d]
prometheus_almacen_remoto_muestras_en_total
es un nombre de métrica. La base de datos y la tabla que se consultan son las correspondientes base de datos por defecto
y tabla por defecto
configurados para el conector Prometheus. Este PromQL devolverá los datos de series temporales de los últimos noventa y nueve días con el nombre métrico prometheus_almacen_remoto_muestras_en_total
en tabla predeterminada
de base de datos por defecto
. La siguiente captura de pantalla muestra el resultado de esta consulta en Prometheus.
PromQL también admite regex. La siguiente consulta devuelve las filas de PrometheusMetricsTable de PrometheusDatabase donde:
la columna metric name es igual a
prometheus_almacen_remoto_muestras_en_total
;La instancia de columna coincide con el patrón regex
.*:9090.
trabajo de columna coincide con el patrón regex
p*
.
prometheus_remote_storage_samples_in_total{instance=~".*:9090", job=~"p*"}[99d]
Para más ejemplos, consulte Ejemplos de consulta de Prometheus. Existen otras formas de ejecutar PromQLs, como a través de la API HTTP o Grafana.
Utilizando los métodos anteriores y alterando la consulta de Timestream for LiveAnalytics para formatear los resultados de forma similar a Prometheus, se ejecutaron las siguientes consultas en Timestream for LiveAnalytics y Prometheus, verificando los datos ingestados.
Consulta de Timestream for LiveAnalytics
Consulta Prometheus
Limpieza
Si ha seguido los pasos de este post, habrá creado una serie de recursos de AWS. Para evitar costes, elimine estos recursos si ya no los necesita.
Eliminar Timestream para bases de datos de LiveAnalytics.
1. Abra la consola de Amazon Timestream.
2. En el panel de navegación, en LiveAnalyticsseleccione Recursos, Bases de datos.
3. 3. Seleccione la base de datos que ha creado para que la utilice el conector.
4. 4. Seleccione Tablas
5. Seleccione cada una de las tablas de su base de datos y, a continuación, elija Borrar.
6. Escriba suprimir
para borrar la tabla.
7. Una vez eliminadas todas las tablas de la base de datos, seleccione Borrar.
8. Escriba borrar
para eliminar la base de datos.
Eliminar la pila de CloudFormation de Timestream for LiveAnalytics Prometheus Connector.
1. Abra la consola de AWS CloudFormation.
2. En el panel de navegación, seleccione Pilas.
3. Seleccione la pila utilizada para desplegar el Timestream for LiveAnalytics Prometheus Connector, por defecto se llama PrometheusTimestreamConnector
.
4. Seleccione Borrar y Borrar de nuevo en el cuadro emergente para eliminar la pila de CloudFormation y sus recursos asociados.
Conclusión
En este post, hemos mostrado cómo puedes utilizar el conector Prometheus de Timestream for LiveAnalytics para leer y escribir datos de series temporales de Prometheus con Timestream for LiveAnalytics a través de las APIs remote_read y remote_write de Prometheus.
Dentro del repositorio del conector, las limitaciones del conector están documentadas en README.md#limitaciones y las advertencias se documentan en README.md#precauciones y serverless/DEVELOPER_README.md#caveats.
Si aún no lo ha hecho, comience a configurar el conector revisando la sección anterior Uso del conector Timestream for LiveAnalytics Prometheus o visitando la página web awslabs/amazon-timestream-connector-prometheus repositorio.
*Este post es una colaboración conjunta entre Improving y AWS y se está publicando de forma cruzada tanto en el blog Improving y en el blog de bases de datos de AWS.