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.

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

RECORD

Attribut severity_text, dessen Wert der höchste Schweregrad der aktuellen Laufzeitumgebung der Handler-Sprache ist. Bei einem in Python geschriebenen Handler lautet der Wert beispielsweise FATAL.

RECORD_ATTRIBUTES

Die folgenden Attribute werden für eine unbehandelte Ausnahme erfasst.

  • exception.message – Die Fehlermeldung.

  • exception.type – Der Klassenname der Ausnahme.

  • exception.stacktrace – Der Stacktrace einer unbehandelten Ausnahme, formatiert durch die Laufzeitumgebung der Handler-Sprache.

  • exception.escaped – true, wenn dieser Eintrag von einer unbehandelten Ausnahme stammt.

VALUE

Die Zeichenfolge exception.

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';
Copy

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

RECORD

Ein Attribut name, dessen Wert exception ist, und ein Attribut status, dessen Wert STATUS_CODE_ERROR ist.

RECORD_ATTRIBUTES

Die folgenden Attribute werden für eine unbehandelte Ausnahme erfasst.

  • exception.message – Die Fehlermeldung.

  • exception.type – Der Klassenname der Ausnahme.

  • exception.stacktrace – Der Stacktrace einer unbehandelten Ausnahme, formatiert durch die Laufzeitumgebung der Handler-Sprache.

  • exception.escaped – true, wenn dieser Eintrag von einer unbehandelten Ausnahme stammt.

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';
Copy

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';
Copy

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.