La nueva integración de Snowflake reemplaza la integración de Snowflake basada en el Agent de Datadog y ofrece funciones adicionales. Después de configurar la nueva integración de Snowflake, se recomienda desinstalar la integración de Snowflake basada en el Agent para reducir el volumen de llamadas a la API para Snowflake.
Puede resultar difícil monitorizar y optimizar eficazmente la infraestructura y la recuperación de datos de Snowflake. Surgen problemas que pueden derivar en una utilización ineficiente de los recursos, mayores costes y una experiencia del cliente degradada.
Con la integración de Snowflake de Datadog, puedes detectar consultas de larga duración para mejorar el rendimiento y reducir costes, identificar amenazas de seguridad en tiempo real y monitorizar tus cargas de trabajo de Snowpark.
Después de analizar los datos de Snowflake, Datadog completa el dashboard de información general listo para usar con información sobre todos los recursos recopilados. También ofrece monitores recomendados para ayudarte a comenzar a generar alertas sobre ejecuciones fallidas de Snowpark o una cantidad anormal de intentos de inicio de sesión.
Nota: Las métricas se recopilan mediante consultas a Snowflake. Las consultas realizadas mediante la integración de Datadog se facturan a través de Snowflake.
Consumo de crédito, historial de transferencia de datos y métricas de presupuesto a nivel de organización. Recopilados por día.
snowflake.organization
Logs
La siguiente tabla describe los tipos de logs recopilados y qué tablas de Snowflake están incluidas.
Tipo
Descripción
Tablas necesarias
Historial de consultas
Historial de ejecuciones de consultas. Los logs del historial de consultas se pueden enriquecer con logs del historial de acceso para brindar más información sobre cómo se utilizan los datos a través de las consultas y su linaje.
Crea un rol y un usuario específicos de Datadog para monitorizar Snowflake. Ejecuta la serie de comandos que se indican a continuación en tu entorno de Snowflake para crear un usuario al que Datadog pueda acceder.
Configuración recomendada para el almacén
Crea un almacén XS con un tiempo de suspensión automática de 30 segundos.
De manera opcional, la alternativa más rentable puede ser utilizar un almacén XS existente que esté activo durante todo el día. Nota: Las consultas realizadas desde esta integración pueden afectar potencialmente el rendimiento de un almacén existente. No se recomienda ejecutar la integración en un almacén donde el rendimiento de las consultas sea fundamental.
-- Crea un nuevo rol destinado a monitorizar el uso de Snowflake. El nombre del rol es personalizable.
create role DATADOG;-- Concede privilegios en la base de datos SNOWFLAKE al nuevo rol.
grant imported privileges on database SNOWFLAKE to role DATADOG;-- Concede el uso de tu almacén predeterminado al rol DATADOG.
grant usage on warehouse <WAREHOUSE> to role DATADOG;-- Concede las siguientes vistas ACCOUNT_USAGE al nuevo rol. Haz esto si deseas recopilar logs y métricas de uso de la cuenta de Snowflake.
grant database role SNOWFLAKE.OBJECT_VIEWER to role DATADOG;grant database role SNOWFLAKE.USAGE_VIEWER to role DATADOG;grant database role SNOWFLAKE.GOVERNANCE_VIEWER to role DATADOG;grant database role SNOWFLAKE.SECURITY_VIEWER to role DATADOG;-- Concede ORGANIZATION_USAGE_VIEWER al nuevo rol. Haz esto si deseas recopilar métricas de uso de la organización de Snowflake.
grant database role SNOWFLAKE.ORGANIZATION_USAGE_VIEWER to role DATADOG;-- Concede ORGANIZATION_BILLING_VIEWER al nuevo rol. Haz esto si deseas recopilar datos de costes de Snowflake.
grant database role SNOWFLAKE.ORGANIZATION_BILLING_VIEWER to role DATADOG;-- Concede el uso en la base de datos, el esquema y la tabla de la tabla de eventos.
grant usage on database <EVENT_TABLE_DATABASE> to role DATADOG;grant usage on schema <EVENT_TABLE_DATABASE>.<EVENT_TABLE_SCHEMA> to role DATADOG;grant select on table <EVENT_TABLE_DATABASE>.<EVENT_TABLE_SCHEMA>.<EVENT_TABLE_NAME> to role DATADOG;-- Crea un usuario.
create user <USERNAME>
LOGIN_NAME= <USERNAME>
password='<PASSWORD>'default_warehouse=<WAREHOUSE>
default_role= DATADOG;-- Concede el rol de monitor al usuario.
grant role DATADOG to user <USERNAME>
Configura la autenticación por par de claves. La clave pública se asigna al usuario creado anteriormente y la clave privada se carga en Datadog, lo que permite que Datadog se conecte a tu cuenta de Snowflake.
a. Crea y carga una clave privada siguiendo las instrucciones de Snowflake. Actualmente, Datadog solo admite claves privadas sin cifrar.
b. Crea una clave pública siguiendo las instrucciones de Snowflake.
c. Asigna la clave pública al usuario creado anteriormente siguiendo las instrucciones de Snowflake.
Ciertos prefijos de direcciones IP deben estar en la lista de permitidos para que Datadog recopile datos de tu cuenta de Snowflake. La lista de prefijos de IP que pertenecen a Datadog se puede encontrar en la página IP Ranges, y el rango a permitir se puede encontrar en webhooks.
Métricas personalizadas
La integración de Snowflake admite consultas personalizadas para recopilar métricas personalizadas. Los usuarios pueden escribir consultas SQL personalizadas para extraer datos específicos y verlos como métricas y etiquetas (tags) de métricas en Datadog.
Por defecto, la integración se conecta a la base de datos compartida SNOWFLAKE y al esquema ACCOUNT_USAGE. Si estás consultando una tabla fuera del esquema ACCOUNT_USAGE, asegúrate de que tu rol configurado tenga los permisos apropiados para acceder a la tabla.
La tabla siguiente describe los campos utilizados para definir métricas personalizadas.
Campo
Descripción
Obligatorio
Custom Metric Identifier
Este es un identificador para la métrica personalizada, que se utiliza para distinguir métricas personalizadas independientes en cada cuenta.
Sí
Consulta
Esta es la consulta SQL que se debe ejecutar. Puede ser una sentencia simple o un script de varias líneas. Se evalúan todas las filas de los resultados.
Sí
Columnas de metadatos
Esta es una lista que representa cada columna ordenada secuencialmente de izquierda a derecha. Hay dos campos obligatorios para cada columna: - Custom Column Name: Este es el sufijo que se añade a metric_prefix para formar el nombre completo de la métrica. Si el tipo se especifica como Tag Key, la columna se aplica como una etiqueta a cada métrica recopilada por esta consulta. - Metadata Type: Este es el método de envío (por ejemplo, gauge, count o tasa). Esto también se puede configurar para etiquetar cada métrica en la fila con el nombre y el valor (<name>:<row_value>) del elemento en esta columna.
Sí
Notas:
Al menos un elemento en las columnas definidas debe ser un tipo de métrica (gauge, count, tasa, distribución).
El número de elementos en las columnas debe ser igual a la cantidad de columnas devueltas en la consulta.
El orden en que se definen los elementos en las columnas debe ser el mismo orden en que se devuelven en la consulta.
Ejemplo:
Validación
Para verificar el resultado, busca las métricas utilizando el resumen de métricas:
Datos recopilados
Métricas
snowflake.storage.storage_bytes.total (gauge)
The average number of bytes of table storage used including bytes for data currently in Time Travel. Shown as byte
snowflake.storage.stage_bytes.total (gauge)
The average number of bytes of stage storage used by files in all internal stages. Shown as byte
snowflake.storage.failsafe_bytes.total (gauge)
The average number of bytes of data in Fail-safe. Shown as byte
snowflake.storage.database.storage_bytes (gauge)
The average number of bytes of database storage used. Shown as byte
snowflake.storage.database.failsafe_bytes (gauge)
The average number of bytes of Fail-safe storage used. Shown as byte
snowflake.billing.virtual_warehouse.avg (gauge)
The average overall credits billed per hour for virtual warehouses. Shown as unit
snowflake.billing.virtual_warehouse.sum (gauge)
The sum of overall credits billed for virtual warehouses. Shown as unit
snowflake.billing.cloud_service.avg (gauge)
The average overall credits billed per hour for cloud services. Shown as unit
snowflake.billing.cloud_service.sum (gauge)
The total overall credits billed for cloud services. Shown as unit
snowflake.billing.total_credit.avg (gauge)
The average overall of credits used per hour for the account. This is the sum of snowflake.billing.cloudservice and snowflake.billing.virtualwarehouses. Shown as unit
snowflake.billing.total_credit.sum (gauge)
The total overall of credits used for the account. This is the sum of snowflake.billing.cloudservice and snowflake.billing.virtualwarehouses. Shown as unit
The average total number of credits used per hour for the warehouse. NOTE: This value does not take into account adjustments which may be higher than your actual credit consumption. Shown as unit
The total number of credits used for the warehouse. NOTE: This value does not take into account adjustments which may be higher than your actual credit consumption. Shown as unit
snowflake.logins.fail.count (count)
Total failed login attempts. Shown as error
snowflake.logins.success.count (count)
Total successful login attempts. Shown as success
snowflake.logins.total (count)
Total number of login attempts. Shown as attempt
snowflake.query.executed (gauge)
The average number of queries executed. Shown as query
snowflake.query.queued_overload (gauge)
Average number of queries queued because the warehouse was overloaded. Shown as query
snowflake.query.queued_provision (gauge)
Average number of queries queued because the warehouse was being provisioned. Shown as query
snowflake.query.blocked (gauge)
Average number of queries blocked by a transaction lock. Shown as query
snowflake.query.execution_time (gauge)
Average query execution time. Shown as millisecond
snowflake.query.compilation_time (gauge)
Average query compilation time. Shown as millisecond
snowflake.query.bytes_scanned (gauge)
Average query bytes scanned. Shown as byte
snowflake.query.bytes_written (gauge)
Average query bytes written. Shown as byte
snowflake.query.bytes_deleted (gauge)
Average query bytes deleted. Shown as byte
snowflake.data_transfer.bytes.avg (gauge)
Average bytes transferred. Shown as byte
snowflake.data_transfer.bytes.sum (gauge)
Total bytes transferred. Shown as byte
snowflake.auto_recluster.credits_used.avg (gauge)
Average credits billed for automatic reclustering. Shown as unit
snowflake.auto_recluster.credits_used.sum (gauge)
Total credits billed for automatic reclustering. Shown as unit
Average bytes owned by (and billed to) this table that are retained after deletion because they are referenced by one or more clones of this table. Shown as byte
snowflake.pipe.credits_used.avg (gauge)
Average number of credits billed for Snowpipe data loads. Shown as unit
snowflake.pipe.credits_used.sum (gauge)
Total number of credits billed for Snowpipe data loads. Shown as unit
snowflake.pipe.bytes_inserted.avg (gauge)
Average number of bytes loaded from Snowpipe. Shown as byte
snowflake.pipe.bytes_inserted.sum (gauge)
Total number of bytes loaded from Snowpipe. Shown as byte
snowflake.pipe.files_inserted.avg (gauge)
Average number of files loaded from Snowpipe. Shown as file
snowflake.pipe.files_inserted.sum (gauge)
Total number of files loaded from Snowpipe. Shown as file
snowflake.replication.credits_used.avg (gauge)
Average number of credits used for database replication. Shown as unit
snowflake.replication.credits_used.sum (gauge)
Total number of credits used for database replication. Shown as unit
The sum of overall of credits used for the organization. This is the sum of snowflake.organization.credit.cloudservice.sum and snowflake.organization.credit.virtualwarehouse.sum.
The average number of overall of credits used for the organization. This is the sum of snowflake.organization.credit.cloudservice.avg and snowflake.organization.credit.virtualwarehouse.avg.
The total number of credits billed for the account in the day. It is the sum of snowflake.organization.credit.cloudservice.sum, snowflake.organization.credit.virtualwarehouse.sum, and snowflakeweb.organization.credit.cloudservice_adjustment.sum.
The average number of credits billed for the account in the day. It is the sum of snowflake.organization.credit.cloudservice.avg, snowflake.organization.credit.virtualwarehouse.avg, and snowflakeweb.organization.credit.cloudservice_adjustment.avg.
snowflake.organization.currency.usage (gauge)
Sum of the total number of credits charged per day.
The total number of credits used by the warehouse. Sum of snowflake.organization.warehouse.cloudservice.sum and snowflake.organization.warehouse.totalcredit.sum.
The average total number of credits used by the warehouse. Sum of snowflake.organization.warehouse.cloudservice.avg and snowflake.organization.warehouse.totalcredit.avg
The amount of consumption at on demand prices that will be invoiced given that all the free usage and capacity balances have been exhausted. This is a negative value (e.g. -250) until the invoice is paid. This is the end of day balance.
snowflake.organization.balance.rollover (gauge)
The amount of rollover balance in currency that is available for use. At the end of a contract term
snowflake.organization.balance.free_usage (gauge)
The amount of free usage in currency that is available for use. This is the end of day balance
Eventos
La integración de Snowflake Web no incluye ningún evento.
Checks de servicio
La integración de Snowflake Web no incluye ningún check de servicio.
El check del Agent de Snowflake ya no es compatible; se recomienda cambiar a la nueva integración de Snowflake para obtener funciones adicionales y un menor volumen de llamadas a la API para Snowflake.
Agent: información general
Este check monitoriza Snowflake a través del Datadog Agent. Snowflake es un almacén de datos analíticos SaaS y se ejecuta completamente en la infraestructura de la nube.
Esta integración monitoriza el uso de crédito, la facturación, el almacenamiento, las métricas de consulta y más.
Nota: Las métricas se recopilan mediante consultas a Snowflake. Las consultas realizadas mediante la integración de Datadog se facturan a través de Snowflake.
Agent: configuración
Sigue las instrucciones a continuación para instalar y configurar este check para un Agent que se ejecuta en un host.
Agent: instalación
El check de Snowflake está incluido en el paquete del Datadog Agent.
Nota: El check de Snowflake no está disponible en el Datadog Agent v6 con Python 2. Para usar Snowflake en el Agent v6, consulta Usar Python 3 con el Datadog Agent v6 o actualiza al Agent v7.
Agent: configuración
Snowflake recomienda otorgar permisos a un rol alternativo como `SYSADMIN`. Lee más sobre cómo controlar el rol ACCOUNTADMIN para obtener más información.
Crea un rol y un usuario específicos de Datadog para monitorizar Snowflake. En Snowflake, ejecuta lo siguiente para crear un rol personalizado con acceso al esquema ACCOUNT_USAGE.
Nota: Por defecto, esta integración monitoriza la base de datos SNOWFLAKE y el esquema ACCOUNT_USAGE. Consulta “Recopilación de datos de la organización” para obtener información sobre cómo monitorizar el esquema ORGANIZATION_USAGE.
Esta base de datos está disponible por defecto y solo la pueden ver los usuarios con el rol ACCOUNTADMIN o cualquier rol otorgado por el ACCOUNTADMIN.
use role ACCOUNTADMIN;
grant imported privileges on database snowflake to role SYSADMIN;
use role SYSADMIN;
Como alternativa, puedes crear un rol personalizado DATADOG con acceso a ACCOUNT_USAGE.
-- Crea un nuevo rol destinado a monitorizar el uso de Snowflake.
create role DATADOG;
-- Concede privilegios en la base de datos SNOWFLAKE al nuevo rol.
grant imported privileges on database SNOWFLAKE to role DATADOG;
-- Concede el uso de tu almacén predeterminado al rol DATADOG.
grant usage on warehouse <WAREHOUSE> to role DATADOG;
-- Crea un usuario; omite este paso si estás utilizando un usuario existente.
create user DATADOG_USER
LOGIN_NAME = DATADOG_USER
password = '<PASSWORD>'
default_warehouse = <WAREHOUSE>
default_role = DATADOG
default_namespace = SNOWFLAKE.ACCOUNT_USAGE;
-- Concede el rol de monitor al usuario.
grant role DATADOG to user <USER>;
Edita el archivo snowflake.d/conf.yaml, en la carpeta conf.d/ en la raíz del directorio de configuración de tu Agent para comenzar a recopilar los datos de rendimiento de Snowflake. Consulta el ejemplo snowflake.d/conf.yaml para conocer todas las opciones de configuración disponibles.
## @param account - string - required## Name of your account (provided by Snowflake), including the platform and region if applicable.## For more information on Snowflake account names,## see https://docs.snowflake.com/en/user-guide/connecting.html#your-snowflake-account-name#- account:<ORG_NAME>-<ACCOUNT_NAME>## @param username - string - required## Login name for the user.#username:<USER>## @param password - string - required## Password for the user#password:<PASSWORD>## @param role - string - required## Name of the role to use.#### By default, the SNOWFLAKE database is only accessible by the ACCOUNTADMIN role. Snowflake recommends## configuring a role specific for monitoring:## https://docs.snowflake.com/en/sql-reference/account-usage.html#enabling-account-usage-for-other-roles#role:<ROLE>## @param min_collection_interval - number - optional - default: 15## This changes the collection interval of the check. For more information, see:## https://docs.datadoghq.com/developers/write_agent_check/#collection-interval#### NOTE: Most Snowflake ACCOUNT_USAGE views are populated on an hourly basis,## so to minimize unnecessary queries, set the `min_collection_interval` to 1 hour.#min_collection_interval:3600# @param disable_generic_tags - boolean - optional - default: false# Generic tags such as `cluster` will be replaced by <integration_name>_cluster to avoid# getting mixed with other integration tags.# disable_generic_tags: true
In the default `conf.yaml`, the min_collection_interval is 1 hour.
Snowflake metrics are aggregated by day, you can increase the interval to reduce the number of queries. Note: Snowflake ACCOUNT_USAGE views have a known latency of 45 minutes to 3 hours.
Por defecto, esta integración monitoriza el esquema ACCOUNT_USAGE, pero se puede configurar para monitorizar métricas a nivel de la organización.
Para recopilar métricas de la organización, cambia el campo del esquema a ORGANIZATION_USAGE y aumenta min_collection_interval a 43200 en la configuración de la integración. Esto reduce el número de consultas a Snowflake, ya que la mayoría de las consultas de la organización tienen una latencia de hasta 24 horas.
Nota: Para monitorizar las métricas de la organización, tu user debe tener el rol ORGADMIN.
De forma predeterminada, solo se habilitan algunas métricas de la organización. Para recopilar todas las métricas de la organización disponibles, utiliza la opción de configuración metric_groups:
Si deseas recopilar datos para varios entornos de Snowflake, añade cada entorno como una instancia en tu archivo snowflake.d/conf.yaml. Por ejemplo, si necesitas recopilar datos para dos usuarios llamados DATADOG_SYSADMIN y DATADOG_USER:
También puedes configurar proxy_host, proxy_port, proxy_user y proxy_password bajo init_config en snowflake.d/conf.yaml.
Nota: Snowflake formatea automáticamente las configuraciones de proxy y establece variables de entorno de proxy estándar.
Estas variables también afectan todas las solicitudes de integraciones, incluidos los orquestadores como Docker, ECS y Kubernetes.
Conectividad privada a la configuración de Snowflake
Si la conectividad privada (como AWS PrivateLink) está habilitada en Snowflake, puedes configurar la integración de Snowflake actualizando la opción de configuración account con el siguiente formato:
- account:<ACCOUNT>.<REGION_ID>.privatelink
Consultas personalizadas de Snowflake
La integración de Snowflake admite consultas personalizadas. De forma predeterminada, la integración se conecta a la base de datos compartida SNOWFLAKE y al esquema ACCOUNT_USAGE.
Para ejecutar consultas personalizadas en un esquema o una base de datos diferentes, añade otra instancia al ejemplo snowflake.d/conf.yaml y especifica las opciones database y schema.
Asegúrate de que el usuario y el rol tengan acceso a la base de datos o al esquema especificados.
Opciones de configuración
La opción custom_queries tiene las siguientes opciones:
Opción
Obligatorio
Descripción
query
Sí
Este es el SQL que se va a ejecutar. Puede ser una sentencia simple o un script de varias líneas. Se evalúan todas las filas de los resultados. Utiliza la barra vertical si requieres un script de varias líneas.
columns
Sí
Esta es una lista que representa cada columna ordenada de forma secuencial de izquierda a derecha.
Hay 2 datos necesarios: - name: este es el sufijo que hay que anexar a metric_prefix para formar el nombre completo de la métrica. Si type se especifica como tag, la columna se aplica como etiqueta a las métricas que recoge esta consulta. - type: este es el método de envío (gauge, count, rate, etc.). También puede configurarse como tag para etiquetar las métricas de la fila con el nombre y el valor (<name>:<row_value>) del elemento en esta columna.
tags
No
Una lista de etiquetas (tags) estáticas que pueden aplicarse a las métricas.
Notas:
Al menos uno de los elementos definidos en columns debería ser un tipo de métrica (gauge, count, rate).
El número de elementos en las columnas debe ser igual a la cantidad de columnas devueltas en la consulta.
El orden en que se definen los elementos en columns debe ser el mismo orden en que se devuelven en la consulta.
custom_queries:- query:select F3, F2, F1 from Table;columns:- name:f3_metric_aliastype:gauge- name:f2_tagkeytype:tag- name:f1_metric_aliastype:counttags:- test:snowflake
Ejemplo
El siguiente ejemplo es una consulta que cuenta todas las consultas de la vista QUERY_HISTORY etiquetadas por nombres de base de datos, esquema y almacén.
select count(*), DATABASE_NAME, SCHEMA_NAME, WAREHOUSE_NAME from QUERY_HISTORY group by 2, 3, 4;
Configuración de una consulta personalizada
La configuración de una consulta personalizada en instances tiene el siguiente aspecto:
custom_queries:- query:select count(*), DATABASE_NAME, SCHEMA_NAME, WAREHOUSE_NAME from QUERY_HISTORY group by 2, 3, 4;columns:- name:query.totaltype:gauge- name:database_nametype:tag- name:schema_nametype:tag- name:warehouse_nametype:tagtags:- test:snowflake
Nota: Por defecto, solo están habilitadas las métricas de los siguientes grupos de métricas: snowflake.query.*, snowflake.billing.*, snowflake.storage.* y snowflake.logins.*.
Consulta Métricas para obtener una lista de las métricas que proporciona este check.
Agent: eventos
Snowflake no incluye ningún evento.
Agent: checks de servicio
snowflake.can_connect Devuelve CRITICAL si el check no puede autenticar las credenciales de Snowflake. De lo contrario, devuelve OK. Estados: ok, critical