Monitorowanie zapewnia wgląd w zachowanie i kondycję systemów oraz pomaga w tworzeniu całościowego widoku środowiska, historycznych trendów, korelowania różnych czynników oraz mierzenia zmian wydajności, zużycia lub współczynnika błędów.
Usługa Azure Functions oferuje wbudowaną integrację z usługą Application Insights. Z usługi Application Insights można uzyskać informacje, takie jak liczba wystąpień aplikacji funkcji lub telemetria żądań i zależności funkcji. Podczas pracy z usługami Functions i Event Hubs usługa Application Insights może również śledzić wychodzące telemetrie zależności do centrum zdarzeń, obliczać czas przetwarzania i wyświetlać pełny przepływ systemu połączonego za pośrednictwem usługi Event Hubs.
W tej sekcji przedstawiono przydatne funkcje i szczegółowe informacje, które można uzyskać z usługi Application Insights dla rozwiązania usługi Event Hubs i usługi Functions.
Mapa aplikacji
Mapa aplikacji pokazuje, jak składniki w systemie współdziałają ze sobą. Ze względu na dane telemetryczne zależności zapewniane przez usługę Application Insights mapuje przepływ zdarzeń między usługami Azure Functions i Event Hubs, w tym średnią średnią liczbę wykonań poszczególnych funkcji i średni czas trwania zdarzenia w usłudze Event Hubs, a także pokazuje transakcje zawierające błędy oznaczone kolorem czerwonym.
Po wysłaniu oczekiwanego obciążenia do systemu możesz przejść do usługi Application Insights w witrynie Azure Portal, a na pasku bocznym wybierz pozycję Mapa aplikacji. Oto mapa przedstawiająca trzy funkcje, trzy centra zdarzeń i widoczne błędy podczas zapisywania w podrzędnej bazie danych:
Szczegóły transakcji kompleksowej
Kompleksowe szczegóły transakcji pokazują, jak składniki systemowe współdziałają ze sobą w kolejności chronologicznej. Ten widok pokazuje również, jak długo zdarzenie zostało wydane w przetwarzaniu. Możesz również przejść do szczegółów telemetrii każdego składnika z tego widoku, co ułatwia rozwiązywanie problemów między składnikami w ramach tego samego żądania, gdy wystąpił problem.
Metryki platformy i telemetria
Metryki generowane przez platformę w usłudze Azure Monitor dla usług Event Hubs i Azure Functions mogą służyć do ogólnego monitorowania zachowania i kondycji rozwiązania:
Metryki usługi Azure Event Hubs w usłudze Azure Monitor są interesujące w celu przechwytywania przydatnych szczegółowych informacji dotyczących usługi Event Hubs (takich jak agregacje żądań przychodzących, żądania wychodzące, żądania ograniczone, żądania zakończone powodzeniem, komunikaty przychodzące, komunikaty wychodzące, bajty przychodzące, bajty wychodzące, przechwycone bajty, błędy użytkownika).
Metryki usługi Azure Functions współużytkują wiele metryk z usługi aplikacja systemu Azure Service, a także dodanie liczby wykonań funkcji i jednostek wykonywania funkcji, które mogą służyć do zrozumienia wykorzystania i kosztu planu zużycie. Inne interesujące metryki to Połączenia, Dane w, Dane wychodzące, Średni zestaw roboczy pamięci, Liczba wątków, Żądania i Czas odpowiedzi.
Usługa Azure Functions integruje się z usługą Application Insights, aby zapewnić zaawansowane i szczegółowe dane telemetryczne oraz szczegółowe informacje o hostach i wykonaniach funkcji usługi Functions. Aby dowiedzieć się więcej, zobacz Analizowanie danych telemetrycznych usługi Azure Functions w usłudze Application Insights. W przypadku korzystania z usługi Application Insights do monitorowania topologii dostępnych jest wiele konfiguracji. Aby dowiedzieć się więcej, zobacz Jak skonfigurować monitorowanie dla usługi Azure Functions.
Poniżej przedstawiono przykład dodatkowych danych telemetrycznych dla funkcji wyzwalanych przez usługę Event Hubs wygenerowanych w tabeli śladów :
Trigger Details: PartionId: 6, Offset: 3985758552064-3985758624640, EnqueueTimeUtc: 2022-10-31T12:51:58.1750000+00:00-2022-10-31T12:52:03.8160000+00:00, SequenceNumber: 3712266-3712275, Count: 10
Te informacje wymagają użycia rozszerzenia usługi Event Hubs w wersji 4.2.0 lub nowszej. Te dane są bardzo przydatne, ponieważ zawierają informacje o komunikacie, który wyzwolił wykonywanie funkcji i może służyć do wykonywania zapytań i szczegółowych informacji. Zawiera następujące dane za każdym razem, gdy funkcja jest wyzwalana:
- Identyfikator partycji (6)
- Zakres przesunięcia partycji (3985758552064-3985758624640)
- Zakres czasu kolejki w formacie UTC (2022-10-31T12:51:58.1750000+00:00-2022-10-31T12:52:03.8160000+00:00)
- Zakres numerów sekwencji 3712266-3712275
- Liczba komunikatów (10)
Zapoznaj się z sekcją Przykładowe zapytania usługi Application Insights, aby zapoznać się z przykładami dotyczącymi korzystania z tej telemetrii.
Niestandardowe dane telemetryczne są również możliwe w różnych językach (biblioteka klas języka C#, Izolowane języki C#, skrypt C#, JavaScript, Java, PowerShell i Python). To rejestrowanie jest wyświetlane w tabeli śladów w usłudze Application Insights. Możesz utworzyć własne wpisy w usłudze Application Insights i dodać niestandardowe wymiary, które mogą służyć do wykonywania zapytań dotyczących danych i tworzenia niestandardowych pulpitów nawigacyjnych.
Na koniec, gdy aplikacja funkcji łączy się z centrum zdarzeń przy użyciu powiązania wyjściowego, wpisy są również zapisywane w tabeli Zależności usługi Application Insights.
W przypadku usługi Event Hubs korelacja jest wstrzykiwana do ładunku zdarzenia i jest widoczna właściwość Diagnostic-Id w zdarzeniach:
Jest to zgodne z formatem kontekstu śledzenia W3C, który jest również używany jako łącza identyfikatora operacji i operacji w telemetrii utworzonej przez funkcje, co umożliwia usłudze Application Insights konstruowanie korelacji między zdarzeniami centrum zdarzeń i wykonywaniami funkcji, nawet w przypadku ich dystrybucji.
Przykładowe zapytania usługi Application Insights
Poniżej znajduje się lista przydatnych zapytań usługi Application Insights podczas monitorowania usługi Event Hubs za pomocą usługi Azure Functions. To zapytanie wyświetla szczegółowe informacje dotyczące funkcji wyzwalanej przez centrum zdarzeń przy użyciu danych telemetrycznych emitowanych przez rozszerzenie usługi Event Hubs w wersji 4.2.0 lub nowszej.
Po włączeniu próbkowania w usłudze Application Insights mogą występować luki w danych.
Szczegółowe informacje o przetwarzaniu zdarzeń
Dane są emitowane tylko w poprawnym formacie, gdy jest używana wsadowa wysyłka. Wysyłanie wsadowe oznacza, że funkcja akceptuje wiele zdarzeń dla każdego wykonania, co jest zalecane w celu zapewnienia wydajności. Należy pamiętać o następujących kwestiach:
- Wartość
dispatchTimeMilliseconds
przybliżona długość czasu między zapisem zdarzenia w centrum zdarzeń a momentem odebrania go przez aplikację funkcji do przetwarzania. -
dispatchTimeMilliseconds
może być ujemna lub w inny sposób niedokładna ze względu na dryf zegara między serwerem centrum zdarzeń a aplikacją funkcji. - Partycje usługi Event Hubs są przetwarzane sekwencyjnie. Komunikat nie zostanie wysłany do kodu funkcji do przetworzenia do momentu przetworzenia wszystkich poprzednich komunikatów. Monitoruj czas wykonywania funkcji, ponieważ dłuższe czasy wykonywania spowodują opóźnienia wysyłania.
- Obliczenie używa funkcji enqueueTime pierwszego komunikatu w partii. Czas wysyłania może być niższy dla innych komunikatów w partii.
-
dispatchTimeMilliseconds
jest oparta na punkcie w czasie. - Numery sekwencji są na partycje, a przetwarzanie zduplikowane może wystąpić, ponieważ usługa Event Hubs nie gwarantuje dokładnie jednokrotnej dostarczania komunikatów.
traces
| where message startswith "Trigger Details: Parti"
| parse message with * "tionId: " partitionId:string ", Offset: "
offsetStart:string "-" offsetEnd:string", EnqueueTimeUtc: "
enqueueTimeStart:datetime "+00:00-" enqueueTimeEnd:datetime "+00:00, SequenceNumber: "
sequenceNumberStart:string "-" sequenceNumberEnd:string ", Count: "
messageCount:int
| extend dispatchTimeMilliseconds = (timestamp - enqueueTimeStart) / 1ms
| project timestamp, cloud_RoleInstance, operation_Name, processId =
customDimensions.ProcessId, partitionId, messageCount, sequenceNumberStart,
sequenceNumberEnd, enqueueTimeStart, enqueueTimeEnd, dispatchTimeMilliseconds
Wizualizacja opóźnienia wysyłania
To zapytanie wizualizuje opóźnienie wysyłania zdarzeń 50 i 90. percentyla dla danej funkcji wyzwalanej przez centrum zdarzeń. Zobacz powyższe zapytanie, aby uzyskać więcej szczegółów i notatek.
traces
| where operation_Name == "<ENTER THE NAME OF YOUR FUNCTION HERE>"
| where message startswith "Trigger Details: Parti"
| parse message with * "tionId: " partitionId:string ", Offset: "
offsetStart:string "-" offsetEnd:string", EnqueueTimeUtc: "
enqueueTimeStart:datetime "+00:00-" enqueueTimeEnd:datetime "+00:00, SequenceNumber: "
sequenceNumberStart:string "-" sequenceNumberEnd:string ", Count: "
messageCount:int
| extend dispatchTimeMilliseconds = (timestamp - enqueueTimeStart) / 1ms
| summarize percentiles(dispatchTimeMilliseconds, 50, 90) by bin(timestamp, 5m)
| render timechart
Podsumowanie opóźnienia wysyłania
To zapytanie jest podobne do powyższego, ale wyświetla widok podsumowania.
traces
| where message startswith "Trigger Details: Parti"
| parse message with * "tionId: " partitionId:string ", Offset: "
offsetStart:string "-" offsetEnd:string", EnqueueTimeUtc: "
enqueueTimeStart:datetime "+00:00-" enqueueTimeEnd:datetime "+00:00, SequenceNumber: "
sequenceNumberStart:string "-" sequenceNumberEnd:string ", Count: "
messageCount:int
| extend dispatchTimeMilliseconds = (timestamp - enqueueTimeStart) / 1ms
| summarize messageCount = sum(messageCount),
percentiles(dispatchTimeMilliseconds, 50, 90, 99, 99.9, 99.99) by operation_Name
Dystrybucja komunikatów między partycjami
To zapytanie pokazuje, jak wizualizować rozkład komunikatów między partycjami.
traces
| where message startswith "Trigger Details: Parti"
| parse message with * "tionId: " partitionId:string ", Offset: "
offsetStart:string "-" offsetEnd:string", EnqueueTimeUtc: "
enqueueTimeStart:datetime "+00:00-" enqueueTimeEnd:datetime "+00:00, SequenceNumber: "
sequenceNumberStart:string "-" sequenceNumberEnd:string ", Count: "
messageCount:int
| summarize messageCount = sum(messageCount) by cloud_RoleInstance,
bin(timestamp, 5m)
| render areachart kind=stacked
Dystrybucja komunikatów między wystąpieniami
To zapytanie pokazuje, jak wizualizować dystrybucję komunikatów między wystąpieniami.
traces
| where message startswith "Trigger Details: Parti"
| parse message with * "tionId: " partitionId:string ", Offset: "
offsetStart:string "-" offsetEnd:string", EnqueueTimeUtc: "
enqueueTimeStart:datetime "+00:00-" enqueueTimeEnd:datetime "+00:00, SequenceNumber: "
sequenceNumberStart:string "-" sequenceNumberEnd:string ", Count: "
messageCount:int
| summarize messageCount = sum(messageCount) by cloud_RoleInstance,
bin(timestamp, 5m)
| render areachart kind=stacked
Wykonywanie wystąpień i przydzielonych wystąpień
To zapytanie pokazuje, jak wizualizować liczbę wystąpień usługi Azure Functions, które przetwarzają zdarzenia z usługi Event Hubs, oraz łączną liczbę wystąpień (przetwarzanie i oczekiwanie na dzierżawę). Przez większość czasu powinny one być takie same.
traces
| where message startswith "Trigger Details: Parti"
| summarize type = "Executing Instances", Count = dcount(cloud_RoleInstance) by
bin(timestamp, 60s)
| union (
traces
| summarize type = "Allocated Instances", Count = dcount(cloud_RoleInstance) by
bin(timestamp, 60s)
)
| project timestamp, type, Count
| render timechart
Wszystkie dane telemetryczne dla określonego wykonania funkcji
Pole operation_Id może być używane w różnych tabelach w usłudze Application Insights. W przypadku usługi Event Hubs wyzwalanej przez usługę Azure Functions następujące zapytanie spowoduje na przykład wyświetlenie informacji o wyzwalaczu, telemetrii z dzienników wewnątrz kodu funkcji oraz zależności i wyjątków:
union isfuzzy=true requests, exceptions, traces, dependencies
| where * has "<ENTER THE OPERATION_ID OF YOUR FUNCTION EXECUTION HERE>"
| order by timestamp asc
Kompleksowe opóźnienie zdarzenia
Ponieważ właściwość enqueueTimeUtc w śladzie szczegółów wyzwalacza pokazuje czas kolejkowania tylko pierwszego zdarzenia każdej partii przetworzonej przez funkcję, można użyć bardziej zaawansowanego zapytania do obliczenia całkowitego opóźnienia zdarzeń między dwiema funkcjami z usługą Event Hubs między. To zapytanie rozszerzy łącza operacji (jeśli istnieje) w żądaniu drugiej funkcji i zamapuje czas zakończenia na ten sam identyfikator operacji pierwszego czasu rozpoczęcia funkcji.
let start = view(){
requests
| where operation_Name == "FirstFunction"
| project start_t = timestamp, first_operation_Id = operation_Id
};
let link = view(){
requests
| where operation_Name == "SecondFunction"
| mv-expand ex = parse_json(tostring(customDimensions["_MS.links"]))
| extend parent = case(isnotempty(ex.operation_Id), ex.operation_Id, operation_Id )
| project first_operation_Id = parent, second_operation_Id = operation_Id
};
let finish = view(){
traces
| where customDimensions["EventName"] == "FunctionCompleted" and operation_Name
== "SecondFunction"
| project end_t = timestamp, second_operation_Id = operation_Id
};
start
| join kind=inner (
link
| join kind=inner finish on second_operation_Id
) on first_operation_Id
| project start_t, end_t, first_operation_Id, second_operation_Id
| summarize avg(datetime_diff('second', end_t, start_t))
Współautorzy
Ten artykuł jest obsługiwany przez firmę Microsoft. Pierwotnie został napisany przez następujących współautorów.
Główny autor:
- David Barkol | Główny specjalista ds. rozwiązań GBB
Aby wyświetlić niepubalne profile serwisu LinkedIn, zaloguj się do serwisu LinkedIn.
Następne kroki
Aby dowiedzieć się więcej, rozważ przejrzenie następujących powiązanych artykułów:
- Analizowanie danych telemetrycznych usługi Azure Functions w usłudze Application Insights
- Konfigurowanie monitorowania dla usługi Azure Functions
- Analizowanie danych telemetrycznych usługi Azure Functions w usłudze Application Insights
- Metryki w usłudze Azure Monitor — Azure Event Hubs
- język zapytań Kusto