Aracılığıyla paylaş


Azure İşlevleri ve Event Hubs'ı izleme

Azure Event Hubs
Azure İşlevleri
Azure İzleyici

İzleme, sistemlerinizin davranışı ve durumu hakkında içgörüler sağlar ve ortamın bütünsel bir görünümünün oluşturulmasına, geçmiş eğilimlerin oluşturulmasına, çeşitli faktörlerin bağıntılı olmasına ve performans, tüketim veya hata oranındaki değişiklikleri ölçmeye yardımcı olur.

Azure İşlevleri ile yerleşik tümleştirme sunarApplication Insights. Application Insights'tan işlev uygulaması örneklerinin sayısı veya bir işlevin istek ve bağımlılık telemetrisi gibi bilgileri alabilirsiniz. Application Insights, İşlevler ve Event Hubs ile çalışırken olay hub'ına giden bağımlılık telemetrilerini de izleyebilir, işlem süresini hesaplayabilir ve Event Hubs aracılığıyla bağlanan sistemin uçtan uca akışını gösterir.

Bu bölümde, Event Hubs artı İşlevler çözümünüz için Application Insights'tan edinebileceğiniz yararlı özellikler ve içgörüler tanıtılabilir.

Uygulama Eşlemesi

Uygulama Haritası , bir sistemdeki bileşenlerin birbirleriyle nasıl etkileşime geçtiğini gösterir. Application Insights'ın sağladığı bağımlılık telemetrisi nedeniyle, Azure İşlevleri ile Event Hubs arasındaki olayların akışını eşler. Her işlev yürütmesinin ortalaması ve Event Hubs'daki bir olayın ortalama süresi ile kırmızıyla işaretlenmiş hataları içeren işlemleri gösterir.

Beklenen yükü sisteminize gönderdikten sonra Azure portalında Application Insights'a gidebilir ve kenar çubuğunda Uygulama Haritası'nı seçebilirsiniz. Aşağıda, aşağı akış veritabanına yazarken üç işlev, üç olay hub'ı ve görünür hataları gösteren bir harita gösterilmiştir:

Uygulama Eşlemesi

Uçtan uca işlem ayrıntıları

Uçtan uca işlem ayrıntıları, sistem bileşenlerinizin birbiriyle kronolojik sırada nasıl etkileşimde olduğunu gösterir. Bu görünümde ayrıca bir olayın işlemeye ne kadar süre harcandığı da gösterilir. Ayrıca, bu görünümden her bileşenin telemetrisinde detaya gidebilirsiniz; bu da bir sorun oluştuğunda aynı istek içindeki bileşenler arasında sorun gidermeyi kolaylaştırır.

Uçtan Uca İşlem

Platform ölçümleri ve telemetri

Event Hubs ve Azure İşlevleri için Azure İzleyici'de platform tarafından oluşturulan ölçümler, çözüm davranışının ve sistem durumunun genel olarak izlenmesi için kullanılabilir:

  • Azure İzleyici'deki Azure Event Hubs ölçümleri, Event Hubs için yararlı içgörüler yakalamaya yöneliktir (Gelen İstekler, Giden İstekler, Azaltılan İstekler, Başarılı İstekler, Gelen İletiler, Giden İletiler, Yakalanan İletiler, Gelen Baytlar, Giden Baytlar, Yakalanan Baytlar, Kullanıcı Hataları gibi).

  • Azure İşlevleri ölçümler, tüketim planının kullanımını ve maliyetini anlamak için kullanılabilecek İşlev Yürütme Sayısı ve İşlev Yürütme Birimlerinin eklenmesiyle Azure Uygulaması Hizmeti'nden alınan ölçümlerin çoğunu paylaşır. Diğer ilgi çekici ölçümler Bağlantılar, Gelen Veriler, Veri Çıkışı, Ortalama Bellek Çalışma Kümesi, İş Parçacığı Sayısı, İstekler ve Yanıt Süresi'dir.

Azure İşlevleri, İşlevler ana bilgisayarı ve işlev yürütmeleri hakkında gelişmiş ve ayrıntılı telemetri ve içgörüler sağlamak için Application Insights ile tümleştirilir. Daha fazla bilgi edinmek için bkz. Application Insights'ta telemetri Azure İşlevleri çözümleme. Bir topolojiyi izlemek için Application Insights kullanılırken çeşitli yapılandırmalar kullanılabilir. Daha fazla bilgi edinmek için bkz. Azure İşlevleri için izlemeyi yapılandırma.

Aşağıda, izlemeler tablosunda oluşturulan Event Hubs ile tetiklenen işlevler için ek telemetri örneği verilmiştir :

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

Bu bilgiler Event Hubs uzantısı 4.2.0 veya sonraki bir sürümü kullanmanızı gerektirir. Bu veriler, işlev yürütmesini tetikleyen ileti hakkında bilgi içerdiğinden ve sorgulama ve içgörüler için kullanılabildiğinden çok yararlıdır. İşlev her tetiklendiğinde aşağıdaki verileri içerir:

  • Bölüm kimliği (6)
  • Bölüm uzaklığı aralığı (3985758552064-3985758624640)
  • UTC Olarak Sırala Zaman Aralığı (2022-10-31T12:51:58.1750000+00:00-2022-10-31T12:52:03.8160000+00:00)
  • Sıra numarası aralığı 3712266-3712275
  • İleti sayısı (10)

Bu telemetriyi kullanma örnekleri için Örnek Application Insights sorguları bölümüne bakın.

Farklı diller için özel telemetri de mümkündür (C# sınıf kitaplığı, C# Yalıtılmış, C# Betiği, JavaScript, Java, PowerShell ve Python). Bu günlük, Application Insights'taki izlemeler tablosunda gösterilir. Application Insights'a kendi girdilerinizi oluşturabilir ve verileri sorgulamak ve özel panolar oluşturmak için kullanılabilecek özel boyutlar ekleyebilirsiniz.

Son olarak, işlev uygulamanız çıkış bağlaması kullanarak bir olay hub'ına bağlandığında, girdiler Application Insights Bağımlılıkları tablosuna da yazılır.

Bağımlılıklar tablosu

Event Hubs için, bağıntı olay yüküne eklenir ve olaylarda bir Diagnostic-Id özelliği görürsünüz:

Tanılama Kimliği özelliği

Bu, İşlevler tarafından oluşturulan telemetride İşlem Kimliği ve İşlem Bağlantıları olarak da kullanılan ve Application Insights'ın dağıtıldıklarında bile olay hub'ı olayları ve işlev yürütmeleri arasında bağıntı oluşturmasına olanak tanıyan W3C İzleme Bağlamı biçimini izler.

Batch Olayları bağıntısı

Örnek Application Insights sorguları

Event Hubs'ı Azure İşlevleri ile izlerken yararlı Application Insights sorgularının listesi aşağıdadır. Bu sorgu, Event Hubs uzantısı 4.2.0 ve üzeri tarafından yayılan telemetriyi kullanarak olay hub'ı ile tetiklenen işlevin ayrıntılı bilgilerini görüntüler.

Application Insights'ta örnekleme etkinleştirildiğinde verilerde boşluklar olabilir.

Ayrıntılı olay işleme bilgileri

Veriler yalnızca toplu gönderim kullanıldığında doğru biçimde gönderilir. Toplu gönderim, işlevin her yürütme için birden çok olay kabul ettiği anlamına gelir ve bu da performans için önerilir. Aşağıdaki noktaları göz önünde bulundurun:

  • Değeri, dispatchTimeMilliseconds olayın olay hub'ına yazıldığı zaman ile işlem için işlev uygulaması tarafından ne zaman alındığı arasındaki süreyi yaklaşık olarak belirtir.
  • dispatchTimeMilliseconds olay hub'ı sunucusu ile işlev uygulaması arasındaki saat kaymasına bağlı olarak negatif veya başka bir şekilde yanlış olabilir.
  • Event Hubs bölümleri sıralı olarak işlenir. Önceki tüm iletiler işleninceye kadar bir ileti işlenmek üzere işlev koduna gönderilmez. Daha uzun yürütme süreleri dağıtım gecikmelerine neden olacağı için işlevlerinizin yürütme süresini izleyin.
  • Hesaplama, toplu işlemdeki ilk iletinin enqueueTime değerini kullanır. Toplu iş içindeki diğer iletiler için gönderim süreleri daha düşük olabilir.
  • dispatchTimeMilliseconds belirli bir noktaya bağlıdır.
  • Sıra numaraları bölüm başınadır ve Event Hubs tam olarak bir kez ileti teslimini garanti etmediğinden yinelenen işleme gerçekleşebilir.
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

Ayrıntılı Olay İşleme

Dağıtım gecikmesi görselleştirmesi

Bu sorgu, belirli bir olay hub'ı tarafından tetiklenen işlev için 50. ve 90. yüzdebirlik olay dağıtım gecikmesini görselleştirir. Daha fazla ayrıntı ve not için yukarıdaki sorguya bakın.

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

Dağıtım gecikmesi Görselleştirmesi

Dağıtım gecikme süresi özeti

Bu sorgu yukarıdakine benzer ancak bir özet görünümü gösterir.

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

Dağıtım gecikme süresi Özeti

Bölümler arasında ileti dağıtımı

Bu sorgu, bölümler arasında ileti dağıtımlarını görselleştirmeyi gösterir.

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

Bölümler arasında ileti dağıtımı

Örnekler arasında ileti dağıtımı

Bu sorgu, örnekler arasında ileti dağıtımlarını görselleştirmeyi gösterir.

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

Örnekler arasında ileti dağıtımı

Örnekleri ve Ayrılmış Örnekleri Yürütme

Bu sorgu, Event Hubs'dan olayları işleyen Azure İşlevleri örneklerinin sayısını ve toplam örnek sayısını (işleme ve kiralama bekleme) görselleştirmeyi gösterir. Çoğu zaman aynı olmaları gerekir.

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

Örnekleri ve Ayrılmış Örnekleri Yürütme

Belirli bir İşlev Yürütmesi için Tüm Telemetri

operation_Id alanı Application Insights'taki farklı tablolarda kullanılabilir. Event Hubs tarafından tetiklenen Azure İşlevleri aşağıdaki sorgu tetikleyici bilgilerine, İşlev kodu içindeki günlüklerden telemetriye ve bağımlılıklarla özel durumlara neden olur:

union isfuzzy=true requests, exceptions, traces, dependencies
| where * has "<ENTER THE OPERATION_ID OF YOUR FUNCTION EXECUTION HERE>"
| order by timestamp asc

Belirli bir İşlev Yürütmesi için Tüm Telemetri

Bir Olay için Uçtan Uca Gecikme Süresi

Tetikleyici ayrıntısı izlemesindeki enqueueTimeUtc özelliği, işlevin işlediği her toplu işlemin yalnızca ilk olayının sıra süresini gösterdiğinden, iki işlev arasındaki olayların uçtan uca gecikme süresini hesaplamak için daha gelişmiş bir sorgu kullanılabilir. Bu sorgu, ikinci işlevin isteğindeki işlem bağlantılarını (varsa) genişletir ve bitiş zamanını ilk işlev başlangıç zamanının aynı işlem kimliğiyle eşler.

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))

Bir Olay için Uçtan Uca Gecikme Süresi

Katkıda Bulunanlar

Bu makale Microsoft tarafından yönetilir. Başlangıçta aşağıdaki katkıda bulunanlar tarafından yazılmıştır.

Asıl yazar:

Genel olmayan LinkedIn profillerini görmek için LinkedIn'de oturum açın.

Sonraki adımlar

Daha fazla bilgi edinmek için şu ilgili makaleleri gözden geçirmeyi göz önünde bulundurun: