يمكنك تصدير بيانات Crashlytics إلى BigQuery لإجراء تحليل إضافي. تسمح لك أداة BigQuery بتحليل البيانات باستخدام BigQuery SQL، وتصديرها إلى مقدّم خدمات سحابية آخر، واستخدامها لعرض البيانات ولوحات البيانات المخصّصة باستخدام "مركز البيانات من Google".
تفعيل BigQuery Export
- انتقِل إلى صفحة عمليات الدمج في وحدة تحكّم Firebase.
- في بطاقة BigQuery، انقر على ربط.
- اتّبِع التعليمات التي تظهر على الشاشة لتفعيل BigQuery.
عند ربط مشروعك بأداة BigQuery:
- يعمل Firebase على إعداد عمليات مزامنة يومية لبياناتك من مشروع Firebase إلى BigQuery.
- يتم تلقائيًا ربط جميع التطبيقات في مشروعك بأداة BigQuery وأي تطبيقات تضيفها لاحقًا إلى المشروع يتم ربطها تلقائيًا بأداة BigQuery. ويمكنك إدارة عمليات اختيار التطبيقات التي ترسل البيانات إلى BigQuery.
- يصدّر Firebase نسخة من بياناتك الحالية إلى BigQuery. لكل تطبيق مرتبط، يتضمن ذلك جدولاً مجمّعًا يحتوي على البيانات من المزامنة اليومية.
- في حال تفعيل تصدير البث من Crashlytics إلى BigQuery، ستتضمّن جميع التطبيقات المرتبطة أيضًا جدولاً في الوقت الفعلي يحتوي على البيانات التي يتم تحديثها باستمرار.
لإيقاف BigQuery Export، ألغِ ربط مشروعك في وحدة تحكُّم 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.
تفعيل تصدير بث BigQuery من Crashlytics
يمكنك بث بيانات Crashlytics في الوقت الفعلي باستخدام BigQueryStreaming. يمكنك استخدامها لأي غرض يتطلب بيانات مباشرة، مثل تقديم معلومات في لوحة بيانات مباشرة أو مشاهدة طرح مباشر أو مراقبة مشكلات التطبيق التي تؤدي إلى تشغيل التنبيهات وعمليات سير العمل المخصصة.
لا يتوفّر تصدير بث BigQuery من Crashlytics في وضع الحماية في BigQuery.
عند تفعيل تصدير البث من Crashlytics BigQuery، سيكون لديك جدول في الوقت الفعلي بالإضافة إلى جدول الدفعة. إليك الاختلافات التي يجب أن تكون على دراية بها بين الجداول:
جدول الدفعات | جدول الوقت الفعلي |
---|---|
|
|
يُعد الجدول المجمّع مثاليًا للتحليل طويل المدى وتحديد المؤشرات بمرور الوقت لأننا نخزّن الأحداث بشكل دائم قبل كتابتها، ويمكن إعادة تعبئتها إلى الجدول لمدة تصل إلى 30 يومًا. عندما نكتب البيانات إلى جدولك في الوقت الفعلي، نكتبها على الفور في BigQuery، لذا فهي مثالية للوحات المعلومات المباشرة والتنبيهات المخصصة. يمكن دمج هذين الجدولين مع استعلام دمج للحصول على مزايا كليهما. اطّلِع على الطلب المثال 9 أدناه.
تبلغ مدة انتهاء صلاحية القسم تلقائيًا 30 يومًا في جدول الوقت الفعلي. للتعرّف على طريقة تعديل هذه الإعدادات، يمكنك الاطّلاع على مقالة تعديل تاريخ انتهاء صلاحية التقسيم.
تفعيل بث Crashlytics في BigQuery
لتفعيل البث، انتقِل إلى قسم Crashlytics في صفحة عمليات الدمج في BigQuery وضع علامة في مربّع الاختيار تضمين البث.
نموذج "مركز البيانات"
لتفعيل بيانات الوقت الفعلي في نموذج "مركز البيانات"، اتّبِع التعليمات الواردة في مقالة عرض بيانات Crashlytics التي تم تصديرها باستخدام "مركز البيانات".
المشاهدات
يمكنك تحويل نماذج طلبات البحث أدناه إلى طرق عرض باستخدام واجهة مستخدم BigQuery. راجِع إنشاء ملفات شخصية للحصول على تعليمات تفصيلية.
كيف يمكنك الاستفادة من البيانات التي يتم تصديرها؟
تحتوي عمليات تصدير 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
وتعديله في كل مرّة يصل فيها المستخدِم إلى مستوى جديد.
Objective-C
CrashlyticsKit setIntValue:3 forKey:@"current_level";
Swift
Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
Java
Crashlytics.setInt("current_level", 3);
باستخدام هذا المفتاح في BigQuery Export، يكتبون بعد ذلك طلب بحث للإبلاغ عن توزيع قيم 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". يمكنك الاطّلاع على تصدير بيانات المشروع إلى BigQuery.
تحديث التطبيق لتمرير رقم تعريف المستخدم إلى كل من حزمة تطوير البرامج (SDK) لخدمة "إحصاءات Google" وحزمة تطوير البرامج Crashlytics.
Objective-C
CrashlyticsKit setUserIdentifier:@"123456789"; FIRAnalytics setUserID:@"12345678 9";
Swift
Crashlytics.sharedInstance().setUserIdentifier("123456789"); Analytics.setUserID("123456789");
Java
Crashlytics.setUserIdentifier("123456789"); mFirebaseAnalytics.setUserId("123456789");
اكتب طلب بحث يستخدِم حقل User-ID لدمج الأحداث في مجموعة بيانات BigQuery ضمن "إحصاءات Google" التي تتضمّن أعطالاً في مجموعة بيانات 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)، بما في ذلك الأحداث التي حدثت قبل يومين من الربط، مع خيار إعادة البيانات حتى 30 يومًا.
ومن تلك المرحلة إلى أن يتم إيقاف الرابط، يصدِّر 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. إذا تم تفعيل تصدير بيانات بث BigQuery من Crashlytics، سيحتوي جدول الوقت الفعلي على الأعمدة نفسها التي يتضمّنها الجدول الدُفعي. يتم سرد الأعمدة ضمن التصدير أدناه.
بدون تتبعات تسلسل استدعاء الدوال البرمجية
الأعمدة المتوفّرة في الصفوف التي تمثّل الأحداث بدون عمليات تتبُّع تسلسل استدعاء الدوال البرمجية.
اسم الحقل | نوع البيانات | الوصف |
---|---|---|
platform | سلسلة | تطبيقات Apple أو Android |
معرّف_الحزمة | سلسلة | معرِّف الحزمة، مثل com.google.gmail |
event_id (معرّف_الحدث) | سلسلة | معرّف فريد للحدث |
قاتلة | منطقية | ما إذا كان التطبيق قد تعطّل أم لا |
نوع_الخطأ | سلسلة | نوع خطأ الحدث (FATAL، NON_FATAL، ANR) |
معرّف_المشكلة | سلسلة | المشكلة المرتبطة بالحدث |
معرّف_الصيغة | سلسلة | صيغة المشكلة المرتبطة بهذا الحدث يُرجى العلم أنّه ليست كل الأحداث لها صيغة مشكلة مرتبطة. |
event_timestamp | الطابع الزمني | وقت وقوع الحدث |
الجهاز | سجلّ | الجهاز الذي وقع عليه الحدث |
شركة تصنيع جهاز | سلسلة | الشركة المصنّعة للجهاز |
Device.model | سلسلة | طراز الجهاز |
هندسة الجهاز | سلسلة | X86_32 أو X86_64 أو ARMV7 أو ARM64 أو ARMV7S أو ARMV7K |
ذاكرة | سجلّ | حالة ذاكرة الجهاز |
image.used (مُستعمَل) | INT64 | وحدات البايت المستخدمة من الذاكرة |
Memory.free | INT64 | وحدات البايت المتبقية من الذاكرة |
التخزين | سجلّ | مساحة التخزين الدائمة للجهاز |
Storage.used | INT64 | وحدات بايت مساحة التخزين المستخدمة |
Storage.free | INT64 | وحدات بايت من مساحة التخزين المتبقية |
نظام التشغيل | سجلّ | تفاصيل نظام التشغيل على الجهاز |
segmentation_system.display_version | سلسلة | إصدار نظام التشغيل على الجهاز |
operating_system.name | سلسلة | اسم نظام التشغيل على الجهاز |
segmentation_system.modification_state | سلسلة | ما إذا تم تعديل الجهاز، على سبيل المثال، تمت إزالة جميع القيود عنه أو الوصول إلى الجذر (MODIFIED أو UNMODIFIED) |
segmentation_system.type | سلسلة | نوع نظام التشغيل الذي يعمل على الجهاز (على سبيل المثال، IOS وMACOS)، وهو متوفّر فقط لتطبيقات أنظمة Apple الأساسية |
segmentation_system.device_type | سلسلة | نوع الجهاز (على سبيل المثال، MOBILE أو TABLET أو تلفزيون أو غير ذلك)، يُعرف أيضًا باسم "فئة الجهاز" |
التطبيق | سجلّ | التطبيق الذي أنشأ الحدث |
app.build_version | سلسلة | إصدار إصدار التطبيق |
app.display_version | سلسلة | |
المستخدم | سجلّ | اختياري: المعلومات التي يتم جمعها عن مستخدم التطبيق |
user.name | سلسلة | اختياري: اسم المستخدم |
user.email | سلسلة | اختياري: عنوان البريد الإلكتروني للمستخدم |
user.id | سلسلة | اختياري: رقم تعريف خاص بالتطبيق مرتبط بالمستخدم |
مفاتيح_مخصّصة | سجلّ متكرّر | أزواج المفتاح/القيمة التي يحددها المطوّر |
custom_keys.key | سلسلة | مفتاح من تحديد المطوّر |
قيمة custom_keys.value | سلسلة | قيمة يحددها المطوّر |
install_uuid | سلسلة | رقم تعريف يحدِّد تطبيقًا فريدًا ويتم تثبيت الجهاز |
Crashlytics_sdk_versions | سلسلة | إصدار حزمة تطوير البرامج (SDK) الخاصة بـ Crashlytics الذي أنشأ الحدث |
اتّجاه_التطبيق | سلسلة | وضع "صورة" أو "منظر أفقي" أو "وجه متجه للأعلى" أو "عكس صحيح" |
اتجاه_الجهاز | سلسلة | وضع "صورة" أو "منظر أفقي" أو "وجه متجه للأعلى" أو "عكس صحيح" |
حالة_المعالجة | سلسلة | معلومات عن المقدمة |
قطع خشب | سجلّ متكرّر | رسائل السجلّ ذات الطابع الزمني التي أنشأها مسجّل Crashlytics، في حال تفعيلها |
السجلات.timestamp | الطابع الزمني | عند إنشاء السجلّ |
الرسائل. | سلسلة | الرسالة المُسجَّلة |
أشرطة التنقّل | سجلّ متكرّر | أشرطة التنقّل في "إحصاءات Google" ذات الطابع الزمني، في حال تفعيلها |
شريط التنقُّل | الطابع الزمني | الطابع الزمني المرتبط بشريط التنقّل |
breadcrumbs.name | سلسلة | الاسم المرتبط بشريط التنقّل |
شريط التنقُّل | سجلّ متكرّر | المَعلمات المرتبطة بمسار التنقّل |
AdsBots.params.key | سلسلة | مفتاح معلَمة مرتبط بشريط التنقّل |
AdsBots.params.value | سلسلة | قيمة معلَمة مرتبطة بمسار التنقّل |
إطار_اللوم | سجلّ | الإطار المحدد كسبب أساسي للتعطُّل أو الخطأ |
لوم_frame.line | INT64 | رقم السطر لملف الإطار |
لوم_frame.file | سلسلة | اسم ملف الإطار |
لوم_frame.symbol | سلسلة | رمز شرب الماء، أو الرمز الأولي إذا كان غير قابل للشرب |
lumme_frame.offset | INT64 | إزاحة البايت في الصورة الثنائية التي تحتوي على الرمز، بدون ضبط لاستثناءات Java |
لوم_frame.address | INT64 | لم يتم ضبط العنوان في الصورة الثنائية التي تحتوي على الرمز، مع إطارات Java |
لوم_frame.library | سلسلة | الاسم المعروض للمكتبة التي تحتوي على الإطار |
لوم_frame.owner | سلسلة | مطوّر البرامج أو المورّد أو وقت التشغيل أو المنصة أو النظام |
لوم_إطار.لوم | منطقية | ما إذا كان تحليل Crashlytics قد حدّد أنّ هذا الإطار هو سبب التعطُّل أو الخطأ |
الاستثناءات | سجلّ متكرّر | أجهزة Android فقط: الاستثناءات التي حدثت أثناء هذا الحدث يتم تقديم الاستثناءات المتداخلة بترتيب زمني عكسي (قراءة: السجل الأخير هو أول استثناء تم طرحه) |
unavailable.type | سلسلة | نوع الاستثناء، مثل java.lang.legalStateException |
unavailable.exception_message | سلسلة | رسالة مرتبطة بالاستثناء |
استثناءات.متداخلة | منطقية | صحيح للكل ما عدا الاستثناء الأخير (أي السجل الأول) |
الاستبعاد.عنوان | سلسلة | عنوان سلسلة المحادثات |
استثناءات.العنوان الفرعي | سلسلة | العنوان الفرعي لسلسلة المحادثات |
استثناءات.لوم | منطقية | صحيح إذا قرر Crashlytics أن الاستثناء مسؤول عن الخطأ أو التعطُّل |
الاستثناءات | سجلّ متكرّر | الإطارات المرتبطة بالاستثناء |
unavailable.frames.line | INT64 | رقم السطر لملف الإطار |
الاستثناءات.إطارات.ملف | سلسلة | اسم ملف الإطار |
unavailable.frames.symbol | سلسلة | رمز شرب الماء، أو الرمز الأولي إذا كان غير قابل للشرب |
unavailable.frames.offset | INT64 | إزاحة البايت في الصورة الثنائية التي تحتوي على الرمز، بدون ضبط لاستثناءات Java |
unavailable.frames.address | INT64 | لم يتم ضبط العنوان في الصورة الثنائية التي تحتوي على الرمز، مع إطارات Java |
unavailable.frames.library | سلسلة | الاسم المعروض للمكتبة التي تحتوي على الإطار |
unavailable.frames.owner | سلسلة | مطوّر البرامج أو المورّد أو وقت التشغيل أو المنصة أو النظام |
install.frames.blamed | منطقية | ما إذا كان تحليل Crashlytics قد حدّد أنّ هذا الإطار هو سبب التعطُّل أو الخطأ |
خطأ | سجلّ متكرّر | تطبيقات Apple فقط: الأخطاء غير الفادحة |
error.queue_name | سلسلة | قائمة الانتظار التي كانت سلسلة التعليمات قيد التشغيل فيها |
رمز الخطأ | INT64 | رمز خطأ مرتبط بخطأ NSError المسجّل للتطبيق |
error.title | سلسلة | عنوان سلسلة المحادثات |
error.subtitle | سلسلة | العنوان الفرعي لسلسلة المحادثات |
خطأ.لومي | منطقية | ما إذا كان تحليل Crashlytics قد حدّد أنّ هذا الإطار هو سبب الخطأ |
error.frames | سجلّ متكرّر | إطارات تتبع تسلسل استدعاء الدوال البرمجية |
error.frames.line | INT64 | رقم السطر لملف الإطار |
ملف error.frames.file | سلسلة | اسم ملف الإطار |
رمز error.frames.symbol | سلسلة | رمز شرب الماء، أو الرمز الأولي إذا كان غير قابل للشرب |
error.frames.offset | INT64 | إزاحة البايت في الصورة الثنائية التي تحتوي على التعليمة البرمجية |
error.frames.address | INT64 | العنوان الموجود في الصورة الثنائية التي تحتوي على الرمز |
error.frames.library | سلسلة | الاسم المعروض للمكتبة التي تحتوي على الإطار |
error.frames.owner | سلسلة | مطوّر البرامج أو المورّد أو وقت التشغيل أو المنصة أو النظام |
error.frames.blamed | منطقية | ما إذا كان تحليل Crashlytics قد حدّد أنّ هذا الإطار هو سبب الخطأ |
سلاسل المحادثات | سجلّ متكرّر | سلاسل المحادثات المتوفّرة في وقت الحدث |
crashed | منطقية | ما إذا كانت سلسلة المحادثات قد تعطلت أم لا |
thread.thread_name | سلسلة | اسم سلسلة المحادثات |
اسم_سلسلة_السلاسل | سلسلة | تطبيقات Apple فقط: قائمة الانتظار التي كانت سلسلة المحادثات قيد التشغيل عليها |
thread.signal_name | سلسلة | اسم الإشارة التي تسببت في تعطُّل التطبيق، ولا تظهر إلا في سلاسل المحادثات الأصلية المعطّلة |
thread.signal_code | سلسلة | يشير هذا المصطلح إلى رمز الإشارة الذي تسبب في تعطُّل التطبيق، وهو لا يتوفّر إلا في سلاسل التعليمات الأصلية المعطّلة. |
عناوين السلاسل.crash_address | INT64 | عنوان الإشارة التي تسببت في تعطل التطبيق، وهو موجود فقط في سلاسل التعليمات الأصلية المعطلة |
thread.code | INT64 | تطبيقات Apple فقط: رمز الخطأ لخطأ NSError المُسجل الخاص بالتطبيق |
عنوان المواضيع | سلسلة | عنوان سلسلة المحادثات |
segmentation.subtitle | سلسلة | العنوان الفرعي لسلسلة المحادثات |
موضوع الإضاءات | منطقية | ما إذا كان تحليل Crashlytics قد حدّد أنّ هذا الإطار هو سبب التعطُّل أو الخطأ |
إطارات سلاسل المحادثات | سجلّ متكرّر | إطارات سلسلة المحادثات |
thread.frames.line | INT64 | رقم السطر لملف الإطار |
ملفs.frames.file | سلسلة | اسم ملف الإطار |
thread.frames.symbol | سلسلة | رمز شرب الماء، أو الرمز الأولي إذا كان الجهاز غير قابل للشرب |
segmentation.frames.offset | INT64 | إزاحة البايت في الصورة الثنائية التي تحتوي على التعليمة البرمجية |
إطارات السلاسل.العنوان | INT64 | العنوان الموجود في الصورة الثنائية التي تحتوي على الرمز |
thread.frames.library | سلسلة | الاسم المعروض للمكتبة التي تحتوي على الإطار |
إطارات.rw | سلسلة | مطوّر البرامج أو المورّد أو وقت التشغيل أو المنصة أو النظام |
s.frames.planmed | منطقية | ما إذا كان تحليل Crashlytics قد حدّد أنّ هذا الإطار هو سبب الخطأ |
unity_metadata.unity_version | سلسلة | إصدار Unity الذي يعمل على هذا الجهاز |
unity_metadata.debug_build | منطقية | إذا كان هذا إصدار تصحيح أخطاء |
unity_metadata.processor_type | سلسلة | نوع معالج البيانات |
unity_metadata.processor_count | INT64 | عدد المعالجات (النواة) |
unity_metadata.processor_frequency_mhz | INT64 | تردّد معالِجات البيانات بوحدة ميغاهرتز |
unity_metadata.system_memory_size_mb | INT64 | حجم ذاكرة النظام بالميغابايت |
unity_metadata.graphics_memory_size_mb | INT64 | ذاكرة الرسومات بالميغابايت |
unity_metadata.graphics_device_id | INT64 | معرّف جهاز الرسومات |
unity_metadata.graphics_device_vendor_id | INT64 | معرّف مورّد معالج الرسومات |
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 | INT64 | مستوى التظليل للرسومات |
unity_metadata.graphics_render_target_count | INT64 | عدد أهداف العرض الرسومي |
unity_metadata.graphics_copy_texture_support | سلسلة | إتاحة نسخ زخرفة الرسومات على النحو المحدّد في Unity API |
unity_metadata.graphics_max_texture_size | INT64 | أقصى حجم مخصص لعرض الهيئة |
unity_metadata.screen_size_px | سلسلة | حجم الشاشة بالبكسل، منسَّق بالعرض × الارتفاع |
unity_metadata.screen_process_dpi | سلسلة | عدد النقاط لكل بوصة (DPI) في الشاشة كرقم نقطة عائمة |
unity_metadata.screen_refresh_rate_hz | INT64 | معدَّل تحديث الشاشة بالهرتز |
إنشاء عرض مرئي لبيانات Crashlytics التي تم تصديرها باستخدام "مركز البيانات"
يعمل مركز البيانات من Google على تحويل مجموعات بيانات Crashlytics في BigQuery إلى تقارير تسهل قراءتها ومشاركتها وتخصيصها بالكامل.
للمزيد من المعلومات حول كيفية استخدام "مركز البيانات"، يُرجى الاطّلاع على دليل البدء السريع حول "مركز البيانات" مرحبًا بك في "مركز البيانات".
استخدام نموذج تقرير Crashlytics
تحتوي "مركز البيانات" على نموذج تقرير عن Crashlytics يتضمّن مجموعة شاملة من السمات والمقاييس من مخطط Crashlytics في BigQuery الذي تمّ تصديره. في حال تفعيل تصدير البث من Crashlytics باستخدام BigQuery، يمكنك عرض هذه البيانات على صفحة مؤشرات "الوقت الفعلي" ضمن نموذج "مركز البيانات". ويمكنك استخدام النموذج كنموذج لإنشاء تقارير ومرئيات جديدة بسرعة استنادًا إلى بيانات الأعطال الأولية لتطبيقك.
- افتح نموذج لوحة بيانات "مركز البيانات من Crashlytics".
- انقر على استخدام النموذج في أعلى يسار الصفحة.
- في القائمة المنسدلة مصدر بيانات جديد، اختَر إنشاء مصدر بيانات جديد.
- انقر على اختيار في بطاقة BigQuery.
- اختَر جدولاً يحتوي على بيانات Crashlytics التي تمّ تصديرها عن طريق اختيار مشاريعي > [your-project-name] > firebase_crashlytics > [your-table-name]. يمكن دائمًا اختيار جدول الدفعة. إذا تم تفعيل تصدير بيانات بث BigQuery من Crashlytics، يمكنك اختيار جدول الوقت الفعلي بدلاً من ذلك.
- ضمن الإعداد، اضبط مستوى نموذج Crashlytics على تلقائي.
- انقر على ربط لإنشاء مصدر البيانات الجديد.
- انقر على إضافة إلى التقرير للعودة إلى نموذج Crashlytics.
- أخيرًا، انقر على إنشاء تقرير لإنشاء نسختك من نموذج لوحة بيانات مركز البيانات Crashlytics.