Azure İşlevleri ve Event Hubs'ı izleme

Azure Event Hubs
Azure Functions
Azure Monitor

İ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ğilimlere, ç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, Application Insights ile yerleşik tümleştirme sunar. 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, kuyrukta harcanan zamanı 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 alabileceğiniz yararlı özellikler ve içgörüler tanıtılabilir.

Uygulama Eşlemesi

Uygulama Haritası , bir sistemdeki bileşenlerin birbirleriyle nasıl etkileşimde olduğunu gösterir. Application Insights'ın sağladığı bağımlılık telemetrisi nedeniyle, Azure İşlevleri ile Event Hubs arasındaki olay akışını eşler. Her işlev yürütmesinin ortalaması ve Event Hubs'taki 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 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ırayla nasıl etkileşim kuracaklarını gösterir. Bu görünümde ayrıca bir olayın kuyrukta ne kadar süreyle 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 İşlevleri, application insights ile tümleştirilerek İşlevler konağı ve işlev yürütmeleriyle ilgili gelişmiş ve ayrıntılı telemetri ve içgörüler sağlanır. Daha fazla bilgi edinmek için bkz. Application Insights'ta telemetriyi çözümleme Azure İşlevleri. Bir topolojiyi izlemek için Application Insights kullanılırken çeşitli yapılandırmalar kullanılabilir. Daha fazla bilgi 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'de 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 kaydı, 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 bir çıkış bağlaması kullanarak bir olay hub'ına bağlandığında, girişler 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 Tanılama Kimliği ö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 W3C İzleme Bağlamı biçimini izler. Bu biçim, 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ır.

Batch Olayları bağıntısı

Örnek Application Insights sorguları

Aşağıda Event Hubs'ı Azure İşlevleri ile izlerken gerçekleştirilen yararlı Application Insights sorgularının listesi yer almaktadır. Bu sorgu, Event Hubs uzantısı 4.2.0 ve üzeri tarafından yayılan telemetriyi kullanarak olay hub'ı ile tetiklenen işleve ilişkin ayrıntılı bilgileri 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 yayılır. Toplu dağıtım, işlevin her yürütme için birden çok olay kabul ettiği anlamına gelir ve bu durum performans için önerilir. Aşağıdaki noktaları göz önünde bulundurun:

  • Değer, dispatchTimeMilliseconds olayın olay hub'ına yazıldığı zaman ile işlem için işlev uygulaması tarafından alınması arasındaki süreye yaklaşık olarak eşittir.
  • dispatchTimeMilliseconds olay hub'ı sunucusu ile işlev uygulaması arasındaki saat kaymasına bağlı olarak negatif veya yanlış olabilir.
  • Event Hubs bölümleri sırayla işlenir. Önceki tüm iletiler işlenene 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. Diğer ayrıntılar ve notlar 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

Gönderim 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ğılımının nasıl görselleştirilmeye devam olduğunu 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'tan olayları işleyen Azure İşlevleri örneklerinin sayısını ve toplam örnek sayısını (işleme ve kiralama bekleme) nasıl görselleştirildiğini 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. Aşağıdaki sorgu Azure İşlevleri tetiklenen Event Hubs için tetikleyici bilgileri, İşlev kodu içindeki günlüklerden telemetri ve bağımlılıklar ile özel durumlar ortaya çıkar:

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ıralama zamanını 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ş saatini ilk işlev başlangıç saatinin 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 korunur. 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: