Erfassen von Meldungen aus unbehandelten Ausnahmen¶
Nach dem Einrichten einer Ereignistabelle protokolliert Snowflake standardmäßig unbehandelte Ausnahmen in Prozedur- und UDF-Handlern in der Ereignistabelle. Für das Erfassen dieser Meldungen ist es nicht erforderlich, dass Sie speziellen Handler-Code für die Protokollierung oder Ablaufverfolgung hinzufügen. Sie können dieses Feature deaktivieren, damit unbehandelte Ausnahmen nicht automatisch protokolliert werden.
Wichtig
Fehlermeldungen können sensible Informationen enthalten. Ziehen Sie in Erwägung, diese Feature zu deaktivieren, wenn Sie nicht möchten, dass potenziell sensible Informationen in einer Ereignistabelle erfasst werden. Weitere Informationen dazu finden Sie unter Schutz sensibler Daten.
Bemerkung
Dieses Feature wird derzeit nur für in Java oder Python geschriebenen Handler-Code unterstützt.
Konfigurieren der Protokollierung und Ablaufverfolgung zur Erfassung unbehandelter Ausnahmen¶
Stellen Sie die Protokoll- oder Ablaufverfolgungsebene so ein, dass Snowflake Einträge für unbehandelte Ausnahmen erfasst. Sie können Einträge als Protokolleinträge, Ablaufverfolgungsereignis-Einträge oder beides erfassen lassen.
Um Meldungen als Protokolleinträge zu erfassen, setzen Sie den Protokolliergrad auf
ERROR
oder eine ausführlichere Stufe.Um Meldungen als Ablaufverfolgungsereignis-Einträge zu erfassen, setzen Sie den Protokolliergrad (Ablaufverfolgungsebene) auf
ALWAYS
oderON_EVENT
.
Erfasste Daten für unbehandelte Ausnahmen¶
Sie können Meldungsdaten als Protokolleintrag, Ablaufverfolgungsereignis oder beides erfassen. Die erfassten Daten unterscheiden sich zwischen Protokolleinträgen und Ablaufverfolgungsereignis-Einträgen.
In einem Protokolleintrag erfasste Daten¶
Standardmäßig erfasst Snowflake Folgendes in der Ereignistabelle für unbehandelte Ausnahmen in Prozedur- und UDF-Handlern:
Spalte |
Daten |
---|---|
Attribut |
|
Die folgenden Attribute werden für eine unbehandelte Ausnahme erfasst.
|
|
Die Zeichenfolge |
Beispiel¶
Der Code im folgenden Beispiel fragt eine Ereignistabelle nach Protokolldaten ab, die von einem UDF-Handler zu einer unbehandelten Ausnahme erfasst wurden.
Weitere Informationen zum Abfragen einer Ereignistabelle nach Protokolldaten finden Sie unter Zugriff auf protokollierte Meldungsdaten.
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';
Im Folgenden sehen Sie eine mögliche Ausgabe für diese Abfrage.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 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" |
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
In einem Ablaufverfolgungsereignis-Eintrag erfasste Daten¶
Standardmäßig erfasst Snowflake Folgendes in der Ereignistabelle für unbehandelte Ausnahmen in Prozedur- und UDF-Handlern:
Spalte |
Daten |
---|---|
Ein Attribut |
|
Die folgenden Attribute werden für eine unbehandelte Ausnahme erfasst.
|
Beispiele¶
Der Code in den folgenden Beispielen fragt eine Ereignistabelle nach Daten zu Ablaufverfolgungsereignissen ab, die von einem UDF-Handler zu einer unbehandelten Ausnahme erfasst wurden.
Weitere Informationen zum Abfragen einer Ereignistabelle für Daten zu Ablaufverfolgungsereignissen finden Sie unter Zugriff auf Ablaufverfolgungsdaten.
Beispiel für 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';
Im Folgenden sehen Sie eine mögliche Ausgabe für diese Abfrage.
-----------------------
| SPAN_STATUS |
-----------------------
| "STATUS_CODE_ERROR" |
-----------------------
Beispiel für Span-Ereignis¶
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';
Im Folgenden sehen Sie eine mögliche Ausgabe für diese Abfrage.
-----------------------------------------------------------------------------------------------------------------------------------------
| 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" |
-----------------------------------------------------------------------------------------------------------------------------------------
Schutz sensibler Daten¶
Da Protokoll- und Ablaufverfolgungsmeldungen von unbehandelten Ausnahmen sensible Daten enthalten können, sollten Sie folgende Maßnahmen zum Schutz dieser Daten ergreifen:
Ergreifen Sie Maßnahmen zum Schutz sensibler Daten, indem Sie z. B. Folgendes tun:
Verbessern Sie Ihren Code zur Ausnahmebehandlung, um das Risiko von unbehandelten Ausnahmen zu minimieren.
Wenden Sie Zeilenzugriffsrichtlinien auf Ihrer Ereignistabelle an, um den Zugriff auf Zeilen zu beschränken, die PII-Daten (personenidentifizierbare Informationen) enthalten.
Erstellen Sie eine Ansicht über der Ereignistabelle, und wenden Sie Maskierungsrichtlinien darauf an, um PII-Daten (personenidentifizierbare Informationen) zu maskieren oder zu löschen.
Deaktivieren Sie die Protokollierung unbehandelter Ausnahmen, indem Sie den Parameter ENABLE_UNHANDLED_EXCEPTIONS_REPORTING auf
false
setzen.