يمكنك تصدير بيانات Crashlytics الخاصة بك إلى BigQuery لمزيد من التحليل. يتيح لك BigQuery تحليل البيانات باستخدام BigQuery SQL، وتصديرها إلى موفر سحابي آخر، واستخدامها للتصور ولوحات المعلومات المخصصة مع Google Data Studio.
تمكين تصدير BigQuery
- انتقل إلى صفحة عمليات التكامل في وحدة تحكم Firebase.
- في بطاقة BigQuery ، انقر على رابط .
- اتبع التعليمات التي تظهر على الشاشة لتمكين BigQuery.
عند ربط مشروعك بـ BigQuery:
- يقوم Firebase بإعداد عمليات مزامنة يومية لبياناتك من مشروع Firebase الخاص بك إلى BigQuery.
- افتراضيًا، ترتبط جميع التطبيقات في مشروعك بـ BigQuery وأي تطبيقات تضيفها لاحقًا إلى المشروع يتم ربطها تلقائيًا بـ BigQuery. يمكنك إدارة التطبيقات التي ترسل البيانات .
- يقوم Firebase بتصدير نسخة من بياناتك الحالية إلى BigQuery. بالنسبة لكل تطبيق مرتبط، يتضمن ذلك جدول دفعي يحتوي على البيانات من المزامنة اليومية.
- إذا قمت بتمكين تصدير البث من Crashlytics BigQuery، فستحتوي جميع التطبيقات المرتبطة أيضًا على جدول فوري يحتوي على بيانات يتم تحديثها باستمرار.
لإلغاء تنشيط تصدير BigQuery، قم بإلغاء ربط مشروعك في وحدة تحكم Firebase.
ما البيانات التي يتم تصديرها إلى BigQuery؟
يتم تصدير بيانات Firebase Crashlytics إلى مجموعة بيانات BigQuery باسم firebase_crashlytics
. افتراضيًا، سيتم إنشاء جداول فردية داخل مجموعة بيانات Crashlytics لكل تطبيق في مشروعك. يقوم Firebase بتسمية الجداول بناءً على معرف حزمة التطبيق، مع تحويل النقاط إلى شرطات سفلية، وإلحاق اسم النظام الأساسي بالنهاية.
على سبيل المثال، ستكون بيانات تطبيق ما بالمعرف com.google.test
موجودة في جدول باسم com_google_test_ANDROID
. يتم تحديث جدول الدُفعات هذا مرة واحدة يوميًا. إذا قمت بتمكين تصدير تدفق Crashlytics BigQuery، فسيتم أيضًا دفق بيانات Firebase Crashlytics في الوقت الفعلي إلى com_google_test_ANDROID_REALTIME
.
يمثل كل صف في الجدول حدثًا حدث في التطبيق، بما في ذلك الأعطال والأخطاء غير الفادحة وأخطاء ANR.
تمكين تصدير البث المباشر لـ Crashlytics BigQuery
يمكنك دفق بيانات Crashlytics الخاصة بك في الوقت الفعلي باستخدام BigQueryStreaming . يمكنك استخدامه لأي غرض يتطلب بيانات حية، مثل تقديم المعلومات في لوحة معلومات مباشرة، أو مشاهدة الطرح المباشر، أو مراقبة مشكلات التطبيق التي تؤدي إلى تشغيل التنبيهات ومهام سير العمل المخصصة.
لا يتوفر تصدير البث المباشر لـ Crashlytics BigQuery في وضع الحماية الخاص بـ BigQuery.
عندما تقوم بتمكين التصدير المتدفق لـ Crashlytics BigQuery، بالإضافة إلى الجدول الدفعي، سيكون لديك جدول في الوقت الفعلي. فيما يلي الاختلافات التي يجب أن تكون على دراية بها بين الجداول:
جدول الدفعة | الجدول الحقيقي |
---|---|
|
|
يعد الجدول الدفعي مثاليًا للتحليل طويل المدى وتحديد الاتجاهات بمرور الوقت لأننا نقوم بتخزين الأحداث بشكل دائم قبل كتابتها، ويمكن إعادة تعبئتها إلى الجدول لمدة تصل إلى 90 يومًا. عندما نكتب البيانات إلى جدول الوقت الفعلي الخاص بك، فإننا نكتبها على الفور إلى BigQuery، وبالتالي فهي مثالية للوحات المعلومات المباشرة والتنبيهات المخصصة. يمكن دمج هذين الجدولين مع استعلام ربط للحصول على فوائد كليهما. راجع مثال الاستعلام 9 أدناه.
بشكل افتراضي، يحتوي جدول الوقت الفعلي على وقت انتهاء صلاحية القسم وهو 30 يومًا. لمعرفة كيفية تعديل ذلك، راجع تحديث انتهاء صلاحية القسم .
تمكين دفق Crashlytics BigQuery
لتمكين الدفق، انتقل إلى قسم Crashlytics في صفحة عمليات تكامل BigQuery وحدد خانة الاختيار تضمين الدفق .
قالب استوديو البيانات
لتمكين بيانات الوقت الفعلي في قالب Data Studio، اتبع الإرشادات الموجودة في تصور بيانات Crashlytics المصدرة باستخدام Data Studio .
الآراء
يمكنك تحويل نماذج الاستعلامات أدناه إلى طرق عرض باستخدام BigQuery UI. راجع إنشاء طرق عرض للحصول على إرشادات مفصلة.
ماذا يمكنك أن تفعل بالبيانات المصدرة؟
تحتوي عمليات تصدير BigQuery على بيانات الأعطال الأولية، بما في ذلك نوع الجهاز ونظام التشغيل والاستثناءات (تطبيقات Android) أو الأخطاء (تطبيقات Apple)، وسجلات Crashlytics، بالإضافة إلى بيانات أخرى.
العمل مع بيانات Firebase Crashlytics في BigQuery
توضح الأمثلة التالية الاستعلامات التي يمكنك تشغيلها على بيانات Crashlytics الخاصة بك. تنشئ هذه الاستعلامات تقارير غير متوفرة في لوحة معلومات Crashlytics.
أمثلة على استعلامات Crashlytics
توضح الأمثلة التالية كيفية إنشاء التقارير التي تقوم بتجميع بيانات أحداث الأعطال في ملخصات يسهل فهمها.
المثال 1: الأعطال يوميًا
بعد العمل على إصلاح أكبر عدد ممكن من الأخطاء، تعتقد إحدى المطورين الرئيسيين أن فريقها جاهز أخيرًا لإطلاق تطبيقهم الجديد لمشاركة الصور. قبل أن يفعلوا ذلك، يريدون التحقق من عدد الأعطال يوميًا خلال الشهر الماضي، للتأكد من أن الأخطاء التي قاموا بها جعلت التطبيق أكثر استقرارًا بمرور الوقت:
SELECT COUNT(DISTINCT event_id) AS number_of_crashes, FORMAT_TIMESTAMP("%F", event_timestamp) AS date_of_crashes FROM `projectId.firebase_crashlytics.package_name_ANDROID` GROUP BY date_of_crashes ORDER BY date_of_crashes DESC LIMIT 30;
مثال 2: ابحث عن معظم الأعطال المنتشرة
لتحديد أولويات خطط الإنتاج بشكل صحيح، يفكر مدير المشروع في كيفية الإشارة إلى أكثر 10 أعطال انتشارًا في منتجهم. يقومون بإنتاج استعلام يوفر نقاط البيانات ذات الصلة:
SELECT DISTINCT issue_id, COUNT(DISTINCT event_id) AS number_of_crashes, COUNT(DISTINCT installation_uuid) AS number_of_impacted_user, blame_frame.file, blame_frame.line FROM `projectId.firebase_crashlytics.package_name_ANDROID` WHERE event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(),INTERVAL 168 HOUR) AND event_timestamp < CURRENT_TIMESTAMP() GROUP BY issue_id, blame_frame.file, blame_frame.line ORDER BY number_of_crashes DESC LIMIT 10;
مثال 3: أكثر 10 أجهزة تعطلًا
الخريف هو موسم الهاتف الجديد! يعرف المطور أن هذا يعني أيضًا أنه موسم جديد للمشكلات الخاصة بالجهاز. للتغلب على مخاوف التوافق التي تلوح في الأفق، قاموا بتجميع استعلام يحدد الأجهزة العشرة التي واجهت أكبر عدد من الأعطال في الأسبوع الماضي:
SELECT device.model, COUNT(DISTINCT event_id) AS number_of_crashes FROM `projectId.firebase_crashlytics.package_name_ANDROID` WHERE event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 168 HOUR) AND event_timestamp < CURRENT_TIMESTAMP() GROUP BY device.model ORDER BY number_of_crashes DESC LIMIT 10;
المثال 4: التصفية حسب المفتاح المخصص
يريد أحد مطوري الألعاب معرفة أي مستوى من اللعبة يواجه أكبر عدد من الأعطال. ولمساعدتهم على تتبع هذه الإحصائيات، قاموا بتعيين مفتاح Crashlytics مخصصًا current_level
، وتحديثه في كل مرة يصل فيها المستخدم إلى مستوى جديد.
ج موضوعية
CrashlyticsKit setIntValue:3 forKey:@"current_level";
سويفت
Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
جافا
Crashlytics.setInt("current_level", 3);
باستخدام هذا المفتاح في تصدير BigQuery، يكتبون بعد ذلك استعلامًا للإبلاغ عن توزيع قيم current_level
المرتبطة بكل حدث تعطل:
SELECT COUNT(DISTINCT event_id) AS num_of_crashes, value FROM `projectId.firebase_crashlytics.package_name_ANDROID` UNNEST(custom_keys) WHERE key = "current_level" GROUP BY key, value ORDER BY num_of_crashes DESC
مثال 5: استخراج معرف المستخدم
المطور لديه تطبيق في الوصول المبكر. يحبها معظم مستخدميها، لكن ثلاثة منهم تعرضوا لعدد غير معتاد من الأعطال. للوصول إلى الجزء السفلي من المشكلة، يكتبون استعلامًا يسحب جميع أحداث التعطل لهؤلاء المستخدمين، باستخدام معرفات المستخدمين الخاصة بهم:
SELECT * FROM `projectId.firebase_crashlytics.package_name_ANDROID` WHERE user.id IN ("userid1", "userid2", "userid3") ORDER BY user.id
المثال 6: البحث عن كافة المستخدمين الذين يواجهون مشكلة تعطل معينة
أصدر أحد المطورين خطأً فادحًا لمجموعة من مختبري النسخة التجريبية. تمكن الفريق من استخدام الاستعلام من المثال 2 أعلاه لتحديد معرف مشكلة التعطل المحددة. يرغبون الآن في تشغيل استعلام لاستخراج قائمة مستخدمي التطبيق الذين تأثروا بهذا العطل:
SELECT user.id as user_id FROM `projectId.firebase_crashlytics.package_name_ANDROID` WHERE issue_id = "YOUR_ISSUE_ID" AND application.display_version = "" AND user.id != "" ORDER BY user.id;
المثال 7: عدد المستخدمين المتأثرين بمشكلة التعطل، مقسمًا حسب البلد
اكتشف الفريق الآن خطأً فادحًا أثناء طرح الإصدار الجديد. لقد تمكنوا من استخدام الاستعلام من المثال 2 أعلاه لتحديد معرف مشكلة التعطل المحددة. يود الفريق الآن معرفة ما إذا كان هذا العطل قد انتشر إلى المستخدمين في بلدان مختلفة حول العالم.
لكتابة هذا الاستعلام، سيحتاج الفريق إلى:
تمكين عمليات تصدير BigQuery لـ Google Analytics. راجع تصدير بيانات المشروع إلى BigQuery .
قم بتحديث تطبيقهم لتمرير معرف المستخدم إلى كل من Google Analytics SDK وCrashlytics SDK.
ج موضوعية
CrashlyticsKit setUserIdentifier:@"123456789"; FIRAnalytics setUserID:@"12345678 9";
سويفت
Crashlytics.sharedInstance().setUserIdentifier("123456789"); Analytics.setUserID("123456789");
جافا
Crashlytics.setUserIdentifier("123456789"); mFirebaseAnalytics.setUserId("123456789");
اكتب استعلامًا يستخدم حقل معرف المستخدم للانضمام إلى الأحداث في مجموعة بيانات Google Analytics BigQuery مع حدوث أعطال في مجموعة بيانات Crashlytics BigQuery:
SELECT DISTINCT c.issue_id, a.geo.country, COUNT(DISTINCT c.user.id) as num_users_impacted FROM `projectId.firebase_crashlytics.package_name_ANDROID` c INNER JOIN `projectId.analytics_YOUR_TABLE.events_*` a on c.user.id = a.user_id WHERE c.issue_id = "YOUR_ISSUE_ID" AND a._TABLE_SUFFIX BETWEEN '20190101' AND '20200101' GROUP BY c.issue_id, a.geo.country, c.user.id
المثال 8: أهم 5 قضايا حتى الآن اليوم
يتطلب تمكين تصدير تدفق Crashlytics BigQuery
SELECT issue_id, COUNT(DISTINCT event_id) AS events FROM `your_project.firebase_crashlytics.package_name_ANDROID_REALTIME` WHERE DATE(event_timestamp) = CURRENT_DATE() GROUP BY issue_id ORDER BY events DESC LIMIT 5;
المثال 9: أهم 5 مشكلات منذ DATE، بما في ذلك اليوم
يتطلب تمكين تصدير تدفق Crashlytics BigQuery.
في هذا المثال، نقوم بدمج جداول الدفعات والوقت الفعلي لإضافة معلومات الوقت الفعلي إلى بيانات الدُفعات الموثوقة. نظرًا لأن event_id
هو مفتاح أساسي، فيمكننا استخدام DISTINCT event_id
لاستخلاص أي أحداث شائعة من الجدولين.
SELECT issue_id, COUNT(DISTINCT event_id) AS events FROM ( SELECT issue_id, event_id, event_timestamp FROM `your_project.firebase_crashlytics.package_name_ANDROID_REALTIME` UNION ALL SELECT issue_id, event_id, event_timestamp FROM `your_project.firebase_crashlytics.package_name_ANDROID`) WHERE event_timestamp >= "2020-01-13" GROUP BY issue_id ORDER BY events DESC LIMIT 5;
فهم مخطط Firebase Crashlytics في BigQuery
عند ربط Crashlytics بـ BigQuery، يقوم Firebase بتصدير الأحداث الأخيرة (الأعطال والأخطاء غير الفادحة وأخطاء ANR)، بما في ذلك الأحداث لمدة تصل إلى يومين قبل الارتباط، مع خيار إعادة التعبئة لمدة تصل إلى تسعين يومًا.
ومن تلك النقطة وحتى تعطيل الارتباط، يقوم Firebase بتصدير أحداث Crashlytics بشكل يومي. قد يستغرق الأمر بضع دقائق حتى تصبح البيانات متاحة في BigQuery بعد كل عملية تصدير.
مجموعات البيانات
يقوم Firebase Crashlytics بإنشاء مجموعة بيانات جديدة في BigQuery لبيانات Crashlytics. تغطي مجموعة البيانات مشروعك بالكامل، حتى لو كان يحتوي على تطبيقات متعددة.
الجداول
يقوم Firebase Crashlytics بإنشاء جدول في مجموعة البيانات لكل تطبيق في مشروعك، إلا إذا قمت بإلغاء الاشتراك في تصدير البيانات لهذا التطبيق. يقوم Firebase بتسمية الجداول بناءً على معرف حزمة التطبيق، مع تحويل النقاط إلى شرطات سفلية، وإلحاق اسم النظام الأساسي بالنهاية.
على سبيل المثال، ستكون بيانات تطبيق Android بالمعرف com.google.test
موجودة في جدول باسم com_google_test_ANDROID
، وستكون بيانات الوقت الفعلي (في حالة تمكينها) موجودة في جدول باسم com_google_test_ANDROID_REALTIME
.
تحتوي الجداول على مجموعة قياسية من بيانات Crashlytics بالإضافة إلى أي مفاتيح Crashlytics مخصصة يحددها المطورون.
الصفوف
يمثل كل صف في الجدول خطأً واجهه التطبيق.
أعمدة
الأعمدة الموجودة في الجدول متطابقة بالنسبة للأعطال والأخطاء غير الفادحة وأخطاء ANR. إذا تم تمكين تصدير دفق Crashlytics BigQuery، فسيحتوي جدول الوقت الفعلي على نفس الأعمدة الموجودة في الجدول الدفعي. الأعمدة الموجودة ضمن التصدير مدرجة أدناه.
بدون آثار المكدس
الأعمدة موجودة في صفوف تمثل الأحداث بدون تتبعات المكدس.
اسم الحقل | نوع البيانات | وصف |
---|---|---|
منصة | خيط | تطبيقات أبل أو أندرويد |
package_identifier | خيط | معرف الحزمة، على سبيل المثال com.google.gmail |
Event_id | خيط | معرف فريد لهذا الحدث |
is_fatal | منطقية | ما إذا كان التطبيق قد تعطل |
error_type | خيط | نوع الخطأ في الحدث (FATAL، NON_FATAL، ANR) |
معرف_المشكلة | خيط | المشكلة المرتبطة بالحدث |
Variety_id | خيط | متغير المشكلة المرتبط بهذا الحدث لاحظ أنه ليست كل الأحداث لها متغير مشكلة مرتبط بها. |
events_timestamp | الطابع الزمني | عندما وقع الحدث |
جهاز | سِجِلّ | الجهاز الذي وقع عليه الحدث |
الشركة المصنعة للجهاز | خيط | الشركة المصنعة للجهاز |
طراز الجهاز | خيط | طراز الجهاز |
جهاز.هندسة معمارية | خيط | X86_32 أو X86_64 أو ARMV7 أو ARM64 أو ARMV7S أو ARMV7K |
ذاكرة | سِجِلّ | حالة ذاكرة الجهاز |
الذاكرة المستخدمة | إنت64 | بايت من الذاكرة المستخدمة |
Memory.free | إنت64 | بايت من الذاكرة المتبقية |
تخزين | سِجِلّ | التخزين الدائم للجهاز |
تخزين.مستعمل | إنت64 | وحدات البايت من التخزين المستخدمة |
تخزين.مجاني | إنت64 | بايت من مساحة التخزين المتبقية |
نظام التشغيل | سِجِلّ | تفاصيل نظام التشغيل الموجود على الجهاز |
Operating_system.display_version | خيط | إصدار نظام التشغيل الموجود على الجهاز |
Operating_system.name | خيط | اسم نظام التشغيل الموجود على الجهاز |
Operating_system.modification_state | خيط | ما إذا كان الجهاز قد تم تعديله، على سبيل المثال كسر الحماية/تجذير (معدل أو غير معدل) |
Operating_system.type | خيط | نوع نظام التشغيل الذي يعمل على الجهاز (على سبيل المثال، IOS، MACOS)؛ متاح فقط لتطبيقات منصات Apple |
Operating_system.device_type | خيط | نوع الجهاز (على سبيل المثال، هاتف محمول، جهاز لوحي، تلفزيون، وما إلى ذلك)؛ تُعرف أيضًا باسم "فئة الجهاز" |
طلب | سِجِلّ | التطبيق الذي أنشأ الحدث |
application.build_version | خيط | نسخة بناء التطبيق |
application.display_version | خيط | |
مستخدم | سِجِلّ | اختياري: المعلومات التي تم جمعها عن مستخدم التطبيق |
اسم المستخدم | خيط | اختياري: اسم المستخدم |
البريد الالكتروني للمستخدم | خيط | اختياري: عنوان البريد الإلكتروني للمستخدم |
معرف المستخدم | خيط | اختياري: معرف خاص بالتطبيق مرتبط بالمستخدم |
custom_keys | سجل متكرر | أزواج القيمة الأساسية المعرفة من قبل المطور |
custom_keys.key | خيط | مفتاح محدد من قبل المطور |
custom_keys.value | خيط | قيمة محددة من قبل المطور |
install_uuid | خيط | معرف يحدد التطبيق الفريد وتثبيت الجهاز |
Crashlytics_sdk_versions | خيط | إصدار Crashlytics SDK الذي أنشأ الحدث |
app_orientation | خيط | PORTRAIT، أو LANDSCAPE، أو FACE_UP، أو FACE_DOWN |
Device_orientation | خيط | PORTRAIT، أو LANDSCAPE، أو FACE_UP، أو FACE_DOWN |
Process_state | خيط | الخلفية أو المقدمة |
السجلات | سجل متكرر | رسائل السجل ذات الطابع الزمني التي تم إنشاؤها بواسطة مسجل Crashlytics، إذا تم تمكينها |
logs.timestamp | الطابع الزمني | عندما تم إنشاء السجل |
logs.message | خيط | الرسالة المسجلة |
فتات الخبز | سجل متكرر | مسارات تنقل Google Analytics ذات الطابع الزمني، إذا تم تمكينها |
فتات الخبز.الطابع الزمني | الطابع الزمني | الطابع الزمني المرتبط بمسار التنقل |
فتات الخبز.اسم | خيط | الاسم المرتبط بمسار التنقل |
فتات الخبز.params | سجل متكرر | المعلمات المرتبطة بمسار التنقل |
فتات الخبز.params.key | خيط | مفتاح معلمة مرتبط بمسار التنقل |
فتات الخبز.params.value | خيط | قيمة المعلمة المرتبطة بمسار التنقل |
Blam_frame | سِجِلّ | الإطار الذي تم تحديده على أنه السبب الجذري للعطل أو الخطأ |
Blam_frame.line | إنت64 | رقم السطر لملف الإطار |
Blam_frame.file | خيط | اسم ملف الإطار |
Blam_frame.symbol | خيط | الرمز المائي، أو الرمز الخام إذا كان غير قابل للترطيب |
Blam_frame.offset | إنت64 | إزاحة البايت في الصورة الثنائية التي تحتوي على الكود، غير محددة لاستثناءات Java |
Blam_frame.address | إنت64 | العنوان الموجود في الصورة الثنائية والذي يحتوي على الكود، غير محدد لإطارات Java |
إلقاء اللوم_frame.library | خيط | اسم العرض للمكتبة التي تتضمن الإطار |
إلقاء اللوم_frame.owner | خيط | المطور، البائع، وقت التشغيل، النظام الأساسي، أو النظام |
إلقاء اللوم_frame.blamed | منطقية | ما إذا كان تحليل Crashlytics قد حدد أن هذا الإطار هو سبب العطل أو الخطأ |
استثناءات | سجل متكرر | Android فقط: الاستثناءات التي حدثت أثناء هذا الحدث. يتم عرض الاستثناءات المتداخلة بترتيب زمني عكسي (اقرأ: السجل الأخير هو الاستثناء الأول الذي تم طرحه) |
Exceptions.type | خيط | نوع الاستثناء، على سبيل المثال، java.lang.IllegalStateException |
Exceptions.exception_message | خيط | رسالة مقترنة بالاستثناء |
Exceptions.nested | منطقية | صحيح للجميع باستثناء الاستثناء الأخير (أي السجل الأول) |
Exceptions.title | خيط | عنوان الموضوع |
استثناءات.العنوان الفرعي | خيط | العنوان الفرعي للموضوع |
Exceptions.blamed | منطقية | صحيح إذا حددت Crashlytics أن الاستثناء هو المسؤول عن الخطأ أو التعطل |
Exceptions.frames | سجل متكرر | الإطارات المرتبطة بالاستثناء |
Exceptions.frames.line | إنت64 | رقم السطر لملف الإطار |
Exceptions.frames.file | خيط | اسم ملف الإطار |
Exceptions.frames.symbol | خيط | الرمز المائي، أو الرمز الخام إذا كان غير قابل للترطيب |
Exceptions.frames.offset | إنت64 | إزاحة البايت في الصورة الثنائية التي تحتوي على الكود، غير محددة لاستثناءات Java |
Exceptions.frames.address | إنت64 | العنوان الموجود في الصورة الثنائية والذي يحتوي على الكود، غير محدد لإطارات Java |
Exceptions.frames.library | خيط | اسم العرض للمكتبة التي تتضمن الإطار |
Exceptions.frames.owner | خيط | المطور، البائع، وقت التشغيل، النظام الأساسي، أو النظام |
Exceptions.frames.blamed | منطقية | ما إذا كان تحليل Crashlytics قد حدد أن هذا الإطار هو سبب العطل أو الخطأ |
خطأ | سجل متكرر | تطبيقات Apple فقط: أخطاء غير فادحة |
error.queue_name | خيط | قائمة الانتظار التي كان يعمل عليها الخيط |
خطا بالكود | إنت64 | رمز الخطأ المرتبط بخطأ NSError المخصص للتطبيق |
خطأ.العنوان | خيط | عنوان الموضوع |
خطأ.العنوان الفرعي | خيط | العنوان الفرعي للموضوع |
خطأ.إلقاء اللوم | منطقية | ما إذا كان تحليل Crashlytics قد حدد أن هذا الإطار هو سبب الخطأ |
خطأ. إطارات | سجل متكرر | إطارات المكدس |
error.frames.line | إنت64 | رقم السطر لملف الإطار |
error.frames.file | خيط | اسم ملف الإطار |
خطأ.إطارات.رمز | خيط | الرمز المائي، أو الرمز الخام إذا كان غير قابل للترطيب |
error.frames.offset | إنت64 | إزاحة البايت في الصورة الثنائية التي تحتوي على الكود |
error.frames.address | إنت64 | العنوان الموجود في الصورة الثنائية التي تحتوي على الكود |
error.frames.library | خيط | اسم العرض للمكتبة التي تتضمن الإطار |
error.frames.owner | خيط | المطور، البائع، وقت التشغيل، النظام الأساسي، أو النظام |
error.frames.blamed | منطقية | ما إذا كان تحليل Crashlytics قد حدد أن هذا الإطار هو سبب الخطأ |
الخيوط | سجل متكرر | المواضيع الموجودة في وقت الحدث |
Threads.crashed | منطقية | ما إذا كان الخيط قد تحطم |
threads.thread_name | خيط | اسم الخيط |
threads.queue_name | خيط | تطبيقات Apple فقط: قائمة الانتظار التي كان يعمل عليها مؤشر الترابط |
threads.signal_name | خيط | اسم الإشارة التي تسببت في تعطل التطبيق، موجود فقط في سلاسل الرسائل الأصلية المعطلة |
threads.signal_code | خيط | رمز الإشارة التي تسببت في تعطل التطبيق؛ موجود فقط على المواضيع الأصلية المحطمة |
threads.crash_address | إنت64 | عنوان الإشارة التي تسببت في تعطل التطبيق؛ موجود فقط على المواضيع الأصلية المحطمة |
Threads.code | إنت64 | تطبيقات Apple فقط: رمز الخطأ الخاص بخطأ NSError المخصص للتطبيق |
Threads.title | خيط | عنوان الموضوع |
المواضيع.العنوان الفرعي | خيط | العنوان الفرعي للموضوع |
Threads.blamed | منطقية | ما إذا كان تحليل Crashlytics قد حدد أن هذا الإطار هو سبب العطل أو الخطأ |
Threads.frames | سجل متكرر | إطارات الخيط |
threads.frames.line | إنت64 | رقم السطر لملف الإطار |
Threads.frames.file | خيط | اسم ملف الإطار |
Threads.frames.symbol | خيط | الرمز المائي، أو الرمز الخام إذا كان غير قابل للترطيب |
threads.frames.offset | إنت64 | إزاحة البايت في الصورة الثنائية التي تحتوي على الكود |
Threads.frames.address | إنت64 | العنوان الموجود في الصورة الثنائية التي تحتوي على الكود |
threads.frames.library | خيط | اسم العرض للمكتبة التي تتضمن الإطار |
threads.frames.owner | خيط | المطور، البائع، وقت التشغيل، النظام الأساسي، أو النظام |
Threads.frames.blamed | منطقية | ما إذا كان تحليل Crashlytics قد حدد أن هذا الإطار هو سبب الخطأ |
Unity_metadata.unity_version | خيط | إصدار Unity الذي يعمل على هذا الجهاز |
Unity_metadata.debug_build | منطقية | إذا كان هذا بناء تصحيح |
Unity_metadata.processor_type | خيط | نوع المعالج |
Unity_metadata.processor_count | إنت64 | عدد المعالجات (النوى) |
Unity_metadata.processor_frequency_mhz | إنت64 | تردد المعالج (المعالجات) بالميجاهرتز |
Unity_metadata.system_memory_size_mb | إنت64 | حجم ذاكرة النظام بالميجابايت |
Unity_metadata.graphics_memory_size_mb | إنت64 | ذاكرة الرسومات بالميجابايت |
Unity_metadata.graphics_device_id | إنت64 | معرف جهاز الرسومات |
Unity_metadata.graphics_device_vendor_id | إنت64 | معرف بائع معالج الرسومات |
Unity_metadata.graphics_device_name | خيط | اسم جهاز الرسوميات |
Unity_metadata.graphics_device_vendor | خيط | بائع جهاز الرسومات |
Unity_metadata.graphics_device_version | خيط | إصدار جهاز الرسومات |
Unity_metadata.graphics_device_type | خيط | نوع جهاز الرسوميات |
Unity_metadata.graphics_shader_level | إنت64 | مستوى تظليل الرسومات |
Unity_metadata.graphics_render_target_count | إنت64 | عدد أهداف العرض الرسومية |
Unity_metadata.graphics_copy_texture_support | خيط | دعم نسخ نسيج الرسومات كما هو محدد في Unity API |
Unity_metadata.graphics_max_texture_size | إنت64 | الحد الأقصى للحجم المخصص لتقديم الملمس |
Unity_metadata.screen_size_px | خيط | حجم الشاشة بالبكسل، بتنسيق العرض × الارتفاع |
Unity_metadata.screen_resolution_dpi | خيط | DPI للشاشة كرقم النقطة العائمة |
Unity_metadata.screen_refresh_rate_hz | إنت64 | معدل تحديث الشاشة بالهرتز |
تصور بيانات Crashlytics المصدرة باستخدام Data Studio
يعمل Google Data Studio على تحويل مجموعات بيانات Crashlytics في BigQuery إلى تقارير سهلة القراءة والمشاركة وقابلة للتخصيص بالكامل.
لمعرفة المزيد حول استخدام Data Studio، جرّب دليل البدء السريع لـ Data Studio، مرحبًا بك في Data Studio .
استخدام قالب تقرير Crashlytics
يحتوي Data Studio على نموذج تقرير لـ Crashlytics يتضمن مجموعة شاملة من الأبعاد والمقاييس من مخطط Crashlytics BigQuery الذي تم تصديره. إذا قمت بتمكين تصدير تدفق Crashlytics BigQuery، فيمكنك عرض تلك البيانات في صفحة اتجاهات الوقت الفعلي لقالب Data Studio. ويمكنك استخدام النموذج كقالب لإنشاء تقارير ومرئيات جديدة بسرعة استنادًا إلى بيانات الأعطال الأولية لتطبيقك:
- افتح قالب لوحة معلومات Crashlytics Data Studio .
- انقر فوق استخدام القالب في الزاوية العلوية اليمنى.
- في القائمة المنسدلة مصدر بيانات جديد ، حدد إنشاء مصدر بيانات جديد .
- انقر على تحديد في بطاقة BigQuery .
- حدد جدولًا يحتوي على بيانات Crashlytics المُصدَّرة عن طريق اختيار My Projects > [your-project-name] > firebase_crashlytics > [your-table-name] . جدول الدُفعات الخاص بك متاح دائمًا للاختيار؛ إذا تم تمكين تصدير البث المباشر لـ Crashlytics BigQuery، فيمكنك تحديد جدول الوقت الفعلي بدلاً من ذلك.
- ضمن التكوين ، قم بتعيين مستوى قالب Crashlytics إلى الافتراضي .
- انقر فوق اتصال لإنشاء مصدر البيانات الجديد.
- انقر فوق "إضافة إلى التقرير" للعودة إلى قالب Crashlytics.
- أخيرًا، انقر فوق "إنشاء تقرير" لإنشاء نسختك من قالب لوحة معلومات Crashlytics Data Studio.