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

Doğru günlük ve ölçüm kategorilerinin seçili olduğunu ve hedef olarak ayarlanmış bir Log Analytics çalışma alanını gösteren Olay Hub'ı tanılama ayarları yapılandırma panelinin ekran görüntüsü.

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ı EntityNamebir 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:

Application Insights'ta özel ölçümlerin ve telemetri verilerinin örnek listesini gösteren ekran görüntüsü.

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:

Application Insights'ta görüntülendiğinde varsayılan özel ölçümlerin nasıl göründüğünü gösteren ekran görüntüsü.

Ö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:

Application Insights 'izlemeleri' veri tablosunda özel ileti örneğini gösteren ekran görüntüsü.

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-timegibi x-opt-sequence-numberx-opt-offsetham 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, , Offsetve başına PartitionIdalınan iletiler hakkında ek içgörüleri bulmak ve SequenceNumberyakalamak 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 EventHubTriggereriş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.

Application Insights arabiriminde örnek bir İşlem aramasını gösteren ekran görüntüsü.

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ı datetimesarası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:

Application Insights arabiriminin belirli bir İşlem Kimliği için oluşturulan sorgunun sonuçlarını içeren bölümünü gösteren ekran görüntüsü. Gerçek sorgu bir üst alanda görünür ve eşleşen sonuçlar aşağıda listelenmiştir.

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 TransformingFunctionlog 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:

Önceki C-sharp kod örneği tarafından Application Insights'ta oluşturulan günlükleri gösteren ekran görüntüsü.

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 TransformingFunctionlog 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:

Önceki Java kod örneği tarafından Application Insights'ta oluşturulan günlükleri gösteren ekran görüntüsü.

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:

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