Frühere Funktionalität zur Protokollierung und gemeinsamen Nutzung von Ereignissen – Veraltet¶
In diesem Thema werden die veraltete Methode zur Einstellung der Protokollierung und der gemeinsamen Nutzung von Ereignissen vor der Einführung von Ereignisdefinitionen beschrieben.
Anbieter, die die Protokollierung und gemeinsame Nutzung von Ereignissen einstellen, sollten die unter Protokollierung und Ablaufverfolgung für eine App konfigurieren beschriebene Methode verwenden. Unter Überlegungen bei der Migration von der bisherigen Funktionalität der Freigabe von Ereignissen finden Sie Informationen über die Migration von der veralteten zur neuen Funktionalität für die Protokollierung und den Austausch von Ereignissen.
Warnung
Das in diesem Thema beschriebene Verfahren zur Einstellung der Protokollierung und der gemeinsamen Nutzung von Ereignissen wird in einem zukünftigen Release veraltet sein.
Frühere Funktionen zur Protokollierung und gemeinsamen Nutzung von Ereignissen¶
Die unter diesem Thema bereitgestellten Informationen zeigen das Einrichten von Protokollierung und Ereignisfreigabe für Anbieter. Informationen zu den Anforderungen an Verbraucher beim Konfigurieren dieses Features finden Sie unter Aktivieren von Protokollierung und Ereignisfreigabe für eine App.
Mithilfe der Protokollierung und von Ablaufverfolgungsereignissen können Sie Informationen über eine App sammeln, um Fehler und Probleme zu beheben. Durch die Verwendung der Protokollierung und von Ablaufverfolgungsereignissen können Sie sich auch ein besseres Bild davon machen, wie Ihre App ausgeführt wird, und sie dann optimieren.
Workflow zum Einrichten von Protokollierung und Ereignisfreigabe als Anbieter¶
Als Anbieter können Sie die Protokollierung und Ereignisfreigabe für eine App einrichten, indem Sie Folgendes tun:
Überprüfen der Hinweise zur Verwendung von Protokollierung und Ereignisfreigabe
Legen Sie die Ablaufverfolgungsebene und den Protokolliergrad in der Manifest-Datei fest.
Konfigurieren Sie ein Konto zum Speichern der freigegebenen Ereignisse.
Nachdem der Verbraucher eine App und die Protokollierung und Ereignisfreigabe aktiviert hat, können Sie die von der App freigegebenen Protokoll- und Ereignisinformationen anzeigen:
Hinweise zur Verwendung von Protokollierung und Ereignisfreigabe¶
Bevor Anbieter die Protokollierung und Ereignisfreigabe bei einer App verwenden können, müssen sie Folgendes beachten:
Anbieter sind für alle Kosten verantwortlich, die auf Seiten des Anbieters mit der Ereignisfreigabe verbunden sind, einschließlich Datenaufnahme und Datenspeicherung.
Anbieter müssen über ein Konto zum Speichern der freigegebenen Ereignisse in jeder Region verfügen, in der Sie die Ereignisfreigabe unterstützen möchten.
Anbieter müssen für eine App Standardwerte für Protokolliergrad und Ablaufverfolgungsebene in der Manifest-Datei festlegen.
Bemerkung
Die Ereignisfreigabe kann nicht für eine App aktiviert werden, die in demselben Konto installiert ist wie das Anwendungspaket, auf dem sie basiert. Um die Ereignisfreigabe für eine App zu testen, muss ein Anbieter mehrere Konten verwenden.
Protokollierung und Ablaufverfolgungsereignisse in Funktionen und Prozeduren konfigurieren¶
Das Native Apps Framework benötigt eine Ereignistabelle zum Speichern der Protokollmeldungen und Ablaufverfolgungsereignisse, die von Funktionen und gespeicherten Prozeduren in einer App generiert werden.
Bemerkung
Wenn der Verbraucher einer App keine Ereignistabelle einrichtet und diese Tabelle nicht zur aktiven Tabelle macht, bevor die App installiert wird, werden Ereignis- und Protokolldaten verworfen.
Ein Konto kann mehrere Ereignistabellen haben, aber es kann immer nur eine davon als aktive Ereignistabelle für ein Snowflake-Konto festgelegt sein. Ohne eine aktive Ereignistabelle werden die von der App generierten Protokollmeldungen und Ablaufverfolgungsereignisse nicht erfasst. Dies gilt selbst dann, wenn die Funktionen und Prozeduren in einer App die Protokollierung und Ablaufverfolgung des Ereignisses APIs aufrufen.
Zum Erstellen einer Ereignistabelle verwenden Sie den Befehl CREATE EVENT TABLE. Weitere Informationen dazu finden Sie unter Überblick über die Ereignisse.
Nachdem durch den Code Protokollmeldungen und Ablaufverfolgungsereignisse erfasst wurden, kann ein Anbieter die erfassten Daten abfragen.
Weitere Informationen zum Erfassen und Abfragen von Protokoll- und Ablaufverfolgungsdaten finden Sie unter:
Ablaufverfolgungsebene und Protokolliergrad in der Manifest-Datei festlegen¶
Um für die Version einer App die Standardwerte für Protokolliergrad und Ablaufverfolgungsereignis-Ebene festzulegen, legen Sie die Parameter log_level
und trace_level
in der Manifest-Datei wie im folgenden Beispiel fest:
artifacts:
setup_script: setup.sql
configuration:
trace_level: OFF
log_level: DEBUG
Wenn ein Anbieter die Ablaufverfolgung aktiviert, erfasst eine Snowflake Native App automatisch die Start- und Endzeiten für alle Abfragen und Aufrufe gespeicherter Prozeduren.
Bemerkung
Das Veröffentlichen einer Snowflake Native App mit der Eigenschaft trace_level
, die auf einen anderen Wert als OFF
eingestellt ist, könnte jedem Benutzer im Verbraucherkonto, der die Ereignistabelle einsehen kann, Aufrufe zu verborgenen gespeicherten Prozeduren offenlegen.
Informationen zu den unterstützten Werten für trace_level
und log_level
finden Sie unter Einstellung der Grade für Protokollierung, Metriken und Ablaufverfolgung und Einstellung der Grade für Protokollierung, Metriken und Ablaufverfolgung.
Bei der Erstinstallation der Snowflake Native App werden die in der Manifest-Datei definierten Protokolliergrade verwendet. Wenn der Protokolliergrad bei einem späteren Upgrade geändert wird, tritt der neue Protokolliergrad in Kraft, sobald der Upgrade-Prozess abgeschlossen ist.
Protokolliergrad und Ablaufverfolgungsebene können nur in der Manifest-Datei festgelegt werden. Der Verbraucher ist nicht berechtigt, den Protokolliergrad mit den Befehlen ALTER APPLICATION oder ALTER DATABASE zu ändern.
Ebenso werden alle Einstellungen auf Sitzungsebene für den Protokolliergrad von der App ignoriert.
Für ein Anwendungspaket definierte Werte für Protokolliergrad und Ablaufverfolgungsereignis-Ebene anzeigen¶
Verwenden Sie den DESCRIBE APPLICATION-Befehl, um den Protokolliergrad einer App anzuzeigen, wie im folgenden Befehl dargestellt:
DESC APPLICATION HelloSnowflake;
Verwenden Sie den SHOW VERSIONS-Befehl, um den Protokolliergrad der in einem Anwendungspaket definierten Versionen einer App anzuzeigen, wie im folgenden Beispiel gezeigt:
SHOW VERSIONS
IN APPLICATION PACKAGE HelloSnowflake;
In Ereignistabelle gespeicherte Protokolleinträge und Ereignisse anzeigen¶
Um die in der Ereignistabelle gespeicherten Protokolleinträge und Ereignisse anzuzeigen, verwenden Sie den Befehl SELECT wie im folgenden Beispiel gezeigt:
SELECT * FROM EVENT_DB.EVENT_SCHEMA.MY_EVENT_TABLE
Feststellen, ob die Ereignisfreigabe im Verbraucherkonto aktiviert ist¶
In manchen Kontexten muss ein Anbieter feststellen, ob die Ereignisfreigabe in einem Verbraucherkonto aktiviert wurde. Ein Anbieter muss z. B. die App-Funktionalität deaktivieren, wenn die Ereignistabelle nicht verfügbar ist.
Um festzustellen, ob die Ereignisfreigabe in einem Verbraucherkonto aktiviert ist, können Anbieter bei der Definition der App-Logik die folgenden Systemfunktionen aufrufen:
IS_APPLICATION_SHARING_EVENTS_WITH_PROVIDER
Gibt TRUE zurück, wenn die App die Ereignisfreigabe ermöglicht und eine aktive Ereignistabelle im Verbraucherkonto verfügbar ist. Gibt FALSE zurück, andernfalls.
IS_APPLICATION_INSTALLED_FROM_SAME_ACCOUNT
Gibt TRUE zurück, wenn die App auf demselben Konto installiert wurde wie das Anwendungspaket, auf dem sie basiert. Gibt andernfalls FALSE zurück.
Bemerkung
Diese Systemfunktion kann nur von innerhalb einer App aufgerufen werden. Weitere Informationen dazu finden Sie unter Mit dem Python Permission SDK feststellen, ob die Ereignisfreigabe aktiviert ist und Mit SQL feststellen, ob die Ereignisfreigabe aktiviert ist.
Mit dem Python Permission SDK feststellen, ob die Ereignisfreigabe aktiviert ist¶
Das Python Permission SDK bietet die folgenden Funktionen, um festzustellen, ob die Ereignisfreigabe in einem Verbraucherkonto aktiviert ist:
is_event_sharing_enabled()
Gibt TRUE zurück, wenn die Eigenschaft SHARE_EVENTS_WITH_PROVIDER den Wert „true“ hat und im Verbraucherkonto eine aktive Ereignistabelle konfiguriert ist. Gibt FALSE zurück, andernfalls.
is_application_local_to_package()
Gibt TRUE zurück, wenn sich die App in demselben Konto wie das Anwendungspaket befindet. Gibt FALSE zurück, andernfalls.
Mit SQL feststellen, ob die Ereignisfreigabe aktiviert ist¶
Im folgenden Beispiel wird gezeigt, wie Sie eine gespeicherte Prozedur aufrufen, wenn die Ereignisfreigabe im Verbraucherkonto aktiviert ist.
Betrachten Sie die folgende gespeicherte SQL-Prozedur, die eine Funktion zum Berechnen der Summe von zwei Zahlen erstellt:
CREATE OR ALTER VERSIONED SCHEMA app_schema;
CREATE OR REPLACE PROCEDURE app_schema.hidden_sum(num1 float, num2 float)
RETURNS FLOAT
LANGUAGE SQL
EXECUTE AS OWNER
AS $$
DECLARE
SUM FLOAT;
BEGIN
SYSTEM$LOG('INFO', 'CALCULATE THE SUM OF TWO NUMBERS');
SUM := :NUM1 + :NUM2;
RETURN SUM;
END;
$$;
Wenn diese SQL-Befehle zum Setup-Skript der App hinzugefügt werden, wird beim Installieren der App die gespeicherte Prozedur hidden_sum
im Verbraucherkonto erstellt. Diese gespeicherte Prozedur ist jedoch für die Verbraucher nicht sichtbar, da keiner Anwendungsrolle die USAGE-Berechtigung für die gespeicherte Prozedur zugewiesen wird.
Das folgende Beispiel zeigt, wie Sie die von den Systemfunktionen IS_APPLICATION_SHARING_EVENTS_WITH_PROVIDER und IS_APPLICATION_INSTALLED_FROM_SAME_ACCOUNT zurückgegebenen Werte verwenden können, um die gespeicherte Prozedur hidden_sum
aufzurufen.
CREATE OR REPLACE PROCEDURE app_schema.sum(num1 float, num2 float)
RETURNS STRING
LANGUAGE SQL
EXECUTE AS OWNER
AS $$
BEGIN
IF (SYSTEM$IS_APPLICATION_INSTALLED_FROM_SAME_ACCOUNT() or SYSTEM$IS_APPLICATION_SHARING_EVENTS_WITH_PROVIDER()) THEN
CALL APP_SCHEMA.HIDDEN_SUM(:NUM1, :NUM2);
ELSE
-- notify consumers that they need to enable event sharing
RETURN 'Sorry you can\'t access the API, please enable event sharing.';
END IF;
END;
$$;
CREATE APPLICATION ROLE IF NOT EXISTS ADMIN_ROLE;
GRANT USAGE ON SCHEMA APP_SCHEMA TO APPLICATION ROLE ADMIN_ROLE;
In diesem Beispiel testet die gespeicherte Prozedur sum
die Werte der gespeicherten Prozeduren IS_APPLICATION_SHARING_EVENTS_WITH_PROVIDER und IS_APPLICATION_INSTALLED_FROM_SAME_ACCOUNT. Wenn einer der Werte true
ist, ruft die gespeicherte Prozedur sum
die gespeicherte Prozedur hidden_sum
auf.
Ereignisfreigabe von Verbrauchern mit dem Python Permission SDK anfordern¶
Ein Anbieter kann das Python Permission SDK nutzen, um eine Streamlit-App zu erstellen, mit der Verbraucher aufgefordert werden, die Ereignisfreigabe in ihrem Konto zu aktivieren.
Das SDK bietet die Methode request_event_sharing()
, die ein Dialogfeld in Snowsight anzeigt, in dem der Verbraucher aufgefordert wird, die Ereignisfreigabe in seinem Konto zu aktivieren. Wenn die Ereignistabelle im Verbraucherkonto nicht vorhanden ist, ermöglicht das Dialogfeld dem Verbraucher die Ereignistabelle unter Verwendung der Rolle ACCOUNTADMIN festzulegen.
Beispiel: Verwenden des Python Permission SDK mit Ereignistabellen¶
Das folgende Streamlit-Beispiel zeigt, wie Sie mit dem Python Permission SDK Folgendes tun können:
Feststellen, ob die Ereignisfreigabe aktiviert ist.
Wenn die Ereignisfreigabe aktiviert ist, rufen Sie die Funktion
critical_feature_that_requires_event_sharing()
auf.Wenn die Ereignisfreigabe nicht aktiviert ist, rufen Sie die Funktion
request_event_sharing()
auf, um einen Dialog in Snowsight anzuzeigen, der den Verbraucher auffordert, die Ereignisfreigabe zu aktivieren.
import streamlit as st
import snowflake.permissions as permissions
def critical_feature_that_requires_event_sharing():
st.write("critical_feature_that_requires_event_sharing")
def main():
if permissions.is_event_sharing_enabled() or permissions.is_application_local_to_package():
critical_feature_that_requires_event_sharing()
else:
permissions.request_event_sharing()
if __name__ == "__main__":
main()
In diesem Beispiel wird die Methode critical_feature_that_requires_event_sharing()
nur aufgerufen, wenn eine der folgenden Bedingungen erfüllt ist:
Die Ereignisfreigabe ist aktiviert und die Ereignistabelle ist vorhanden.
Die Snowflake Native App befindet sich in demselben Konto wie das Anwendungspaket.
Wenn keine der beiden Bedingungen erfüllt ist, ruft die Streamlit-App die Methode request_event_sharing()
auf, die den Verbraucher auffordert, eine Ereignistabelle auszuwählen.
Weitere Informationen dazu finden Sie unter Feststellen, ob die Ereignisfreigabe im Verbraucherkonto aktiviert ist.