Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ważna
Ta funkcja jest dostępna w prywatnej wersji zapoznawczej. Aby ją wypróbować, skontaktuj się z osobą kontaktową usługi Azure Databricks.
Wykorzystaj to odniesienie do implementacji generatora zdarzeń lub pisania zapytań nad zdarzeniami App Analytics. Definiuje schemat w wersji 1, kodowanie protokołu OpenTelemetry Protocol (OTLP) oraz kroki przetwarzania potrzebne przed agregacją.
Dla przykładu pierwszego zdarzenia zobacz: Zacznij z analityką aplikacji. Panel nawigacyjny i jego dodatkowe dane dotyczące dostępu do aplikacji znajdziesz w artykule Czym jest App Analytics?.
Schemat zdarzeń
Każde zdarzenie to zapis dziennika OpenTelemetry przechowywany otel_logs w tabeli aplikacji w Unity Catalog. Użyj skonfigurowanej nazwy tabeli, w tym dowolnego prefiksu. Tabela zawiera także inne rekordy logów, więc wybieramy zdarzenia analityczne według wersji schematu i typu zdarzenia.
Przykłady ładunku
Wybierz typ zdarzenia, aby zobaczyć jego ładunek. Każdy przykład to jeden rekord logu OTLP, umieszczony resourceLogs[].scopeLogs[].logRecords[] podczas eksportu.
Quickstart pokazuje ten wrapper żądań.
Poniższe identyfikatory i znacznik czasu są ilustracyjne. Generuj unikalny identyfikator dla każdego nowego zdarzenia i używaj jego rzeczywistego czasu wystąpienia. Przykłady pomijają opcjonalne session_id.
Działania
Zapisz zakończony raport eksportu. Opcjonalna właściwość format opisuje eksport bez zmiany nazwy zdarzenia.
{
"timeUnixNano": "1790164800000000000",
"eventName": "report_exported",
"attributes": [
{ "key": "databricks.app.analytics.schema.version", "value": { "intValue": "1" } },
{ "key": "databricks.app.analytics.event.id", "value": { "stringValue": "d6c34165-7f4a-467c-b671-50ae495bcb14" } },
{ "key": "databricks.app.analytics.event.type", "value": { "stringValue": "action" } },
{ "key": "databricks.app.analytics.event.name", "value": { "stringValue": "report_exported" } },
{ "key": "databricks.app.analytics.properties.format", "value": { "stringValue": "csv" } }
]
}
widok strony
Nagraj wizytę w /reports. Typ zdarzenia i nazwa zdarzenia to oba .page_view
{
"timeUnixNano": "1790164800000000000",
"eventName": "page_view",
"attributes": [
{ "key": "databricks.app.analytics.schema.version", "value": { "intValue": "1" } },
{ "key": "databricks.app.analytics.event.id", "value": { "stringValue": "caafc8e3-5f19-4f22-934b-09d1f8bf8e63" } },
{ "key": "databricks.app.analytics.event.type", "value": { "stringValue": "page_view" } },
{ "key": "databricks.app.analytics.event.name", "value": { "stringValue": "page_view" } },
{ "key": "databricks.app.analytics.page.path", "value": { "stringValue": "/reports" } }
]
}
Web Vital
Zarejestruj pomiar największej ilości treści farby (LCP) wynoszący 1 800 milisekund. Ta wartość ma swoją kategorię good .
{
"timeUnixNano": "1790164800000000000",
"eventName": "lcp",
"attributes": [
{ "key": "databricks.app.analytics.schema.version", "value": { "intValue": "1" } },
{ "key": "databricks.app.analytics.event.id", "value": { "stringValue": "a23eecb7-b6c1-47c8-92ab-e2856f6ac804" } },
{ "key": "databricks.app.analytics.event.type", "value": { "stringValue": "web_vital" } },
{ "key": "databricks.app.analytics.event.name", "value": { "stringValue": "lcp" } },
{ "key": "databricks.app.analytics.page.path", "value": { "stringValue": "/reports" } },
{ "key": "databricks.app.analytics.web_vital.value", "value": { "doubleValue": 1800 } },
{ "key": "databricks.app.analytics.web_vital.unit", "value": { "stringValue": "ms" } },
{ "key": "databricks.app.analytics.web_vital.delta", "value": { "doubleValue": 1800 } },
{
"key": "databricks.app.analytics.web_vital.sample_id",
"value": { "stringValue": "30990ea0-3ec1-4a93-98b9-7c9abfe0e2d8" }
},
{ "key": "databricks.app.analytics.web_vital.rating", "value": { "stringValue": "good" } }
]
}
Raporty dla tego samego pomiaru dzielą .web_vital.sample_id Każdy nowy raport ma swoje własne event.id. Zobacz zasady Web Vital.
Typowe pola
Poniższe pola logiczne mają zastosowanie w różnych typach zdarzeń. Ich nazwy atrybutów OTLP pojawiają się w powyższych przykładach.
| Field | Typ | Requirement | Description |
|---|---|---|---|
schema_version |
INT |
Required | Wersja z dużym kontraktem. Użyj 1. |
event_id |
STRING |
Required | Globalnie unikalny, nieprzejrzysty identyfikator. Zachowaj go podczas ponownej próby zdarzenia. |
event_type |
STRING |
Required |
action, page_viewlub web_vital. |
event_name |
STRING |
Required | Nazwa o niskiej liczbie kardinalności w ramach typu zdarzenia. |
occurred_at |
TIMESTAMP |
Required | Kiedy zdarzenie miało miejsce, a nie w momencie połknięcia. |
session_id |
STRING |
Optional | Nieprzejrzysty identyfikator okna aktywności analitycznej. Nie identyfikuje osoby. |
page_path |
STRING |
Optional | Oczyszczona ścieżka aplikacji z betonu, taka jak /orders/42. |
properties |
Obiekt | Optional | Właściwości skalarne definiowane przez aplikacje. |
session_id jest opcjonalny w schemacie zdarzeń. Metryki oparte na sesjach wykorzystują dokumenty, które je dostarczają. Nie tworz tożsamości ani nie używaj pustego ciągu do reprezentowania nieobecnej sesji.
Wymagane ciągi tekstów muszą być niepuste i nie mogą zawierać białych spacji, danych uwierzytelniających ani danych osobowych. Gdy dostępne jest opcjonalne pole, musi ono przestrzegać swoich zasad. Brak opcjonalnego atrybutu odczytuje się jako null w schemacie logicznym.
Typy zdarzeń
| Typ zdarzenia | Nazwa zdarzenia | Dodatkowe pola |
|---|---|---|
action |
Nazwa zdefiniowana przez aplikację, taka jak report_exported. |
Opcjonalne właściwości opisują akcję. |
page_view |
page_view |
Opcjonalnie page_path identyfikuje odwiedzoną trasę. |
web_vital |
lcp, , inp, cls, fcplub ttfb |
Pola Web Vital zdefiniowane w zasadach Web Vital. |
Uchwycona akcja opisuje to, co producent nagrał. Na przykład kliknięcie może zarejestrować intencję bez udowadniania, że operacja zakończyła się sukcesem.
Kodowanie OTLP i pola tabelowe
Atrybuty analityki wykorzystują databricks.app.analytics. przestrzeń nazw. Poniższa tabela odwzorowuje pola logiczne na OTLP i tablicę telemetrii:
| Pole logiczne | Źródło OTLP |
otel_logs Źródło |
|---|---|---|
occurred_at |
timeUnixNano |
time |
schema_version |
databricks.app.analytics.schema.version |
attributes:["databricks.app.analytics.schema.version"] |
event_id |
databricks.app.analytics.event.id |
attributes:["databricks.app.analytics.event.id"] |
event_type |
databricks.app.analytics.event.type |
attributes:["databricks.app.analytics.event.type"] |
event_name |
databricks.app.analytics.event.name |
attributes:["databricks.app.analytics.event.name"] |
session_id |
databricks.app.analytics.session.id |
attributes:["databricks.app.analytics.session.id"] |
page_path |
databricks.app.analytics.page.path |
attributes:["databricks.app.analytics.page.path"] |
properties.<key> |
databricks.app.analytics.properties.<key> |
Odpowiadający klucz w attributes. |
web_vital_<field> |
databricks.app.analytics.web_vital.<field> |
Odpowiadający klucz w attributes. |
Użyj następujących kodowań JSON OTLP:
- Znaczniki czasu: ciąg dziesiętny nanosekund Unix w
timeUnixNano. - Liczby całkowite: ciąg
intValuedziesiętny, taki jak{ "intValue": "1" }. - Podwójne: Liczba
doubleValue, taka jak{ "doubleValue": 1.25 }. - Smyczki:
stringValue. - Booleanie:
boolValue.
Ustaw rekordy eventName logów na tę samą wartość co atrybut analityczny event_name . Instrumentacja scope.name identyfikuje producenta, ale nie jest selektorem dla rekordów analitycznych.
Tabela telemetryczna może zachować pojedynczy owijacz dla doubleValue wartości numerycznych, w tym zera. Odkoduj ten wrapper przed weryfikacją pól liczbowych. Zweryfikować typ oryginalnej wartości przed jej odrzuceniem zamiast akceptować ciąg wyglądający liczbowo jako liczbę.
Fizyczna kolumna date jest dostępna do przycinania podziałów. Nie jest częścią schematu zdarzeń logicznych.
Ograniczenia pola
Przed eksportem dezynfekuj pola. Walidacja i projekcja w zapytaniu nie usuwają surowych danych już zapisanych w tabeli telemetrycznej.
Nazwy i właściwości akcji
Nazwy akcji zawierają od 1 do 128 znaków. Zaczynają się od małej litery i używają małych liter, cyfr, kropek oraz podkreśleń. Kropki i podkreślenia oddzielają segmenty alfanumeryczne. Gramatyka to ^[a-z][a-z0-9]*([._][a-z0-9]+)*$.
Używaj nazw stabilnych zamiast osadzania identyfikatorów, adresów e-mail czy tekstów wprowadzanych przez użytkownika. Umieść różne szczegóły w nieruchomościach. Na przykład, używaj report_exported z właściwością format zamiast innej nazwy akcji dla każdego formatu.
Klucze własności podążają tą samą gramatyką. Nie używaj zarezerwowanych przestrzeni nazw ani wrażliwych segmentów, w tym analytics, identity, session, telemetry, emailstackpasswordpasswdusersuserurlsecrettokenapi_keycredentialprivate_keyiphtmlusernamedomselectorcookieauthorizationstacktracetextselectorsinputlub .referrer Te ograniczenia dotyczą także nazw akcji.
Właściwości mogą zawierać ciągi skalarne, liczby skończone oraz wartości boole'owe. Tablice, zagnieżdżone obiekty, wartości null, dane uwierzytelniające i dane osobowe nie są dozwolone.
| Limit | Value |
|---|---|
| Właściwości dla każdego zdarzenia | 50 |
| Długość klucza własności | 128 znaków |
| Długość wartości ciągu | 1024 znaki |
Projekcje zapytań pomijają właściwości, które nie spełniają tych ograniczeń. Producenci pozostają odpowiedzialni za znaczenie przesłanych wartości. Same testy składniowe nie są w stanie ustalić, że wartość jest nieosobowa.
Ścieżki stron
A page_path zaczyna się od / i zawiera konkretną ścieżkę aplikacji. Usuń ciągi zapytań i fragmenty oraz oczyścić wrażliwe segmenty ścieżek. Nie wysyłaj danych danych, danych osobowych ani tekstów wpisanych przez użytkownika w ścieżce.
Nieprawidłowa ścieżka jest pomijana w projekcji zapytania. Wyświetlenie strony bez ścieżki pozostaje ważne, ale nie przyczynia się do agregacji na poziomie tras.
Sessions
Sesja analityczna należy do kontekstu przeglądarki na najwyższym poziomie. Gdy producent dostarcza identyfikator sesji, utrzymuj go stabilną w nawigacji po stronie klienta i podczas wczytywania, a następnie odnawiaj po 30 minutach bez rejestracji zdarzenia analitycznego.
Identyfikatory sesji muszą być nieprzejrzyste i nie mogą pochodzić z tożsamości użytkowników, adresów e-mail, adresów IP, identyfikatorów żądań, identyfikatorów zadań ani tokenów dostępu. Zdarzenia backendowe zachowują sesję początkową, gdy jest dostępna. Powtórzone wydarzenia zachowują oryginalny czas sesji i wydarzenia.
Sesja mierzy okno aktywności, a nie unikalną osobę. Metryki przeglądarki w produkcie mogą korzystać z oddzielnych danych dostępu do aplikacji.
Zasady internetowe
Web Vital events dodaje następujące pola. Zakoduj wartość i delta jako atrybuty OTLP doubleValue , a pozostałe pola jako stringValue atrybuty. Pola specyficzne dla Web Vital muszą być nieobecne w akcjach i odsłonach stron.
| Field | Requirement | Description |
|---|---|---|
web_vital_value |
Required | Skończona, nieujemna wartość skumulowana dla próbki. |
web_vital_unit |
Required |
ms lub score, określana przez metrykę. |
web_vital_delta |
Required | Skończona, nieujemna zmiana od poprzedniego raportu. |
web_vital_sample_id |
Required | Globalnie unikalny identyfikator współdzielony przez raporty dla jednej próbki. |
web_vital_rating |
Required |
good, needs_improvement, lub poor, wyprowadzone z progów wartości i metryki. |
web_vital_navigation_type |
Optional |
navigate, reload, , back_forward, back_forward_cache, prerenderlub restore. |
Poniższa tabela definiuje jednostki i progi:
| Metric | Nazwa | Unit | Dobrze | Kiepsko |
|---|---|---|---|---|
lcp |
Największy Contentful Paint (LCP) | ms |
≤ 2 500 | > 4,000 |
inp |
Interakcja z kolejną farbą (INP) | ms |
≤ 200 | > 500 |
cls |
Skumulowane przesunięcie układu (CLS) | score |
≤ 0,1 | > 0.25 |
fcp |
Pierwsze Contentful Paint (FCP) | ms |
≤ 1 800 | > 3,000 |
ttfb |
Czas do pierwszego bajtu (TTFB) | ms |
≤ 800 | > 1,800 |
LCP, INP i CLS to kluczowe parametry sieciowe. FCP i TTFB dostarczają dodatkowych pomiarów wydajności. Wartość znajduje się na lub poniżej good progu dobra, poor powyżej progu biednych i needs_improvement pomiędzy nimi. Niedopasowana jednostka lub ocena sprawia, że rekord jest nieważny.
Próbka może wygenerować wiele raportów. Web Vitals opisuje nawigację po dokumentach. Zmiana trasy po stronie klienta może wygenerować widok strony bez tworzenia nowej próbki Web Vital. Serwer może przesłać pomiar przeglądarkowy, ale czasy serwera nie zastępują tego pomiaru.
Kolejność walidacji
Rejestry procesów w następującej kolejności:
- Wybierz obsługiwane wersje schematu i typy zdarzeń. Dla tego schematu należy wybrać wersję
1iaction,page_view, lubweb_vital. - Dekoduj typowe atrybuty i wymagaj poprawnych
event_id,event_name, orazoccurred_atwartości. - Walidacja pól, nazwy, jednostki, oceny i ograniczenia pól typu zdarzenia. Wyklucz rekordy z nieprawidłowymi polami wymaganymi i projekty zezwalają tylko na dane opcjonalne.
- Wykrywanie konfliktowych identyfikatorów zdarzeń i deduplikowanie identycznych dostaw.
- Wybierz interwał analizy oraz dowolne filtry ścieżek lub zdarzeń.
- W przypadku Web Vitals ogranicz powtarzające się zgłoszenia do jednego raportu na próbkę.
- Agreguj powstałe zdarzenia lub próbki.
Trzymaj walidację oddzielnie od diagnostyki spożycia. Znalezienie wiersza w otel_logs nie oznacza, że jest on zgodny ze schematem zdarzeń.
Deduplikacja i redukcja próbki
Identyczne dostawy wydarzenia liczą się jako jedno wydarzenie. Jeśli an event_id jest używany ponownie do innej logycznej zawartości zdarzeń, wyklucz każdy rekord z tego zestawu konfliktów i zgłoś konflikt jako problem z jakością danych. Nie wybieraj dowolnej dostawy z zestawu.
Porównaj znormalizowaną zawartość logiczną, w tym opcjonalne pola i właściwości. Użyj deterministycznej reprezentacji właściwości, aby kolejność kluczy nie powodowała fałszywych konfliktów. Metadane transportowe nie są częścią treści zdarzeń logicznych. Próby zachowują oryginalną datę czasu zdarzenia.
Sprawdź tożsamość w zachowanych dostawach dla każdego ID zdarzenia kandydata przed zastosowaniem przedziału czasowego analizy. Filtrowanie surowych dostaw może ukryć sprzeczne treści poza tym zakresem.
Po deduplikacji i wyborze przedziału analizy zachowaj najnowszy raport dla .web_vital_sample_id Raporty porządkowe przez occurred_at, przerywając remisy z event_id, oba schodzące. Po tym spadku oblicz percentyle.
Definicje metryk
Przedziały czasowe obejmują start_time i wykluczają end_time. Kubełki czasowe wykorzystują Skoordynowany Uniwersalny Czas (UTC).
| Metric | Definicja |
|---|---|
| Widoki stron | Liczba zdeduplikowanych page_view zdarzeń. |
| Sessions | Liczba odrębnych, niezerowych session_id wartości wśród wybranych zdarzeń analitycznych. |
| Działania śledzone | Liczba zdeduplikowanych action zdarzeń. |
| Liczba stron na sesję | Odsłony stron podzielone według sesji. Brak wartości, gdy liczba sesji wynosi zero. |
| Najważniejsze akcje | Działania grupowane przez event_name. |
| Najlepsze strony | Odsłony stron pogrupowane przez page_path, z wyłączeniem brakujących ścieżek. |
| Web Vital s. 75 | Najbliższy 75. percentyl po deduplikacji zdarzeń i redukcji próbki. |
| Rozmiar próby Web Vital | Liczba odrębnych próbek po redukcji. |
| Najnowsze wydarzenie | Największe spośród occurred_at wybranych wydarzeń analitycznych. |
Dla N uporządkowanych próbek, najbliższy rang p75 wykorzystuje wartość na pozycji ceil(0.75 × N), z indeksowaniem opartym na jedynce. Traktuj mniej niż 30 próbek Web Vital jako wyznaczające, a nie jednoznaczne dowody na trend.
Ten schemat nie definiuje tożsamości użytkownika, urządzenia, przeglądarki ani wymiarów geograficznych. Powierzchnie produktu mogą wyświetlać dodatkowe metryki z innych źródeł. W szczególności unikalni odbiorcy panelu nie są obliczani przez liczenie sesji analitycznych.
Przykład: oblicz Web Vital p75 na podstawie zweryfikowanych zdarzeń
Poniższe zapytanie demonstruje wykluczenie kolizji, deduplikację, redukcję próby oraz dokładne obliczenia percentyla. Zużywa znormalizowany zbiór danych, a nie surową otel_logs tabelę.
Przygotuj dane wejściowe
Stwórz widok wejściowy w swoim własnym potoku przetwarzania, który stosuje kroki 1 do 3 kolejności walidacji. Widok musi zawierać następujące dane:
- Jeden wiersz na każdą dostawę, który przechodzi weryfikację, przed deduplikacją lub filtrowaniem w zakresie czasu.
- Typowe pola logiczne, w tym
event_id,occurred_at,event_type,event_name,web_vital_value, oraz .web_vital_sample_id - Ciąg niebędący
logical_contentzerowym zawierający deterministyczną reprezentację wszystkich znormalizowanych pól zdarzeń i właściwości. Reprezentuj nieobecne pola opcjonalne konsekwentnie i zachowuj oryginalny czas zdarzenia.
Określ zakres danych wejściowych do aplikacji, którą analizujesz. Uwzględnić zachowane dostawy wszystkich obsługiwanych typów zdarzeń, aby wykryć ponowne użycie identyfikatora zdarzenia między typami. Dane wejściowe muszą wymuszać wszystkie wymagane pola, typy liczb i zakresy, jednostki, oceny oraz ograniczenia typu zdarzenia opisane powyżej.
Ważna
Ten widok wejściowy nie jest tworzony przez włączenie telemetrii aplikacji. Jest to wymóg dostarczany przez Twój pipeline przetwarzania. Rzucenie kilku surowych atrybutów nie zastąpi tego etapu weryfikacji.
Zagreguj zweryfikowane dane wejściowe
Zamień <catalog>.<schema>.<validated-events-view> na widok wejściowy. Ustaw :start_time i :end_time jako parametry znaczników czasu w edytorze SQL.
WITH event_id_quality AS (
SELECT event_id, COUNT(DISTINCT logical_content) AS content_count
FROM <catalog>.<schema>.<validated-events-view>
GROUP BY event_id
),
deduplicated AS (
SELECT events.*
FROM <catalog>.<schema>.<validated-events-view> AS events
JOIN event_id_quality AS quality USING (event_id)
WHERE quality.content_count = 1
QUALIFY ROW_NUMBER() OVER (
PARTITION BY event_id ORDER BY occurred_at
) = 1
),
samples AS (
SELECT *
FROM deduplicated
WHERE event_type = 'web_vital'
AND occurred_at >= :start_time
AND occurred_at < :end_time
QUALIFY ROW_NUMBER() OVER (
PARTITION BY web_vital_sample_id ORDER BY occurred_at DESC, event_id DESC
) = 1
)
SELECT
event_name,
COUNT(*) AS sample_size,
PERCENTILE_DISC(0.75) WITHIN GROUP (ORDER BY web_vital_value) AS p75
FROM samples
GROUP BY event_name
ORDER BY event_name;
PERCENTILE_DISC zwraca obserwowaną wartość na żądanym ranku zamiast przybliżenia. Zapytanie wyklucza sprzeczne identyfikatory zdarzeń przed wyborem zakresu czasu. Osobno śledź ID, które przewyższają content_count jeden, jako błędy jakości danych.
Na przykład trzy zredukowane próbki LCP o wartościach 100, 200 i 300 milisekund dają sample_size = 3 i p75 = 300. Identyczne ponowne dostawy nie zwiększają tej liczby próbek. ID zdarzenia z konfliktową normalizacją treści nie dostarcza żadnego zapisu.
Versioning
schema_version identyfikuje główną wersję kontraktową niezależnie od wersji pakietów producenta.
Dodawanie opcjonalnych pól lub nazw akcji definiowanych przez aplikację jest kompatybilne wstecz. Usunięcie wymaganych pól lub zmiana ich typów, znaczeń, zakresu identyfikatorów czy semantyki sesji wymaga poważnej zmiany wersji. Zmiany w deduplikacji, redukcji próbki lub semantyce typu zdarzenia również wymagają nowej wersji głównej.
Konsumenci ignorują nieobsługiwane wersje i typy zdarzeń zamiast interpretować je jako akcje.