Introducción
En este tutorial, aprenderá a recopilar métricas agregadas para una base de datos PostgreSQL administrada en DigitalOcean utilizando una aplicación web implementada en la plataforma de aplicaciones DigitalOcean.
Utilizará una aplicación Node.js de muestra para esta demostración y la conectará a la base de datos PostgreSQL de Managed DigitalOcean que creará en este tutorial.
Al final de este tutorial, tendrá un panel de Prometheus que recopila y muestra métricas de una base de datos PostgreSQL administrada conectada a una aplicación web de App Platform.
Requisitos previos
Antes de comenzar, asegúrese de tener los siguientes requisitos previos:
- Una cuenta de DigitalOcean.
- Una aplicación Node.js de muestra implementada en la plataforma de aplicaciones.
- La base de datos Postgres se ha implementado y conectado a la aplicación App Platform.
- Un token de acceso personal creado con acceso de lectura/escritura (rw). Puedes seguir este tutorial sobre cómo crear un token de acceso personal para crear uno propio.
Paso 1: Configuración de una base de datos PostgreSQL administrada
Comencemos creando una base de datos PostgreSQL.
Vaya a la sección Bases de datos en su panel de control de la nube de DigitalOcean.
Haga clic en "Crear clúster de base de datos" y seleccione PostgreSQL. Debe seleccionar una región de centro de datos y una red de VPC, como se muestra en la siguiente imagen:
A continuación, seleccione PostgreSQL como base de datos y elija otras configuraciones para su base de datos.
Configure los ajustes de la base de datos, siga las instrucciones en pantalla y haga clic en Crear clúster de base de datos.
Una vez creado el clúster de base de datos administrado PostgreSQL, puede revisar su descripción general, información, informes y configuraciones en las siguientes pestañas:
Paso 2: Implementar una instancia de aplicación web Node.js en la plataforma de la aplicación
Puede seguir los pasos para implementar una aplicación Node.js de muestra o usar este repositorio de Github para crear una aplicación Node.js de muestra en la plataforma de aplicaciones.
Si usas este último, debes bifurcar este repositorio de GitHub a tu cuenta de GitHub para almacenar una copia en la nube. Haz clic en el botón "Bifurcar" en el repositorio de GitHub y sigue las instrucciones en pantalla.
Ahora inicie sesión en el portal en la nube de DigitalOcean y navegue a Crear aplicación -> Plataforma de aplicaciones.
Luego, en "Otro: seleccionar una aplicación de muestra", seleccione la aplicación de muestra Node.js en el menú desplegable Aplicación de muestra y haga clic en Siguiente.
Siga las instrucciones en pantalla para configurar los recursos de la aplicación, la configuración general y las variables de entorno, y haga clic en Siguiente. Una vez hecho esto, revise la configuración general de la aplicación. Al finalizar, haga clic en Crear recursos. Tras crear la aplicación, su implementación en la plataforma tardará un tiempo.
Una vez implementada y compilada la aplicación, puede consultar la descripción general de la aplicación y visitar la aplicación implementada en su navegador.
Paso 3: Conectar la base de datos PostgreSQL a la plataforma de la aplicación
En este paso, conectará la base de datos PostgreSQL administrada creada en el Paso 1 de este tutorial a la muestra de aplicación Node.js creada en el Paso 2.
Vaya a la plataforma de su aplicación implementada, haga clic en el botón Crear en el panel de su aplicación implementada y haga clic en "Crear/Adjuntar base de datos":
Luego, seleccione «Base de datos DigitalOcean creada previamente» y seleccione el clúster de base de datos administrado PostgreSQL implementado recientemente y haga clic en el botón «Adjuntar base de datos» en la parte inferior.
Puede verificar en la sección Descripción general de la base de datos que la aplicación de la Plataforma de aplicaciones se haya agregado correctamente como una fuente confiable.
Paso 4: Obtener métricas extraíbles desde el punto final /metrics
Puede ver las métricas de su clúster de bases de datos mediante programación a través del punto de conexión /metrics. Este punto de conexión incluye más de veinte veces las métricas a las que puede acceder en la pestaña Insights del panel de control.
Puede acceder al punto final de la métrica con el comando curl o usar Postman para visualizar esas métricas en un sistema de monitoreo como Prometheus.
En primer lugar, vaya a la sección API del panel de control de DigitalOcean, cree un nuevo token de acceso personal y haga clic en "Generar token con acceso completo". Anote el token de acceso, ya que lo necesitará en los siguientes pasos.
En este ejemplo, usarás Postman para ejecutar todas las solicitudes HTTP. También puedes ejecutar comandos curl desde tu instancia de App Platform para obtener respuestas a las solicitudes de la API.
Obtenga el nombre de host y el puerto.
Primero, debe recuperar el nombre de host de las métricas de su clúster enviando una solicitud GET a https://api.digitalocean.com/v2/databases/{UUID}.
Ejecute el siguiente comando curl desde su instancia de App Platform. Para ello, vaya a la sección de la consola:
Utilice el siguiente comando para obtener el nombre de host y las credenciales de la base de datos
apps@sample-nodejs-775ff7ff6f-db5gk:~$ curl --silent -XGET --location 'https://api.digitalocean.com/v2/databases/{UUID}' --header 'Content-Type: application/json' --header "Authorization: Bearer $RO_DIGITALOCEAN_TOKEN"Reemplace {UUID} y $RO_DIGITALOCEAN_TOKEN con el UUID de su base de datos PostgreSQL administrada y su contraseña de acceso personal.
Este comando debería brindarle una salida con detalles del clúster de base de datos PostgreSQL administrado:
Output
"database": {
"id": "192a6077-d103-4e72-bd2c-e370fd6b5608",
"name": "db-postgresql-nyc3-66505",
"engine": "pg",
"version": "16",
"semantic_version": "16.3",
"connection": {
"protocol": "postgresql",
"uri": "postgresql://doadmin:AVNS_uVoGq5jCPdaxW3hghhV@db-postgresql-nyc3-66505-do-user-13729304-0.c.db.ondigitalocean.com:25060/defaultdb?sslmode=require",
"database": "defaultdb",
"host": "db-postgresql-nyc3-66505-do-user-13729304-0.c.db.ondigitalocean.com",
"port": 25060,
"user": "doadmin",
"password": "AVNS_uVoGq5jCPdaxW3hghhV",
"ssl": true
},
"private_connection": {
"protocol": "postgresql",
"uri": "postgresql://doadmin:AVNS_uVoGq5jCPdaxW3hghhV@private-db-postgresql-nyc3-66505-do-user-13729304-0.c.db.ondigitalocean.com:25060/defaultdb?sslmode=require",
"database": "defaultdb",
"host": "private-db-postgresql-nyc3-66505-do-user-13729304-0.c.db.ondigitalocean.com",
"port": 25060,
"user": "doadmin",
"password": "AVNS_uVoGq5jCPdaxW3hghhV",
"ssl": true
},
"metrics_endpoints": [
{
"host": "db-postgresql-nyc3-66505-do-user-13729304-0.c.db.ondigitalocean.com",
"port": 9273
}
],
"users": [
{
"name": "doadmin",
"role": "primary",
"password": "XXXXXXXXXXX"
}
],
"db_names": [
"defaultdb"
],
"num_nodes": 1,
"region": "nyc3",
"status": "online",
"created_at": "2024-06-10T21:04:32Z",
"maintenance_window": {
"day": "monday",
"hour": "00:07:46",
"pending": false
},
"size": "db-s-1vcpu-1gb",
"tags": [
"testtestnn"
],
"private_network_uuid": "xxxxxxxxxx",
"project_id": "xxxxxxxxxxx",
"read_only": false,
"version_end_of_life": "2028-11-09T00:00:00Z",
"version_end_of_availability": "2028-05-09T00:00:00Z",
"storage_size_mib": 10240
}
}En el resultado anterior, tenga en cuenta el par host/puerto. En nuestro caso, el host es db-postgresql-nyc3-66505-do-user-13729304-0.c.db.ondigitalocean.com y el puerto es 9273.
Además, si ha instalado Postman en su sistema y ha agregado la dirección IP de su sistema como una fuente confiable en la configuración de fuente confiable de la base de datos, puede ejecutar la solicitud HTTP GET anterior en Postman.
Simplemente agregue la URL https://api.digitalocean.com/v2/databases/{UUID} y reemplace su código de acceso personal en la pestaña de autorización con el tipo de verificación seleccionado como token de portador.
Obtener la validación de métricas del clúster
A continuación, necesita las credenciales de métricas de su clúster. Puede obtenerlas mediante una solicitud GET a https://api.digitalocean.com/v2/databases/metrics/credentials con un token de administrador o de escritura.
Utilice el siguiente comando curl de la aplicación de muestra App Platform:
apps@sample-nodejs-775ff7ff6f-db5gk:~$ curl --silent -XGET --location 'https://api.digitalocean.com/v2/databases/metrics/credentials' --header 'Content-Type: application/json' --header "Authorization: Bearer xxxxxxxxxxxxxxxxx"Debería proporcionarle credenciales de métricas de clúster con un nombre de usuario y una contraseña.
Output{
"credentials": {
"basic_auth_username": "prom2prh",
"basic_auth_password": "xxxxxxxxxxxxx"
}
}Acceder al punto final /metrics
Para acceder al punto final mediante cURL, envíe una solicitud GET a https://$HOST:9273/metrics y reemplace las variables de nombre de host, nombre de usuario y contraseña con las credenciales que encontró en los pasos anteriores:
apps@sample-nodejs-775ff7ff6f-db5gk:~$ curl -XGET -k -u $USERNAME:$PASSWORD https://$HOST:9273/metricsDebería proporcionarle una gran cantidad de metadatos como los siguientes:
Output...
1",project="do-user-13729304-0",service="db-postgresql-nyc3-66505",service_type="pg"} 0.7
# HELP system_n_cpus Telegraf collected metric
# TYPE system_n_cpus gauge
system_n_cpus{cloud="custom-digitalocean-do-nyc3",host="db-postgresql-nyc3-66505-1",project="do-user-13729304-0",service="db-postgresql-nyc3-66505",service_type="pg"} 1
# HELP system_n_unique_users Telegraf collected metric
# TYPE system_n_unique_users gauge
system_n_unique_users{cloud="custom-digitalocean-do-nyc3",host="db-postgresql-nyc3-66505-1",project="do-user-13729304-0",service="db-postgresql-nyc3-66505",service_type="pg"} 0
# HELP system_n_users Telegraf collected metric
# TYPE system_n_users gauge
system_n_users{cloud="custom-digitalocean-do-nyc3",host="db-postgresql-nyc3-66505-1",project="do-user-13729304-0",service="db-postgresql-nyc3-66505",service_type="pg"} 0
# HELP system_uptime Telegraf collected metric
# TYPE system_uptime counter
system_uptime{cloud="custom-digitalocean-do-nyc3",host="db-postgresql-nyc3-66505-1",project="do-user-13729304-0",service="db-postgresql-nyc3-66505",service_type="pg"} 640073
...Paso 5: Visualizar métricas con Prometheus
Para acceder al endpoint mediante Prometheus, copie la siguiente configuración en un archivo prometheus.yml, reemplazando el nombre de host, el nombre de usuario, la contraseña y la ruta del certificado de CA. Esto configura Prometheus para usar todas las credenciales necesarias para acceder al endpoint:
# prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'dbaas_cluster_metrics_svc_discovery'
scheme: https
tls_config:
ca_file: /path/to/ca.crt
dns_sd_configs:
- names:
- $TARGET_ADDRESS
type: 'A'
port: 9273
refresh_interval: 15s
metrics_path: '/metrics'
basic_auth:
username: $BASIC_AUTH_USERNAME
password: $BASIC_AUTH_PASSWORDReemplace $TARGET_ADDRESS, $BASIC_AUTH_USERNAME y $BASIC_AUTH_PASSWORD con el nombre de host, el nombre de usuario y la contraseña obtenidos en los pasos anteriores.
Luego, copie el siguiente script de conexión en un archivo llamado up.sh. Este script ejecutará envsubst e iniciará un contenedor Prometheus con la configuración del paso anterior.
#!/bin/bash
envsubst < prometheus.yml > /tmp/dbaas-prometheus.yml
docker run -p 9090:9090 \
-v /tmp/dbaas-prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheusVaya a http://localhost:9090/targets en su navegador para verificar que varios hosts estén en funcionamiento.
Luego, vaya a http://localhost:9090/graph para consultar las métricas de la base de datos de Prometheus.
Para obtener más detalles, consulte la documentación de Prometheus DNS SD y la documentación de configuración de TLS.
Para aprender y comprender cada una de las métricas, puede consultar este documento oficial de Estadísticas de monitoreo de PostgreSQL.
También puede obtener más información sobre cómo recopilar métricas raspables para una base de datos PostgreSQL administrada.
Resultado
Este tutorial le enseñará a configurar y extraer métricas de una base de datos PostgreSQL administrada en DigitalOcean mediante una aplicación web Node.js implementada en la plataforma de aplicaciones de DigitalOcean y Prometheus. Al habilitar las métricas extraíbles, podrá supervisar fácilmente el rendimiento y el estado de sus bases de datos, garantizando un rendimiento óptimo y una solución de problemas exhaustiva.


























