La Monitorización de base de datos de Datadog te permite ver las métricas de consulta y explicar los planes de todas tus bases de datos en un único lugar. Esta guía explica cómo configurar la Monitorización de base de datos para una base de datos gestionada por Heroku Postgres.
Nota: Solo las bases de datos en los planes Standard y Premium publican métricas utilizadas por la integración. No todas las características de la Monitorización de base de datos están disponibles cuando se utiliza con una instancia de Postgres en el plan Hobby.
En primer lugar, crea un usuario datadog en tu base de datos:
# Asegúrate de estar en el directorio raíz de la aplicaciónheroku pg:credentials:create --name datadog
# Adjunta la nueva credencial a la aplicaciónheroku addons:attach <database-name> --credential datadog
Al adjuntar la nueva credencial a la aplicación se crea una nueva variable de entorno en tu aplicación con la URL de conexión. Ten en cuenta esa variable de entorno, ya que la utilizarás más adelante.
Inicia sesión en tu base de datos de Postgres utilizando las credenciales predeterminadas y otorga a la credencial datadog los permisos adecuados:
heroku pg:psql
Una vez en el terminal psql, crea el siguiente esquema:
CREATE SCHEMA datadog;
GRANT USAGE ON SCHEMA datadog TO datadog;
GRANT USAGE ON SCHEMA public TO datadog;
GRANT pg_monitor TO datadog;
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
Crea la siguiente función en la base de datos:
CREATE OR REPLACE FUNCTION datadog.explain_statement(
l_query TEXT,
OUT explain JSON
)
RETURNS SETOF JSON AS
$$
DECLARE
curs REFCURSOR;
plan JSON;
BEGIN
OPEN curs FOR EXECUTE pg_catalog.concat('EXPLAIN (FORMAT JSON) ', l_query);
FETCH curs INTO plan;
CLOSE curs;
RETURN QUERY SELECT plan;
END;
$$
LANGUAGE 'plpgsql'
RETURNS NULL ON NULL INPUT
SECURITY DEFINER;
Por último, configura el Datadog Agent para habilitar el check de Postgres utilizando las nuevas credenciales:
# Asegúrate de que estás en el directorio raíz de tu aplicación# Crea la carpeta para la configuración de integraciones en tu código de aplicaciónmkdir -p datadog/conf.d/
Crea un archivo de configuración llamado postgres.yaml con el siguiente contenido (no lo sustituyas por tus credenciales, ya que esto se hace como parte del script de preejecución):
Con la variable de entorno que se creó cuando se adjuntó la credencial datadog a la aplicación (en el ejemplo siguiente, se supone que es HEROKU_POSTGRESQL_PINK_URL), añade lo siguiente al script de preejecución para reemplazar esos valores antes de iniciar el Datadog Agent:
#!/usr/bin/env bash
# Actualiza la configuración de Postgres anterior con la variable de entorno de la aplicación de Herokuif[ -n "$HEROKU_POSTGRESQL_PINK_URL"];thenPOSTGREGEX='^postgres://([^:]+):([^@]+)@([^:]+):([^/]+)/(.*)$'if[[$HEROKU_POSTGRESQL_PINK_URL=~ $POSTGREGEX]];then sed -i "s/<YOUR HOSTNAME>/${BASH_REMATCH[3]}/""$DD_CONF_DIR/conf.d/postgres.d/conf.yaml" sed -i "s/<YOUR USERNAME>/${BASH_REMATCH[1]}/""$DD_CONF_DIR/conf.d/postgres.d/conf.yaml" sed -i "s/<YOUR PASSWORD>/${BASH_REMATCH[2]}/""$DD_CONF_DIR/conf.d/postgres.d/conf.yaml" sed -i "s/<YOUR PORT>/${BASH_REMATCH[4]}/""$DD_CONF_DIR/conf.d/postgres.d/conf.yaml" sed -i "s/<YOUR DBNAME>/${BASH_REMATCH[5]}/""$DD_CONF_DIR/conf.d/postgres.d/conf.yaml"fifi
Haz el despliegue en Heroku:
# Haz el despliegue en Herokugit add .
git commit -m "Enable postgres integration"git push heroku main