Hata verilerini toplama ve yorumlama

Hata ve olay verileri her gün Azure Sphere Güvenlik Hizmeti'ne yüklenir. Belirli bir kataloğa erişimi olan herkes bu kataloğun verilerini indirebilir. Rapor, katalogdaki tüm cihazları kapsar.

Her rapor en fazla 1.000 olay veya 14 günlük veri içerir( hangisi önce ulaşılırsa). Veriler bir dosyaya yazılabilir veya bir betik veya uygulamaya aktarılabilir. CLI yalnızca 1.000 olay döndürebilir. Sayfada döndürülen en fazla olay sayısını belirtmek için Azure Sphere Genel API'sini kullanın.

Cihazlarınızı etkileyen hatalar ve diğer olaylar hakkındaki verileri aşağıdaki yollarla indirebilirsiniz:

  • az sphere catalog download-error-report komutunu kullanarak. Geçerli katalogdaki cihazlar tarafından bildirilen hatalar ve olaylar hakkında bilgi içeren bir CSV dosyası indirilir.

  • Hata raporlama için Azure Sphere Genel API'sini kullanarak. API uç noktası, gereksinimlerinize göre ayrıştırabileceğiniz bir JSON nesnesi döndürür.

RTApps'ten hata raporlama verileri toplanmaz. RTApps'ten hataları günlüğe kaydetmek istiyorsanız, RTApps'ten ağ hizmetlerine hata verilerinin kaydedilebileceği üst düzey uygulamaya hataları iletmek için çekirdekler arası iletişimler uygulamanız gerekir.

Kullanılabilir veri türleri

Her hata veya olay için döndürülen veriler aşağıdakileri içerir:

Veri Açıklama
Cihaz Kimliği Olayla karşılaşan cihazın kimliği.
Olay Türü Olayın planlı mı yoksa plansız mı olduğu. İşletim sistemi ve uygulama güncelleştirmeleri planlı olaylar olarak kabul edilirken, hatalar planlanmamış olaylardır.
Event Sınıfı Olayla karşılaşan yazılım bileşeni: işletim sistemi veya uygulama.
Olay Sayısı StartTime ve EndTime ile sınırlandırılan süre içinde olayın gerçekleşme sayısı.
Açıklama Olay hakkında bilgi. Bu alan geneldir ve olaya ve kaynağına bağlı olarak değişir. Uygulamalar için çıkış kodunu, sinyal durumunu ve sinyal kodunu içerebilir, ancak alanın tam içeriği sabit değildir. Bu, olay hakkındaki bilgileri içerir ve zaman penceresinde olayın ilk geçtiği yerdir.
Başlangıç Saati Olay penceresinin başladığı tarih ve saat (UTC olarak).
Bitiş Saati Olay penceresinin sona erdiği tarih ve saat (UTC olarak).

Başlangıç Saati ve Bitiş Saati, olay verilerinin toplandığı bir zaman penceresi tanımlar. Toplanan olay grupları için pencere en fazla 24 saat ve zaman penceresi başına en fazla 8 oluşum olabilir.

Uygulama olayları

Uygulama olayları; kilitlenmeler, çıkışlar ve diğer uygulama hatası türleriyle birlikte bulut yüklü uygulama güncelleştirmelerini içerir.

Uygulama güncelleştirmeleri planlı olaylardır. AppUpdate olayı için Açıklama alanı içerir AppUpdate.

Uygulama kilitlenmeleri, çıkışlar, başlatma hataları ve benzer olaylar planlanmamış olaylardır. Planlanmamış bir olay için Açıklama alanının içeriği, olayla karşılaşan uygulamaya bağlıdır. Aşağıdaki tabloda, planlanmamış bir olay için Açıklama alanında bulunabilecek alanlar listelenmiştir.

Veri Açıklama
exit_status veya exit_code Uygulama tarafından bildirilen çıkış durumu veya kod.
signal_status İşletim sistemi tarafından döndürülen kilitlenmenin üst düzey nedenini açıklayan tamsayı. Durumların listesini Man 7 belgelerinde veya diğer Linux kaynaklarında bulabilirsiniz.
signal_code Üst sinyal durumu içindeki ayrıntılı kilitlenme durumunu gösteren tamsayı. Ayrıntılar için Man 7 belgelerine veya diğer Linux kaynaklarına bakın.
component_id Kilitlenen yazılım bileşeninin GUID'i.
image_id Hata sırasında çalışan görüntünün GUID'i.

AppCrash açıklamasındaki belirli bilgiler kilitlenmenin kaynağına bağlıdır. Çoğu kilitlenme için açıklama aşağıdakine benzer:

AppCrash (exit_status=11; signal_status=11; signal_code=3; component_id=685f13af-25a5-40b2-8dd8-8cbc253ecbd8; image_id=7053e7b3-d2bb-431f-8d3a-173f52db9675)

Bazı durumlarda kilitlenme, önceki örnekteki verileri tamamlayan aşağıdaki gibi ek hata verilerini tetikler:

AppCrash (pc=BEEED2EE; lr=BEEED2E5; sp=BEFFDE58; signo=11; errno=0; code=0; component_id=685f13af-25a5-40b2-8dd8-8cbc253ecbd8; pc_modulename+offset=appname+80000; lr_modulename+offset=app+100CC)

Veri Açıklama
Pc Program Sayacı. Kilitlenmeyi tetikleyen yönergenin adresini gösterir.
Lr Bağlantı Kaydı. Büyük olasılıkla çağıran işlevdeki dönüş adresini gösterir.
Sp Yığın İşaretçisi. Çağrı yığınının üst kısmını gösterir.
signo POSIX sinyali. Hata türünü gösterir.
Errno POSIX hatası. Bir hatayı gösterir.
Kod Üst sinyal durumu içindeki ayrıntılı kilitlenme durumunu gösterir.
component_id Kilitlenen yazılım bileşeninin GUID'i.
pc_modulename+uzaklık Modülün adı ve kilitlenmenin oluştuğu kodu içeren modüle uzaklık.
lr_modulename+uzaklık Modülün adı ve çağıran işlev olabilecek modülün uzaklığı.

AppCrashes'i yorumlama

AppCrash hakkındaki bilgilerin çoğunu signal_status ve signal_code bulabilirsiniz. Şu adımları izleyin:

  1. signal_status için Man 7 belgelerini kullanarak önce "Standart Sinyaller için Sinyal Numaralandırma" etiketli tabloya bakın. x86/ARM sütununda hata raporundaki csvsignal_status atanan değeri arayın. Bulunduktan sonra, en soldaki sütunda karşılık gelen Sinyal adını not edin.
  2. Ekranı yukarı kaydırarak "Standart Sinyaller" etiketli tabloya gelin. Daha önce belirlenen Sinyal adını eşleştirin ve sinyalin ne gösterdiği hakkında daha fazla bilgi toplamak için tabloyu kullanın.
  3. daha önce bulduğunuz signal_code ve Sinyal adı için Man 7 belgelerinde ilgili si_codes listesini bulun.
  4. Hata iletisiyle eşleşen kodu belirlemek için hata raporu csv dosyasındaki signal_code atanan değeri kullanın.

Örneğin, aşağıdaki AppCrash açıklamasını göz önünde bulundurun:

AppCrash (exit_status=11; signal_status=11; signal_code=3; component_id=685f13af-25a5-40b2-8dd8-8cbc253ecbd8; image_id=7053e7b3-d2bb-431f-8d3a-173f52db9675)

Man 7 belgelerini kullanarak AppCrash hakkında aşağıdaki ek bilgileri bulabilirsiniz:

  1. Sinyaller, Sinyal adam sayfasının açıklamasının 10. bölümünde açıklanmıştır. 11 değerinin signal_status bir SIGSEGV sinyaline karşılık gelir.
  2. SIGSEGV geçersiz bir bellek başvurusu oluştuğuna işaret eder (bu genellikle null işaretçi olabilir).
  3. SI_Codes, her signal_status için SigAction man sayfasının açıklamasının 3. bölümünde açıklanmıştır. Sayfada her si_code için bir dizin numarası listelenmese de, her signal_status kategorisinden dizin 1'den başlayarak sayabilirsiniz. SIGSEGV için si_codes listesine bakarak (dizin 1'de başlayarak), üçüncü bir SEGV_BNDERR eşleşdiğini görebilirsiniz.
  4. SEGV_BNDERR başarısız adres bağlı denetiminin gerçekleştiğini gösterir.

Not

Yaygın olarak karşılaşılan bir AppCrash, SEND_SIG_PRIV ile birlikte bir SIGKILL sinyali olan 9 signal_status si_codedeğerini içerir. Bu durum, işletim sisteminin bellek kullanım sınırını aştığı için uygulamayı öldürdüğünü gösterir. Uygulama bellek sınırları hakkında daha fazla bilgi edinmek için bkz. Üst düzey uygulamalarda bellek kullanımı.

AppExits Yorumla

Bir uygulama hatasız çıktığında, signal_status ve signal_code alanları mevcut değildir ve exit_status yerine Açıklama bir çıkış kodu içerir:

AppExit (exit_code=0; component_id=685f13af-25a5-40b2-8dd8-8cbc253ecbd8; image_id=0a7cc3a2-f7c2-4478-8b02-723c1c6a85cd)

AppExits, uygulama güncelleştirmesi, cihazın fişinin takılı olmaması veya güç azaltma API'sinin kullanılması gibi çeşitli nedenlerle oluşabilir. AppExit'in nedenleri hakkında içgörü elde edebilmeniz için çıkış kodlarının uygulanması önemlidir.

AppExits'i yorumlamak için hata raporunun Açıklama alanındaki exit_code değerini kullanın. Uygulamanız bir çıkış kodu döndürürse, hatanın nerede veya ne zaman oluştuğuna karar vermek için hata raporundaki exit_code değerini kullanabilirsiniz. Bu değeri kullanarak, hangi çıkış kodu iletisinin hata raporunda sağlanan değere karşılık olduğunu görmek için uygulama kodunda arama gerçekleştirin. Ardından, uygulamadaki hangi işlevin çıkış kodu iletisini döndürdiğini ve bunu neden yaptığını bulmaya bakın. return deyimini ve bağlamını görüntüleyerek hatanın nedenini keşfedebilirsiniz.

İşletim sistemi olayları

Hata verileri, uygulamanızın başarısız olmasına veya yeniden başlatılmasına neden olarak etkileyebilecek temel işletim sistemi ve donanım olaylarını da içerir. Bu tür olaylar aşağıdakileri içerebilir:

  • Çekirdek hatalarının neden olduğu planlanmamış cihaz yeniden başlatmaları
  • Bulut işletim sistemi güncelleştirmeleri
  • Geçici donanım sorunları

İşletim sistemi olayları, uygulama hatalarının bir işletim sistemi veya donanım sorununun sonucu olup olmadığını belirlemenize veya uygulamanın kendisiyle ilgili sorunları yansıtmanıza yardımcı olmak için verilere eklenir. Olay verileri bir cihazın Güvenli Mod'da önyüklendiğini gösteriyorsa, uygulamalarınız başlatılamayabilir.

Hata verilerini keşfetme

Hata verilerini analiz etmek için betikler veya araçlar geliştirmeyi planlıyorsanız ancak hataları bildirmek için kullanılabilecek çok fazla sayıda cihazınız yoksa, test için bu tür veriler oluşturmak için Azure Sphere örnek uygulamalarını kullanabilirsiniz. Azure Sphere örnekleri deposundakiTutorials/ErrorReporting örneği, uygulama kilitlendiğinde bildirilen hataların nasıl analiz edildiği açıklanır. Visual Studio, Visual Studio Code veya komut satırını kullanarak örneği derlemek için benioku dosyasındaki yönergeleri izleyin.

Uygulamayı komut satırından hata ayıklayıcı olmadan dağıttığınızda, işletim sistemi her başarısız olduğunda uygulamayı yeniden başlatır. Benzer olaylar, sık sık başarısız olan bir cihazın diğer cihazlardan gelen hataları maskelemeyecek şekilde toplanır ve zaman penceresi başına en fazla sekiz kez tekrarlanır. Örneği aşağıdaki gibi hata ayıklamadan komut satırından dağıtabilirsiniz:

az sphere device sideload deploy --image-package <path to image package for the app>

Hata raporu oluşturma ve indirme

Hata ve olay verileri her gün Azure Sphere Güvenlik Hizmeti'ne yüklenir. Azure Sphere cihazının Azure Sphere Güvenlik Hizmeti ile iletişim kurmak için Wi-Fi veya Ethernet kullanarak İnternet'e bağlı olduğundan emin olun.

  1. Raporu csv dosyasına indirmek için aşağıdaki komutu çalıştırın:

    az sphere catalog download-error-report --destination error.csv
    
  2. İndirilen CSV dosyasını açın ve bileşen kimliğinizi arayın. Aşağıdakine benzer bir hata açıklaması görmeniz gerekir:

    AppExit (exit_code=0; component_id=685f13af-25a5-40b2-8dd8-8cbc253ecbd8; image_id=6d2646aa-c0ce-4e55-b7d6-7c206a7a6363)

Hata raporlama için Azure Sphere Genel API'sini de kullanabilirsiniz.

Not

  • Yakın zamanda bildirilen olayların indirilmesi 24 saat kadar sürebilir.
  • Cihaz bir NTP sunucusuna bağlanmadan önce bir olay veya hata oluşursa, AS3'e yüklenen telemetride yer alan olayın zaman damgası yanlış olabilir. Bu, AS3'ten indirilen sonraki rapordaki StartTime sütununda yanlış bir girişe yansıtılır. Bu durumda, olayın ne zaman gerçekleştiğini tahmin etmeye yardımcı olması için raporun EndTime alanını kullanın. Bu alan, bulut hizmetlerinin karşıya yüklenen telemetri verilerini aldığı saati içerir ve her zaman geçerli bir tarihe sahip olur.

Hata verilerini biçimlendirme

Hata raporu dosyasındaki zaman damgaları ve veri sütunları tipik bir CSV dosyasından farklı biçimlendirilir. Sonuçları Excel'de görüntülemek istiyorsanız, yeni sütunlar oluşturup özel formüller ekleyerek verileri yeniden biçimlendirebilirsiniz.

Dışarı aktarılan CSV dosyasındaki zaman damgalarını Excel ile çalışacak şekilde biçimlendirmek için:

  1. Yeni bir Timestamp sütunu oluşturun ve bunun için özel bir biçim oluşturun:

    yyyy/mm/dd hh:mm:ss

  2. Aşağıdaki formülü yeni Zaman Damgası sütunundaki hücrelere ekleyerek F2 hücre değerini sütun ve satırınızla eşleşecek şekilde değiştirir:

    =(DATEVALUE(LEFT(RawErrorReport!F2,10))+TIMEVALUE(RIGHT(RawErrorReport!F2,8)))

Açıklama alanını ayrı sütunlara bölmek için şu adımları izleyin ve F2 hücre değerini sütun ve satırınızla eşleşecek şekilde ayarlayın:

  1. Shortname veya benzeri adlı yeni bir sütun oluşturun ve hücrelere aşağıdaki formülü ekleyin:

    =TRIM(LEFT(F2,FIND("(",F2)-1))

  2. Satır1 üst bilgilerinin parametre değerleriyle aynı adlara sahip olduğu sütunlar oluşturun ve sütunların her birindeki hücrelere aşağıdaki formülü ekleyin:

    =IF(ISERROR(FIND("; " & H$1 & "=", SUBSTITUTE($F2,"(","; "))), "", MID($F2, FIND("; " & H$1 & "=", SUBSTITUTE($F2,"(","; ")) + (LEN(H$1) + 2), FIND("; ", SUBSTITUTE($F2,")","; "), FIND("; " & H$1 & "=", SUBSTITUTE($F2,"(","; "))) - FIND("; " & H$1 & "=", SUBSTITUTE($F2,"(","; ")) - (LEN(H$1) + 2)))