Definição de níveis para registro, métricas e rastreamento¶
É possível definir os níveis de limite para dados de telemetria de log, rastreamento ou métricas capturados em uma tabela de eventos.
Cada tipo de dados de telemetria oferece suporte ao seu próprio conjunto de níveis específicos para sua finalidade. É possível definir esses níveis usando o parâmetro que o Snowflake fornece para cada um. Também é possível definir alguns níveis usando Snowsight, que representa os parâmetros de nível de forma simplificada.
Para cada tipo de dados de telemetria, você pode fazer o seguinte:
Defina níveis específicos para cada tipo de dados de telemetria.
Defina níveis em todo o sistema para cada tipo, que estarão em vigor a menos que sejam substituídos.
Substitua níveis de todo o sistema configurando o nível para uma sessão ou em objetos específicos (como procedimentos e UDFs).
Os níveis são representados como parâmetros de sessão e parâmetros de objeto.
Nota
Você pode usar o código do manipulador para substituir o nível de log definido com SQL (conforme descrito neste tópico) quando seu manipulador for escrito em Python. Para obter mais informações, consulte Substituição dos níveis de limite de log com Python.
Escopo¶
Para cada tipo de dados de telemetria, é possível definir níveis para que eles entrem em vigor no escopo que melhor atenda às suas exigências. Em muitos casos, você pode substituir níveis definidos em um escopo maior, configurando-os em um escopo menor, conforme descrito em Como o Snowflake determina o nível de efeito. Por exemplo, talvez você queira ter um conjunto de níveis padrão no escopo da conta e, em seguida, definir níveis diferentes para objetos em um determinado banco de dados.
É possível definir cada um deles nos seguintes escopos:
- Conta:
Um nível definido para a conta está em vigor em todos os lugares da conta, exceto quando substituído ao ser definido no nível do objeto ou da sessão.
- Objeto:
É possível definir os níveis de telemetria nos seguintes tipos de objetos:
Banco de dados ou esquema que contém procedimentos e funções
Procedimento armazenado
Função definida pelo usuário (UDF) ou uma função de tabela definida pelo usuário (UDTF)
Por exemplo, para definir o nível de registro para uma UDF específica, use ALTER FUNCTION para definir o parâmetro LOG_LEVEL para essa UDF. Como outro exemplo, para definir o nível de registro padrão para todas as funções e procedimentos em um banco de dados, use ALTER DATABASE para definir o parâmetro LOG_LEVEL nesse banco de dados.
Nota
Não é possível definir o nível em objetos Streamlit. Em vez disso, defina o nível no banco de dados ou esquema que contém o objeto.
- Sessão:
Você pode definir o nível de telemetria para chamadas a funções e procedimentos feitas na sessão atual.
Níveis¶
Você pode definir os seguintes níveis para cada tipo de dados de telemetria:
- Registro:
Ao definir um nível, apenas os dados naquele nível e níveis mais severos são capturados em uma tabela de eventos e estão visíveis em Snowsight. Por exemplo, definir o parâmetro LOG_LEVEL como WARN significa que as mensagens nos níveis WARN, ERROR e FATAL são capturadas na tabela de eventos.
Ajuste o parâmetro LOG_LEVEL.
- Métricas:
Atualmente, é possível ter todos os dados de métricas capturados ou nenhum.
Ajuste o parâmetro METRIC_LEVEL.
- Rastreamento:
É possível especificar as seguintes características:
Escopo dos dados de eventos de rastreamento armazenados na tabela de eventos
Ajuste o parâmetro TRACE_LEVEL.
Se o texto SQL será capturado em uma instrução SQL rastreada
Isso é determinado pelo parâmetro SQL_TRACE_QUERY_TEXT. Para obter mais informações, consulte Rastreamento de instruções SQL.
Privilégios necessários¶
Para definir níveis em um objeto, é necessário usar uma função que receba ou herde os privilégios descritos nesta seção.
Por exemplo, o código no exemplo a seguir concede privilégios necessários para alguém que usa a função central_log_admin
para definir o nível de log para a conta:
GRANT MODIFY LOG LEVEL ON ACCOUNT TO ROLE central_log_admin;
Para mais informações sobre privilégios, consulte Privilégios de controle de acesso.
Nível a ser modificado |
Parâmetro a ser definido |
Privilégios necessários |
---|---|---|
Nível de registro |
Conta
Objeto
Sessão
|
|
Nível de métrica |
Conta
Objeto
Sessão
|
|
Nível de rastreamento |
Conta
Objeto
Sessão
|
|
Texto SQL em rastreamento SQL |
Conta
|
Definição dos níveis de telemetria¶
Você pode definir níveis de telemetria usando SQL ou, em alguns casos, Snowsight. Em muitos casos, você pode substituir níveis definidos em um escopo maior, configurando-os em um escopo menor, conforme descrito em Como o Snowflake determina o nível de efeito.
Antes de definir níveis, verifique se você tem acesso a uma função com os privilégios necessários.
É possível usar Snowsight para definir níveis de telemetria no nível da conta.
Faça login no Snowsight.
No menu de navegação, selecione Monitoring » Traces and Logs.
Na página Traces & Logs, selecione Set Event Level.
Para Set logging & tracing for, selecione o escopo desejado entre os seguintes:
Account
O banco de dados e, opcionalmente, o esquema
Selecione os níveis para os dados de telemetria que deseja ajustar.
All Events
On para ativar a coleta de todos os tipos de dados de telemetria; Off para desativar a coleta de todos os tipos de dados.
Traces
On para definir a coleta de dados de rastreamento para
ALWAYS
; Off para definir a coleta de dados de rastreamento paraOFF
. Para obter informações sobre níveis, consulte TRACE_LEVEL.Logs
On para definir a coleta de dados de log para
INFO
. Para obter informações sobre níveis, consulte LOG_LEVEL.Metrics
On para definir a coleta de dados de rastreamento para
ALL
; Off para definir a coleta de dados de rastreamento paraNONE
. Para obter informações sobre níveis, consulte METRIC_LEVEL.
Você pode usar SQL para definir níveis de telemetria para a conta e para objetos, como bancos de dados, funções e procedimentos.
Use o comando ALTER ACCOUNT para definir o parâmetro apropriado, com base nos dados de telemetria que deseja coletar.
O exemplo a seguir define o nível de log como ERROR para a conta:
-- Set the log level on the account
ALTER ACCOUNT SET LOG_LEVEL = ERROR;
Para definir o parâmetro LOG_LEVEL no objeto, use o comando ALTER <objeto>.
O exemplo a seguir define o nível de registro como ERROR para todas as funções e procedimentos no banco de dados db
. O exemplo substitui esse nível por WARN para a UDF f1(int)
.
USE ROLE central_log_admin;
-- Set the log levels on a database and UDF.
ALTER DATABASE db1 SET LOG_LEVEL = ERROR;
ALTER FUNCTION f1(int) SET LOG_LEVEL = WARN;
-- Set the log levels on a Snowpark Container Services service.
ALTER SERVICE test_service SET LOG_LEVEL = ERROR;
Para obter mais detalhes sobre como o Snowflake determina o nível de registro efetivo quando o LOG LEVEL é definido em objetos diferentes, consulte Como o Snowflake determina o nível de efeito.
Para definir o parâmetro LOG_LEVEL para a sessão atual, use o comando ALTER SESSION.
USE ROLE developer_debugging;
-- Set the logging level to DEBUG for the current session.
ALTER SESSION SET LOG_LEVEL = DEBUG;
Se o parâmetro de nível for definido como níveis diferentes para a sessão atual e nas funções e procedimentos chamados nessa sessão, o Snowflake determinará o nível efetivo a ser usado. Consulte Como o Snowflake determina o nível de efeito.
Como o Snowflake determina o nível de efeito¶
É possível substituir os parâmetros relacionados ao nível de telemetria (para objetos e sessões) usando uma hierarquia de níveis.
Por exemplo, você pode definir um nível para um valor para a conta e, em seguida, substituí-lo configurando o nível para um objeto, que está mais abaixo na hierarquia.
A seguir, descrevemos a hierarquia dos parâmetros de nível de sessão e objeto.
Para parâmetros de sessão, a hierarquia é Conta » Usuário » Sessão.
Isso significa que você pode definir o parâmetro para uma conta, substituir o parâmetro no nível da conta para um usuário e substituir o parâmetro no nível do usuário para a sessão atual.
Para parâmetros de objeto, a hierarquia é Conta » Banco de dados » Esquema » Objeto.
Isso significa que você pode definir o parâmetro para uma conta, substituir o parâmetro em nível de conta para um banco de dados ou esquema e substituir o parâmetro em nível de banco de dados ou esquema para procedimentos armazenados específicos e UDFs nesse banco de dados ou esquema.
Por exemplo, o LOG_LEVEL de uma função substitui o LOG_LEVEL da conta que contém a função. Se o LOG_LEVEL da conta for FATAL e o LOG_LEVEL da UDF de Java da conta for INFO, o LOG_LEVEL efetivo será INFO (o nível da função, não da conta):
ALTER ACCOUNT SET LOG_LEVEL = FATAL;
ALTER FUNCTION MyJavaUDF SET LOG_LEVEL = INFO;
-- The INFO log level is used because the FUNCTION MYJAVAUDF
-- is lower than the ACCOUNT in the hierarchy.
Nos casos em que o nível é definido nas hierarquias de parâmetro de sessão e de objeto, o nível mais detalhado é usado.
Para o nível de log, a tabela a seguir lista exemplos de como os parâmetros definidos na sessão e no objeto afetam o nível de log usado.
Valor da sessão
Valor do objeto, esquema, banco de dados ou conta
Nível de registro usado
(não definido)
WARN
WARN
DEBUG
(não definido)
DEBUG
WARN
ERROR
WARN
INFO
DEBUG
DEBUG
(não definido)
(não definido)
OFF
Para nível de métrica –
ALL
substituiNONE
.Para nível de rastreamento –
ALWAYS
substituiON_EVENT
eOFF
;ON_EVENT
substituiOFF
.