Erfassen von Meldungen aus unbehandelten Ausnahmen

Sie können unbehandelte Ausnahmen in Prozedur- und UDF-Handlern automatisch als Protokoll- oder Ablaufverfolgungsmeldungen in einer Ereignistabelle erfassen lassen. Für das Erfassen dieser Meldungen ist es nicht erforderlich, dass Sie speziellen Handler-Code für die Protokollierung oder Ablaufverfolgung hinzufügen.

Bemerkung

Dieses Feature wird derzeit nur für in Java oder Python geschriebenen Handler-Code unterstützt.

Wichtig

Fehlermeldungen können sensible Informationen enthalten. Bevor Sie dieses Feature aktivieren, sollten Sie überlegen, ob Sie potenziell sensible Informationen in einer Ereignistabelle erfassen möchten. Weitere Informationen dazu finden Sie unter Schutz sensibler Daten.

Erfassen unbehandelter Ausnahmeeinträge aktivieren

Gehen Sie wie folgt vor, um das Erfassen von Meldungen über unbehandelte Ausnahmen zu aktivieren:

  1. Richten Sie eine Ereignistabelle ein, wie unter Einrichten einer Ereignistabelle beschrieben.

  2. Setzen Sie den Parameter ENABLE_UNHANDLED_EXCEPTIONS_REPORTING auf true.

    Weitere Informationen zum Einstellen von Parametern finden Sie unter Parameterverwaltung.

  3. 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.

    1. Um Meldungen als Protokolleinträge zu erfassen, setzen Sie den Protokolliergrad auf ERROR oder eine ausführlichere Stufe.

    2. Um Meldungen als Ablaufverfolgungsereignis-Einträge zu erfassen, setzen Sie den Protokolliergrad (Ablaufverfolgungsebene) auf ALWAYS oder ON_EVENT.

Erfasste Daten für unbehandelte Ausnahmen

Wie unter Erfassen unbehandelter Ausnahmeeinträge aktivieren beschrieben, können Sie Meldungsdaten als Protokolleintrag, Ablaufverfolgungsereignis oder beides erfassen. Die erfassten Daten unterscheiden sich zwischen Protokolleinträgen und Ablaufverfolgungsereignis-Einträgen.

In einem Protokolleintrag erfasste Daten

Wenn Sie das Erfassen von unbehandelten Ausnahmen als Protokollmeldungen aktiviert haben, zeichnet Snowflake Folgendes in der Ereignistabelle auf:

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

Wenn Sie das Erfassen von unbehandelten Ausnahmen als Ablaufverfolgungsereignis aktiviert haben, zeichnet Snowflake Folgendes in der Ereignistabelle auf:

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:

  • Deaktivieren Sie die Protokollierung unbehandelter Ausnahmen, indem Sie den Parameter ENABLE_UNHANDLED_EXCEPTIONS_REPORTING auf false setzen.

  • 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.