Sunucusuz olay işlemeyi izleme
Bu makalede sunucusuz olay odaklı mimarileri izleme hakkında yönergeler sağlanmaktadır.
İzleme, sistemlerinizin davranışı ve durumu hakkında içgörü sağlar. Ortamın bütünsel bir görünümünü oluşturmanıza, geçmiş eğilimleri almanıza, çeşitli faktörleri ilişkilendirmenize ve performans, tüketim veya hata oranındaki değişiklikleri ölçmenize yardımcı olur. Hizmetinizin kalitesini etkileyebilecek koşullar oluştuğunda veya belirli bir ortamınızla ilgili koşullar ortaya çıktığında uyarıları tanımlamak için izlemeyi kullanabilirsiniz.
Bu makalede, Event Hubs ve Azure İşlevleri kullanılarak oluşturulmuş sunucusuz bir uygulamayı izlemek için Azure İzleyici'yi kullanma gösterilmektedir. İzlemek için yararlı ölçümleri ele alır, Application Insights ile tümleştirmeyi ve özel ölçümleri yakalamayı açıklar ve kod örnekleri sağlar.
Varsayımlar
Bu makalede Sunucusuz olay işleme başvuru mimarisinde açıklanan mimariye benzer bir mimariniz olduğu varsayılır. Temelde:
- Olaylar Azure Event Hubs ulaşır.
- Olayı işlemek için bir İşlev Uygulaması tetikleniyor.
- Azure İzleyici, mimarinizle birlikte kullanılabilir.
Azure İzleyici'den ölçümler
Öncelikle mimari hakkında yararlı içgörüler formüle etmeye başlamadan önce hangi ölçümlerin gerekli olacağını belirlememiz gerekir. Her kaynak farklı görevler gerçekleştirir ve buna karşılık farklı ölçümler oluşturur.
Event Hub'daki bu ölçümler yararlı içgörüler yakalamak için ilgi çekici olacaktır:
- Gelen istekler
- Giden istekler
- Kısıtlanmış istekler
- Başarılı istekler
- Gelen iletiler
- Giden iletiler
- Yakalanan iletiler
- Gelen bayt sayısı
- Giden baytlar
- Yakalanan bayt sayısı
- Kullanıcı hataları
Benzer şekilde, Azure İşlevleri bu ölçümler yararlı içgörüler yakalamak için ilgi çekici olacaktır:
- İşlev yürütme sayısı
- Bağlantılar
- Içindeki veriler
- Veri çıkışı
- HTTP sunucusu hataları
- İstekler
- Uygulama kuyruğundaki istekler
- Yanıt süresi
İçgörüleri yakalamak için tanılama günlüğünü kullanma
Birlikte analiz edildiğinde, aşağıdaki içgörüleri formüle etmek ve yakalamak için yukarıdaki ölçümler kullanılabilir:
- Event Hubs tarafından işlenen isteklerin oranı
- Azure İşlevleri tarafından işlenen isteklerin oranı
- Toplam Olay Hub'ı aktarım hızı
- Kullanıcı hataları
- Azure İşlevleri süresi
- Uçtan uca gecikme süresi
- Her aşamada gecikme süresi
- Kaybolan ileti sayısı
- Birden çok kez işlenen ileti sayısı
Event Hubs'ın gerekli ölçümleri yakalamasını sağlamak için önce tanılama günlüklerini etkinleştirmemiz gerekir (varsayılan olarak devre dışıdır). Daha sonra hangi günlüklerin istendiği seçmeli ve bunlar için doğru Log Analytics çalışma alanını hedef olarak yapılandırmalıyız.
İlgilendiğimiz günlük ve ölçüm kategorileri şunlardır:
- OperationalLogs
- Otomatik Ölçeklendirme Günlükleri
- KafkaCoordinatorLogs (Apache Kafka iş yükleri için)
- KafkaUserErrorLogs (Apache Kafka iş yükleri için)
- EventHubVNetConnectionEvent
- Tüm Ölçümler
Azure belgeleri, Bir Azure olay hub'ı için tanılama günlüklerini ayarlama hakkında yönergeler sağlar. Aşağıdaki ekran görüntüsünde doğru günlük ve ölçüm kategorilerinin seçili olduğu örnek bir Tanılama ayarı yapılandırma paneli ve hedef olarak ayarlanmış bir Log Analytics çalışma alanı gösterilmektedir. (Günlükleri analiz etmek için bir dış sistem kullanılıyorsa, bunun yerine bir olay hub'ına akışla aktarma seçeneği kullanılabilir.)
Not
İçgörüleri yakalamak için günlük tanılamalarını kullanmak için farklı ad alanlarında olay hub'ları oluşturmanız gerekir. Bunun nedeni Azure'daki bir kısıtlamadır.
Belirli bir Event Hubs ad alanında ayarlanan Event Hubs, Azure İzleyici ölçümlerinde adlı EntityName
bir boyut altında temsil edilir. Azure portal, belirli bir olay hub'ının verileri normalde bu Azure İzleyici örneğinde görüntülenebilir. Ancak ölçüm verileri günlük tanılamasına yönlendirildiğinde, şu anda boyuta göre filtreleme yaparak olay hub'ı başına verileri görüntülemenin EntityName
bir yolu yoktur.
Geçici bir çözüm olarak, farklı ad alanlarında olay hub'ları oluşturmak belirli bir hub'ın ölçümlerini bulmayı mümkün hale getirir.
Application Insights'i kullanma
Azure İşlevleri ölçümleri ve özel telemetri verilerini yakalamak için Application Insights'ı etkinleştirebilirsiniz. Bu sayede kendi amaçlarınıza uygun analizler tanımlayabilir ve sunucusuz olay işleme senaryosu için önemli içgörüler elde etmenin başka bir yolunu elde edebilirsiniz.
Bu ekran görüntüsünde Application Insights'ta özel ölçümlerin ve telemetri verilerinin örnek bir listesi gösterilmektedir:
Varsayılan özel ölçümler
Application Insights'ta, Azure İşlevleri için özel ölçümler tabloda depolanırcustomMetrics
. Farklı işlev örnekleri için zaman çizelgesine yayılmış aşağıdaki değerleri içerir:
AvgDurationMs
MaxDurationMs
MinDurationMs
Successes
Failures
SuccessRate
Count
Bu ölçümler, bir çalıştırmada çağrılan birden çok işlev örneğinde toplanan ortalamaları verimli bir şekilde hesaplamak için kullanılabilir.
Bu ekran görüntüsü, Bu varsayılan özel ölçümlerin Application Insights'ta görüntülendiğinde nasıl göründüğünü gösterir:
Özel iletiler
Azure İşlev kodunda (kullanılarak ILogger
) günlüğe kaydedilen özel iletiler Application Insights traces
tablosundan alınır.
Tablo traces
aşağıdaki önemli özelliklere sahiptir (diğerlerinin arasında):
timestamp
cloud_RoleInstance
operation_Id
operation_Name
message
Application Insights arabiriminde özel iletinin nasıl görünebileceğini gösteren bir örnek aşağıda verilmiştir:
Gelen Olay Hub'ı iletisi veya EventData[]
bu özel ILogger
iletinin bir parçası olarak günlüğe kaydedildiyse, bu da Application Insights'ta kullanılabilir hale getirilir. Bu çok yararlı olabilir.
Sunucusuz olay işleme senaryomuz için olay hub'ından alınan JSON serileştirilmiş ileti gövdesini günlüğe kaydederiz. Bu, , ve x-opt-enqueued-time
gibi x-opt-sequence-number
x-opt-offset
ham SystemProperties
bayt dizisini yakalamamıza olanak tanır. Her iletinin Olay Hub'ı x-opt-enqueued-time
tarafından ne zaman alındığını belirlemek için özelliği kullanılır.
Örnek sorgu:
traces
| where timestamp between(min_t .. max_t)
| where message contains "Body"
| extend m = parse_json(message))
| project timestamp = todatetime(m.SystemProperties.["x-opt-enqueued-time"])
Örnek sorgu, application insights'ta varsayılan olarak günlüğe kaydedilen aşağıdaki örnek sonucta benzer bir ileti döndürür. özellikleriTrigger Details
, , Offset
ve başına PartitionId
alınan iletiler hakkında ek içgörüleri bulmak ve SequenceNumber
yakalamak için kullanılabilir.
Örnek sorgunun örnek sonucu:
"message": Trigger Details: PartitionId: 26, Offset: 17194119200, EnqueueTimeUtc: 2020-11-03T02:14:01.7740000Z, SequenceNumber: 843572, Count: 10,
Uyarı
Azure Java İşlevleri kitaplığında şu anda ve PartitionContext
kullanırken EventHubTrigger
erişimi PartitionID
engelleyen bir sorun var. Bu GitHub sorun raporunda daha fazla bilgi edinin.
Application Insights ile işlem kimliği kullanarak ileti akışını izleme
Application Insights'ta, işlemin değeri üzerinde İşlem arama sorgusu yaparak belirli bir işlemle ilgili tüm telemetri verilerini Operation Id
görüntüleyebiliriz. Bu, özellikle işlem olay akışı işlem hattında ilerlerken iletilerin ortalama sürelerinin yüzde birlik değerlerini yakalamak için yararlı olabilir.
Aşağıdaki ekran görüntüsünde Application Insights arabiriminde örnek bir İşlem araması gösterilmektedir. İstenen Operation ID
sorgu alanına girilir ve büyüteç simgesiyle tanımlanır (ve burada kırmızı bir kutuyla gösterilir). Ana bölmenin en altında, Results
sekme eşleşen olayları sıralı olarak gösterir. Her olay girişinde Operation ID
, kolay doğrulama için değer koyu mavi renkle vurgulanır.
Belirli bir işlem kimliği için oluşturulan sorgu aşağıdaki gibi görünür. GUID değerinin Operation ID
üçüncü satırın where * has
yan tümcesinde belirtildiğini unutmayın. Bu örnek, iki farklı datetimes
arasındaki sorguyu daha da daraltıyor.
union isfuzzy=true availabilityResults, requests, exceptions, pageViews, traces, customEvents, dependencies
| where timestamp > datetime("2020-10-09T06:58:40.024Z") and timestamp < datetime("2020-11-11T06:58:40.024Z")
| where * has "1c8c9d7073a00e4bbdcc8f2e6570e46"
| order by timestamp desc
| take 100
Application Insights arabiriminde sorgunun ve eşleşen sonuçlarının nasıl görünebileceğinin ekran görüntüsü aşağıdadır:
Azure İşlevleri özel ölçümleri yakalama
.NET işlevleri
Yapılandırılmış günlük, Application Insights izlemeleri tablosunda özel boyutları yakalamak için .NET Azure işlevlerinde kullanılır. Bu özel boyutlar daha sonra verileri sorgulamak için kullanılabilir.
Örnek olarak, .NET'teki TransformingFunction
log deyimi aşağıda verilmiştir:
log.LogInformation("TransformingFunction: Processed sensorDataJson={sensorDataJson}, " +
"partitionId={partitionId}, offset={offset} at {enqueuedTimeUtc}, " +
"inputEH_enqueuedTime={inputEH_enqueuedTime}, processedTime={processedTime}, " +
"transformingLatencyInMs={transformingLatencyInMs}, processingLatencyInMs={processingLatencyInMs}",
sensorDataJson,
partitionId,
offset,
enqueuedTimeUtc,
inputEH_enqueuedTime,
processedTime,
transformingLatency,
processingLatency);
Application Insights'ta oluşturulan sonuç günlükleri, bu ekran görüntüsünde gösterildiği gibi yukarıdaki parametreleri özel boyutlar olarak içerir:
Bu günlükler aşağıdaki gibi sorgulanabilir:
traces
| where timestamp between(min_t .. max_t)
// Function name should be of the function consuming from the Event Hub of interest
| where operation_Name == "{Function_Name}"
| where message has "{Function_Name}: Processed"
| project timestamp = todatetime(customDimensions.prop__enqueuedTimeUtc)
Not
Bu testlerdeki performansı etkilemediğimizden emin olmak için, aşağıda gösterildiği gibi dosyayı kullanarak host.json
Application Insights için Azure İşlev günlüklerinin örnekleme ayarlarını açtık. Bu, günlüğe kaydetmeden yakalanan tüm istatistiklerin gerçek sayı değil ortalama değerler olarak kabul edildiği anlamına gelir.
host.json örneği:
"logging": {
"applicationInsights": {
"samplingExcludedTypes": "Request",
"samplingSettings": {
"isEnabled": true
}
}
}
Java işlevleri
Şu anda Yapılandırılmış günlük, Application Insights izlemeler tablosunda özel boyutları yakalamak için Java Azure işlevlerinde desteklenmemektedir.
Örneğin, Java'daki TransformingFunction
log deyimi aşağıda verilmiştir:
LoggingUtilities.logSuccessInfo(
context.getLogger(),
"TransformingFunction",
"SuccessInfo",
offset,
processedTimeString,
dateformatter.format(enqueuedTime),
transformingLatency
);
Application Insights'ta oluşturulan sonuç günlükleri, aşağıda gösterildiği gibi iletide yukarıdaki parametreleri içerir:
Bu günlükler aşağıdaki gibi sorgulanabilir:
traces
| where timestamp between(min_t .. max_t)
// Function name should be of the function consuming from the Event Hub of interest
| where operation_Name in ("{Function name}") and message contains "SuccessInfo"
| project timestamp = todatetime(tostring(parse_json(message).enqueuedTime))
Not
Bu testlerdeki performansı etkilemediğimizden emin olmak için, aşağıda gösterildiği gibi dosyayı kullanarak host.json
Application Insights için Azure İşlev günlüklerinin örnekleme ayarlarını açtık. Bu, günlüğe kaydetmeden yakalanan tüm istatistiklerin gerçek sayı değil ortalama değerler olarak kabul edildiği anlamına gelir.
host.json örneği:
"logging": {
"applicationInsights": {
"samplingExcludedTypes": "Request",
"samplingSettings": {
"isEnabled": true
}
}
}
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:
- Rajasa Savant | Kıdemli Yazılım Mühendisi
Genel olmayan LinkedIn profillerini görmek için LinkedIn'de oturum açın.
İlgili kaynaklar
- Sunucusuz olay işleme , kod örnekleri ve önemli konuların tartışılmasıyla birlikte bu tür tipik bir mimariyi ayrıntılı olarak ayrıntılarıyla belirten bir başvuru mimarisidir.
- Event Hubs ile sunucusuz olay işlemede toplu işlemleri kaldırma ve filtreleme , başvuru mimarisinin bu bölümlerinin nasıl çalıştığını daha ayrıntılı olarak açıklar.
- Olay akışı işlemedeki özel bağlantı senaryosu , güvenliği artırmak için özel uç noktaları olan bir sanal ağda (VNet) benzer bir mimari uygulamaya yönelik bir çözüm fikridir.
- Olay akışı işlemede Azure Kubernetes , KEDA ölçeklendiricisi ile Azure Kubernetes üzerinde çalışan sunucusuz olay odaklı mimarinin bir varyasyonunu açıklar.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin