Captura de mensagens de exceções não tratadas¶
Por padrão, quando você configura uma tabela de eventos, o Snowflake registra automaticamente exceções não tratadas nos manipuladores de UDF procedimento na tabela de eventos. A captura dessas mensagens não requer a inclusão de código de manipulador específico para criação de log ou rastreamento. Você pode desabilitar este recurso para que as exceções não tratadas não sejam registradas automaticamente.
Importante
As mensagens de erro podem conter informações confidenciais. Considere desabilitar esse recurso se não quiser que informações potencialmente confidenciais sejam capturadas em uma tabela de eventos. Para saber mais, consulte Proteção de dados confidenciais.
Nota
Atualmente, esse recurso é compatível com código de manipulador escrito apenas em Java ou Python.
Configuração do registro em log e o rastreamento para capturar exceções não tratadas¶
Defina o nível de log ou rastreamento para que o Snowflake capture entradas para exceções não tratadas. Você pode capturar entradas como entradas de log, entradas de eventos de rastreamento ou ambas.
Para capturar mensagens como entradas de log, defina o nível de registro em log como
ERROR
ou mais detalhado.Para capturar mensagens como entradas de eventos de rastreamento, defina o nível de rastreamento como
ALWAYS
ouON_EVENT
.
Dados capturados para exceções não tratadas¶
Você pode capturar dados de mensagens como uma entrada de log, um evento de rastreamento ou ambos. Os dados capturados serão diferentes entre entradas de eventos de log e de rastreamento.
Dados capturados em uma entrada de log¶
Por padrão, o Snowflake registra o seguinte na tabela de eventos para exceções não tratadas em manipuladores de UDF e procedimento:
Coluna |
Dados |
---|---|
Um atributo |
|
Os atributos a seguir são registrados para uma exceção não tratada.
|
|
A cadeia de caracteres |
Exemplo¶
O código no exemplo a seguir consulta uma tabela de eventos em busca de dados de log registrados para uma exceção não tratada de um manipulador de UDF.
Para obter mais informações sobre como consultar dados de log em uma tabela de eventos, consulte Acesso a dados de mensagens registradas.
SET event_table_name = 'my_db.public.my_event_table';
SELECT
RECORD['severity_text'] AS severity,
RECORD_ATTRIBUTES['exception.message'] AS error_message,
RECORD_ATTRIBUTES['exception.type'] AS exception_type,
RECORD_ATTRIBUTES['exception.stacktrace'] AS stacktrace
FROM
my_event_table
WHERE
RECORD_TYPE = 'LOG';
A seguir está a saída possível da consulta.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SEVERITY | ERROR_MESSAGE | EXCEPTION_TYPE | STACKTRACE |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| "FATAL" | "could not convert string to float: '$1,000,000.00'" | "ValueError" | "Traceback (most recent call last):\n File \"_udf_code.py\", line 6, in compute\nValueError: could not convert string to float: '$1,000,000.00'\n" |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Dados capturados em uma entrada de evento de rastreamento¶
Por padrão, o Snowflake registra o seguinte na tabela de eventos para exceções não tratadas em manipuladores de UDF e procedimento:
Coluna |
Dados |
---|---|
Um atributo |
|
Os atributos a seguir são registrados para uma exceção não tratada.
|
Exemplos¶
O código nos exemplos a seguir consulta uma tabela de eventos para obter dados de eventos de rastreamento registrados para uma exceção não tratada de um manipulador de UDF.
Para obter mais informações sobre como consultar dados de eventos de rastreamento em uma tabela de eventos, consulte Acesso a dados de rastreamento.
Exemplo de span¶
SET event_table_name = 'my_db.public.my_event_table';
SELECT
RECORD['status']['code'] AS span_status
FROM
my_event_table
WHERE
record_type = 'SPAN';
A seguir está a saída possível da consulta.
-----------------------
| SPAN_STATUS |
-----------------------
| "STATUS_CODE_ERROR" |
-----------------------
Exemplo de evento de span¶
SET event_table_name = 'my_db.public.my_event_table';
SELECT
RECORD['name'] AS event_name,
RECORD_ATTRIBUTES['exception.message'] AS error_message,
RECORD_ATTRIBUTES['exception.type'] AS exception_type,
RECORD_ATTRIBUTES['exception.stacktrace'] AS stacktrace
FROM
my_event_table
WHERE
RECORD_TYPE = 'SPAN_EVENT';
A seguir está a saída possível da consulta.
-----------------------------------------------------------------------------------------------------------------------------------------
| EVENT_NAME | ERROR_MESSAGE | EXCEPTION_TYPE | STACKTRACE |
-----------------------------------------------------------------------------------------------------------------------------------------
| "exception" | "could not convert string to float: '$1,000,000.00'" | "ValueError" | " File \"_udf_code.py\", line 6, in compute\n" |
-----------------------------------------------------------------------------------------------------------------------------------------
Proteção de dados confidenciais¶
Dado que as mensagens de log e rastreamento de exceções não tratadas podem incluir dados confidenciais, considere fazer o seguinte para proteger esses dados:
Tome medidas para proteger dados confidenciais, fazendo o seguinte:
Melhore seu código de tratamento de exceções para minimizar o risco de exceções não tratadas.
Aplique políticas de acesso a linhas à sua tabela de eventos para restringir o acesso a linhas que contenham informações de identificação pessoal (PII).
Crie uma exibição na parte superior da tabela de eventos e aplique políticas de mascaramento a ela para mascarar ou excluir informações de identificação pessoal (PII).
Desative o registro de exceções não tratadas definindo o parâmetro ENABLE_UNHANDLED_EXCEPTIONS_REPORTING como
false
.