Hata verilerini toplama ve yorumlama
Önemli
Bu, Azure Sphere (Eski) belgeleridir. Azure Sphere (Eski) 27 Eylül 2027'de kullanımdan kaldırılıyor ve kullanıcıların bu zamana kadar Azure Sphere'e (Tümleşik) geçmeleri gerekiyor. Azure Sphere (Tümleşik) belgelerini görüntülemek için İçindekiler tablosu üzerinde bulunan Sürüm seçiciyi kullanın.
Hata ve olay verileri her gün Azure Sphere Güvenlik Hizmeti'ne yüklenir. Belirli bir kiracıya erişimi olan herkes bu kiracının verilerini indirebilir. Rapor, kiracıdaki 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:
azsphere tenant download-error-report komutunu kullanarak. Geçerli kiracıdaki 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 hata verilerinin ağ hizmetlerine kaydedilebileceği üst düzey uygulamaya hataları iletmek için çekirdekler arası iletişimler uygulamanız gerekir. Ayrıntılar için bkz . Üst düzey bir uygulamayla iletişim kurma ve Gerçek zamanlı özellikli bir uygulamayla iletişim kurma.
Kullanılabilir veri türleri
Her hata veya olay için döndürülen veriler aşağıdakileri içerir:
Veriler | 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 | Olayla ilgili bilgiler. 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 oluşumundandır. |
Başlangıç Zamanı | Olay penceresinin başladığı tarih ve saat (UTC olarak). |
Bitiş Zamanı | 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 herhangi bir olay grubunun penceresi 24 saate kadar olabilir ve zaman penceresi başına en fazla 8 oluşum olabilir.
Uygulama olayları
Uygulama olayları; kilitlenmeler, çıkışlar ve diğer uygulama hatası türlerinin yanı sıra 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ın Açıklama alanında bulunabilecek alanlar listelenmiştir.
Veriler | 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 şekilde görünür:
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)
Veriler | Açıklama |
---|---|
kişisel bilgisayar | Program Sayacı. Kilitlenmeyi tetikleyen yönergenin adresine işaret eder. |
Lr | Bağlantı Kaydı. Büyük olasılıkla çağırma işlevindeki 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:
- 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
csv
signal_status atanan değeri arayın. Bulunduktan sonra en soldaki sütuna karşılık gelen Sinyal adını not edin. - 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.
- daha önce bulduğunuz signal_code ve Sinyal adı için Man 7 belgelerinde ilgili si_codes listesini bulun.
- Hangi kodun hata iletisiyle eşleşeceğini 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:
- Sinyaller, Sinyal adamı sayfasının açıklamasının 10. bölümünde açıklanmıştır. 11 değerinin signal_status SIGSEGV sinyaline karşılık gelir.
- SIGSEGV geçersiz bir bellek başvurusu oluştuğuna işaret eder (bu genellikle null işaretçi olabilir).
- SI_Codes, her signal_status için SigAction erkek 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, dizin 1'den başlayarak her signal_status kategorisinden sayabilirsiniz. SIGSEGV için si_codes listesine bakarak (dizin 1'de başlayarak), üçüncüünün bir SEGV_BNDERR eşleşdiğini görebilirsiniz.
- SEGV_BNDERR başarısız adres bağlama 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_code
değ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ı yoktur 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 kesilmemesi veya güç azaltma API'sinin kullanımı 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, hata raporunda sağlanan değere karşılık gelen çıkış kodu iletisini görmek için uygulama kodunda arama gerçekleştirin. Ardından, uygulamadaki hangi işlevin çıkış kodu iletisini döndürdü ve bunu neden yaptığını bulun. 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ı
- güncelleştirmeleri Bulut İşletim Sistemi
- Geçici donanım sorunları
İşletim sistemi olayları, uygulama hatalarının bir işletim sistemi veya donanım sorununun sonucu olup olmadığını veya uygulamanın kendisiyle ilgili sorunları yansıtmasını belirlemenize 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 verileri oluşturmak için Azure Sphere örnek uygulamalarını kullanabilirsiniz. Azure Sphere örnekleri deposundaki Tutorials/ErrorReporting örneği, uygulama kilitlendiğinde bildirilen hataların nasıl analiz edildiği açıklanmaktadır. Visual Studio, Visual Studio Code veya komut satırını kullanarak örneği derlemek için benioku dosyasındaki yönergeleri izleyin.
Uygulamayı hata ayıklayıcı olmadan komut satırından 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 penceresinde en fazla sekiz kez tekrarlanır. Örneği aşağıdaki gibi hata ayıklamadan komut satırından dağıtabilirsiniz:
azsphere 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 güvenlik hizmetiyle iletişim kurmak için Wi-Fi veya Ethernet kullanarak Azure Sphere cihazının İnternet'e bağlı olduğundan emin olun.
Raporu bir CSV dosyasına indirmek için aşağıdaki komutu çalıştırın:
azsphere tenant download-error-report --destination error.csv
İ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:
Yeni bir Timestamp sütunu oluşturun ve bunun için özel bir biçim oluşturun:
yyyy/mm/dd hh:mm:ss
F2 hücre değerini sütun ve satırınızla eşleşecek şekilde değiştirerek yeni Timestamp sütunundaki hücrelere aşağıdaki formülü ekleyin:
=(DATEVALUE(LEFT(RawErrorReport!F2,10))+TIMEVALUE(RIGHT(RawErrorReport!F2,8)))
Açıklama alanını ayrı sütunlara bölmek için, F2 hücre değerini sütun ve satırınızla eşleşecek şekilde değiştirerek şu adımları izleyin:
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))
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)))