- هيا بنا نبدأ. سأخبرك عن التسجيل المريح والبنية التحتية المتعلقة بالتسجيل والتي يمكنك نشرها لجعلها ملائمة لك للعيش مع تطبيقك ودورة حياته.
ماذا نفعل؟ سنقوم ببناء تطبيق صغير ، بدء التشغيل لدينا. ثم سنقوم بتنفيذ تسجيل الدخول الأساسي ، هذا جزء صغير من التقرير ، ما توفره Python خارج الصندوق. ثم الجزء الأكبر - سنحلل المشكلات النموذجية التي نواجهها أثناء تصحيح الأخطاء ونشرها وأدوات حلها.
إخلاء صغير: سأستخدم كلمات مثل القلم واللغة. دعني أوضح. من المحتمل أن تكون كلمة "Handle" هي لغة yandex عامية ، فهي تشير إلى API أو http أو gRPC API أو أي مجموعة أحرف أخرى قبل APU. "اللغة" هي عندما أطور على جهاز كمبيوتر محمول. يبدو أنني تحدثت عن كل الكلمات التي لا أتحكم فيها.
تطبيق مكتبة
لنبدأ. شركتنا هي "Bookstore". الميزة الرئيسية لهذا التطبيق هي بيع الكتب ، وهذا كل ما نريد القيام به. ثم ملء قليلا. سيتم كتابة التطبيق في Flask. جميع مقتطفات التعليمات البرمجية ، وجميع الأدوات عامة ومستخرجة من Python ، بحيث يمكن دمجها في معظم تطبيقاتك. لكن في حديثنا سيكون قارورة.
الشخصيات: أنا والمطور والمديرون وزميلي الحبيب إيراست. أي مصادفة عرضية.
دعنا نتحدث قليلا عن الهيكل. إنه تطبيق معمارية للخدمات المصغرة. الخدمة الأولى هي الكتب ، تخزين الكتب مع البيانات الوصفية للكتب. يستخدم قاعدة بيانات PostgreSQL. الخدمة المصغرة الثانية هي خدمة توصيل صغيرة تخزن البيانات الوصفية حول طلبات المستخدم. مجلس الوزراء هو الواجهة الخلفية لمجلس الوزراء. ليس لدينا واجهة أمامية ، فهي غير مطلوبة في تقريرنا. مجلس الوزراء يجمع الطلبات والبيانات من خدمة الدفاتر وخدمة التوصيل.
سأعرض لك بسرعة رمز مقابض هذه الخدمات ، كتب API. يأخذ هذا المقبض البيانات من قاعدة البيانات ، ويقوم بتسلسلها ، ويحولها إلى JSON ويعيدها.
لنذهب أبعد من ذلك. خدمة التوصيل. المقبض هو نفسه تمامًا. نحصل على البيانات من قاعدة البيانات ، ونقوم بتسلسلها وإرسالها.
والمقبض الأخير هو مقبض الخزانة. لها كود مختلف قليلا. تتعامل الخزانة مع طلبات البيانات من خدمة التوصيل ومن خدمة الكتاب ، وتجمع الردود وتعطي المستخدم طلباته. كل شىء. اكتشفنا بسرعة بنية التطبيق.
تسجيل الدخول الأساسي في التطبيق
الآن دعنا نتحدث عن التسجيل الأساسي ، الذي رأيناه فيه. لنبدأ بالمصطلحات.
ماذا تقدم لنا بايثون؟ أربعة كيانات أساسية رئيسية:
- المسجل ، نقطة الدخول لتسجيل الدخول إلى التعليمات البرمجية الخاصة بك. سوف تستخدم نوعا من المسجل ، اكتب logging.INFO ، وهذا كل شيء. لن تعرف شفرتك بعد الآن أي شيء عن مكان إرسال الرسالة وماذا حدث لها بعد ذلك. كيان المعالج مسؤول بالفعل عن هذا.
- يعالج المعالج رسالتك ، ويقرر مكان إرسالها: إلى الإخراج القياسي ، أو إلى ملف ، أو إلى بريد شخص آخر.
- الفلتر هو أحد الكيانين المساعدين. يزيل الرسائل من السجل. حالة أخرى شائعة الاستخدام هي حشو البيانات. على سبيل المثال ، في رسالتك تحتاج إلى إضافة سمة. لهذا أيضًا ، يمكن أن يساعد التصفية.
- ينقل المنسق رسالتك إلى النموذج المطلوب.
هذا هو المكان الذي انتهينا فيه من المصطلحات ، لن نعود إلى التسجيل مباشرة في Python ، مع الفئات الأساسية. ولكن فيما يلي مثال على تكوين تطبيقنا ، والذي يتم طرحه في جميع الخدمات الثلاث. هناك نوعان من الكتل الرئيسية الهامة بالنسبة لنا: المنسقين والمعالجات. بالنسبة للمنسقين ، يوجد مثال يمكنك رؤيته هنا ، نموذج لكيفية عرض الرسالة.
في المعالجات ، يمكنك رؤية التسجيل. يتم استخدام StreamHandler. وهذا يعني أننا نتخلص من جميع سجلاتنا إلى الناتج القياسي. هذا كل شيء ، لقد انتهينا من ذلك.
المشكلة 1. السجلات مبعثرة
ننتقل إلى المشاكل. بادئ ذي بدء ، المشكلة الأولى: السجلات مبعثرة.
قليلا من السياق. لقد كتبنا طلبنا ، الحلوى جاهزة بالفعل. يمكننا كسب المال على ذلك. نحن نطرحه في الإنتاج. طبعا يوجد اكثر من سيرفر. وفقًا لتقديراتنا المتحفظة ، يحتاج تطبيقنا الأكثر تعقيدًا إلى ثلاث أو أربع سيارات ، وهكذا لكل خدمة.
الآن السؤال. يأتي المدير يركض إلينا ويسأل: "إنه مكسور هناك ، ساعدونا!" انت تجري. يتم تسجيل كل شيء من أجلك ، إنه رائع. تذهب إلى الآلة الكاتبة الأولى ، انظر - لا يوجد شيء لطلبك. اذهب إلى السيارة الثانية - لا شيء. وهلم جرا. هذا أمر سيء ، يجب معالجته بطريقة ما.
لنضفي الطابع الرسمي على النتيجة التي نريد رؤيتها. أريد أن تكون السجلات في مكان واحد. هذا مطلب بسيط. الشيء الأكثر برودة هو أنني أريد البحث في السجلات. هذا هو ، نعم ، يقع في مكان واحد ويمكنني أن أمزق ، لكن سيكون رائعًا إذا كانت هناك بعض الأدوات والميزات الرائعة إلى جانب أداة بسيطة.
ولا أريد أن أكتب. هذا هو إراست الذي يحب كتابة الكود. أنا لا أتحدث عن ذلك ، لقد صنعت منتجًا على الفور. هذا يعني أنك تريد رمزًا إضافيًا أقل ، احصل على ملف أو سطرين ، وهذا كل شيء.
الحل الذي يمكن استخدامه هو Elasticsearch. دعنا نحاول رفعه. ما هي فوائد Elasticsearch؟ هذه واجهة بحث في السجل. هناك واجهة مباشرة خارج الصندوق ، هذه ليست وحدة تحكم لك ، ولكنها مكان التخزين الوحيد. وهذا يعني أننا استوفينا المتطلبات الرئيسية. لن نحتاج للذهاب إلى الخوادم.
في حالتنا ، سيكون تكاملًا بسيطًا إلى حد ما ، ومع الإصدار الأخير ، أصبح لدى Elasticsearch وكيل جديد مسؤول عن معظم عمليات الدمج. لقد رأوا في التكامل هناك بأنفسهم. رائع جدا. لقد كتبت حديثًا سابقًا واستخدمت filebeat بنفس السهولة. انها بسيطة للسجلات.
قليلا عن Elasticsearch. لا أرغب في الإعلان ، ولكن هناك العديد من الميزات الإضافية. على سبيل المثال ، الشيء الرائع هو البحث في سجل النص الكامل خارج المربع. يبدو رائعًا جدًا. في الوقت الحالي ، هذه المزايا كافية لنا. نحن نربطه.
بادئ ذي بدء ، سنحتاج إلى نشر وكيل يرسل سجلاتنا إلى Elasticsearch. تقوم بتسجيل حساب في Elasticsearch ثم تضيفه إلى Docker-compose. إذا لم يكن لديك عامل إرساء ، يمكنك رفعه بالمقابض أو على نظامك. في حالتنا ، تمت إضافة كتلة التعليمات البرمجية التالية ، والتكامل في docker-compose. هذا كل شيء ، تم تكوين الخدمة. ويمكنك رؤية ملف التكوين filebeat.yml في كتلة المجلدات.
هنا مثال filebeat.yml. هنا قمنا بإعداد بحث تلقائي لسجلات حاويات الرصيف التي تدور في مكان قريب. تم تخصيص اختيار هذه السجلات. حسب الحالة ، يمكنك تعيين الملصقات وتعليقها على حاوياتك ، وبناءً على ذلك ، سيتم إرسال سجلاتك إلى حاويات معينة فقط. المعالجات: كتلة add_docker_metadata بسيطة. نضيف المزيد من المعلومات حول سجلاتك في سياق عامل الإرساء إلى السجلات. اختياري ، لكن رائع.
ما الذي حصلنا عليه؟ هذا كل ما كتبناه ، كل الكود ، رائع جدًا. في الوقت نفسه ، حصلنا على جميع السجلات في مكان واحد وهناك واجهة. يمكننا البحث في سجلاتنا ، وهنا شريط البحث. يتم تسليمها. ويمكنك حتى تشغيله مباشرة حتى ينتقل الدفق إلى سجلاتنا في الواجهة ، وقد رأينا ذلك.
سألت نفسي هنا: لماذا ، كيف أربط شيئًا ما؟ ما هو البحث في السجل ، ما الذي يمكن عمله هناك؟
نعم ، خارج الصندوق في هذا النهج ، عندما يكون لدينا سجلات نصية ، هناك هفوة صغيرة: يمكننا تعيين طلب حسب النص ، على سبيل المثال الرسالة: المستخدمون. سيؤدي هذا إلى طباعة جميع السجلات التي تحتوي على سلسلة فرعية للمستخدمين. يمكنك استخدام العلامات النجمية ، ومعظم بطاقات البدل يونكس الأخرى. لكن يبدو أن هذا ليس كافيًا ، أريد أن أصعب الأمر حتى تتمكن من الإحماء في Nginx مبكرًا ، قدر الإمكان.
دعنا نتراجع قليلاً عن Elasticsearch قليلاً ونحاول القيام بذلك ليس باستخدام Elasticsearch ، ولكن باستخدام نهج مختلف. دعونا ننظر في السجلات الهيكلية. يحدث هذا عندما لا يكون كل إدخال من إدخالات السجل الخاص بك مجرد سطر نصي ، ولكنه كائن متسلسل بسمات يمكن لأي من أنظمة الجهات الخارجية إجراء تسلسل لها للحصول على كائن جاهز.
ما هي مزايا هذا؟ إنه تنسيق بيانات موحد. نعم ، يمكن أن يكون للكائنات سمات مختلفة ، ولكن يمكن لأي نظام خارجي قراءة JSON والحصول على نوع من الكائنات.
نوع من الكتابة. هذا يبسط التكامل مع الأنظمة الأخرى: لا حاجة لكتابة أجهزة إزالة التسلسل. ومجرد إزالة التسلسل نقطة أخرى. لا تحتاج إلى كتابة نصوص مبتذلة في التطبيق. مثال: "جاء المستخدم بأخصائي معرف كذا وكذا ، بأمر كذا وكذا". وكل هذا يحتاج إلى كتابته في كل مرة.
لقد أزعجتني. أريد أن أكتب: "وصل طلب". علاوة على ذلك: "فلان ، فلان ، فلان ، فلان ،" بسيط جدًا ، أسلوب تكنولوجيا المعلومات للغاية.
هيا لنذهب. دعنا نتفق: سنقوم بتسجيل الدخول بتنسيق JSON ، وهذا تنسيق بسيط. يتم دعم Elasticsearch على الفور ، filebeat ، والذي نقوم بترتيبه في تسلسل ومحاولة تقديمه. إنه ليس صعبًا جدًا. أولاً ، تقوم بإضافة ملف الإعدادات من مكتبة pythonjsonlogger إلى كتلة مُنسِّقات JSONFormatter ، حيث نقوم بتخزين التكوين. قد يكون هذا مكانًا مختلفًا في نظامك. ثم في سمة التنسيق تقوم بتمرير السمات التي تريد إضافتها إلى الكائن الخاص بك.
الكتلة أدناه هي كتلة التكوين التي تمت إضافتها إلى filebeat.yml. هنا خارج الصندوق ، توجد واجهة لنبضات الملف لتحليل سجلات JSON. رائع جدا. كل شيء. ليس عليك كتابة أي شيء آخر لهذا الغرض. والآن تبدو سجلاتك ككائنات.
ماذا حصلنا في Elasticsearch؟ في الواجهة ، ترى على الفور أن السجل الخاص بك قد تحول إلى كائن بسمات منفصلة ، يمكنك من خلالها البحث وإنشاء عوامل التصفية وإجراء استعلامات معقدة.
دعونا نلخص. الآن سجلاتنا لها هيكل. إنها سهلة الاستخدام ويمكن استخدامها لكتابة استعلامات ذكية. Elasticsearch تدرك هذه البنية منذ أن قامت بتحليل كل هذه السمات. وفي kibana ، وهي واجهة لـ Elasticsearch ، يمكنك تصفية مثل هذه السجلات باستخدام لغة استعلام متخصصة يوفرها Elasticsearch.
وهو أسهل من التجديف. لغة جريب معقدة ورائعة نوعًا ما. هناك الكثير للكتابة عنه. يمكن جعل العديد من الأشياء أسهل في الكيبانا. مع هذا تم تسويتها.
المشكلة 2. الفرامل
المشكلة التالية هي الفرامل. في بنية الخدمات المصغرة ، توجد مكابح دائمًا وفي كل مكان.
إليكم سياق صغير ، سأخبركم قصة. يأتي المدير ، الشخصية الرئيسية في مشروعنا ، مسرعًا إليّ ويقول: "مرحبًا ، المكتب يتباطأ! دانيا ، احفظ ، ساعد! "
لا نعرف أي شيء حتى الآن ، فنحن نصعد إلى سجلاتنا في Elasticsearch. لكن دعني أخبرك بما حدث بالفعل.
أضاف إيراست ميزة. في الكتب ، لا نعرض الآن معرّف المؤلف ، ولكن اسمه في الواجهة مباشرة. رائع جدا. لقد فعل ذلك بالكود التالي. قطعة صغيرة من التعليمات البرمجية ، لا شيء معقد. ما الخطأ الذي يمكن أن يحدث؟
بعيون مدربة ، يمكنك القول أنه لا يمكنك فعل ذلك باستخدام SQLAlchemy ، ومع إدارة ORM أخرى أيضًا. تحتاج إلى إجراء ذاكرة تخزين مؤقت مسبقة أو أي شيء آخر حتى لا تنتقل إلى قاعدة البيانات باستخدام استعلام فرعي صغير في حلقة. مشكلة غير سارة. يبدو أن مثل هذا الخطأ لا ينبغي السماح به على الإطلاق.
دعني أخبرك. كانت لدي خبرة: لقد عملنا مع Django ، وكان لدينا ذاكرة تخزين مؤقت مسبقة مخصصة تم تنفيذها في مشروعنا. كل شيء سار على ما يرام لسنوات عديدة. في مرحلة ما ، قررت أنا وإيراست: دعونا نواكب العصر ، ونحدث Django. بطبيعة الحال ، لا يعرف Django أي شيء عن ذاكرة التخزين المؤقت المخصصة لدينا وقد تغيرت الواجهة. سقط بريكاش بصمت. لم يتم اكتشاف هذا في الاختبار. نفس المشكلة ، كان الأمر أكثر صعوبة.
ما هي المشكلة؟ كيف يمكنني مساعدتك في حل المشكلة؟
دعنا نخبرك ما فعلته قبل أن أبدأ في حل مشكلة إيجاد الفرامل.
أول شيء أفعله هو الذهاب إلى Elasticsearch ، لدينا بالفعل ، إنه يساعد ، ليست هناك حاجة للتجول حول الخوادم. أذهب إلى السجلات ، أبحث عن سجلات الخزانة. أجد استفسارات طويلة. ألعبها على جهاز كمبيوتر محمول وأرى أن المكتب ليس هو الذي يتراجع. يبطئ الكتب.
واجهت سجلات الكتب ، وأجد استفسارات إشكالية - في الواقع ، لدينا بالفعل. أقوم بإعادة إنتاج الكتب بنفس الطريقة على جهاز كمبيوتر محمول. كود معقد للغاية - لا أفهم أي شيء. لقد بدأت في التصحيح. التوقيت صعب للغاية. لماذا ا؟ من الصعب تحديد هذا داخليًا في SQLAlchemy. أنا أكتب قطع الأشجار المخصصة للوقت ، وأقوم بترجمة وإصلاح المشكلة.
لقد آلمني. صعب وغير سار. أنا بكيت. أود أن تكون عملية العثور على مشكلة أسرع وأكثر ملاءمة.
دعونا نجعل مشاكلنا رسمية. من الصعب البحث في السجلات عما يتباطأ ، لأن سجلنا عبارة عن سجل للأحداث غير ذات الصلة. يتعين علينا كتابة مؤقتات مخصصة توضح لنا عدد كتل التعليمات البرمجية التي تم تنفيذها. علاوة على ذلك ، ليس من الواضح كيفية تسجيل توقيتات الأنظمة الخارجية: على سبيل المثال ، ORM أو مكتبات الطلبات. نحتاج إلى تضمين مؤقتاتنا بالداخل أو مع نوع من الغلاف ، لكننا لن نعرف سبب إبطائه من الداخل. معقد.
حل جيد وجدته هو Jaeger. هذا هو تنفيذ بروتوكول opentracing ، لذلك دعونا ننفذ التتبع.
ماذا يعطي جايجر؟ إنها واجهة سهلة الاستخدام مع استعلامات البحث يمكنك تصفية الاستعلامات الطويلة أو القيام بذلك عن طريق العلامات. تمثيل مرئي لتدفق الطلبات ، صورة جميلة جدًا ، سأعرضها بعد قليل.
تم تسجيل توقيت الخروج من منطقة الجزاء. ليس عليك فعل أي شيء معهم. إذا كنت بحاجة إلى التحقق من مقدار تشغيل الكتلة المخصصة ، فيمكنك لفها في عداد الوقت الذي يوفره Jaeger. مريح جدا.
دعونا نرى كيف كان من الممكن العثور على المشكلة في الواجهة وترجمتها هناك. نذهب إلى واجهة Jaeger. هكذا تبدو طلباتنا. يمكننا البحث عن طلبات حساب أو خدمة أخرى. نقوم على الفور بتصفية الاستعلامات الطويلة. نحن مهتمون بالأشجار الطويلة ، ومن الصعب جدًا العثور عليها في السجلات. نحصل على قائمتهم.
نقع في هذا الاستعلام ، ونرى قدرًا كبيرًا من استعلامات SQL الفرعية. يمكننا أن نرى بوضوح كيف تم تنفيذها في الوقت المناسب ، ما هي كتلة التعليمات البرمجية المسؤولة عن ماذا. رائع جدا. علاوة على ذلك ، في سياق مشكلتنا ، هذا ليس السجل بأكمله. هناك قطعة قماش كبيرة أخرى شريحتان أو ثلاث شرائح لأسفل. قمنا بتعريب المشكلة بسرعة كبيرة في Jaeger. بعد حل المشكلة ، ما الذي يمكن أن يساعدنا السياق الذي يوفره Jaeger؟
سجلات Jaeger ، على سبيل المثال ، استعلامات SQL: يمكنك معرفة الاستعلامات المكررة. سريع جدا ورائع.
لقد حللنا المشكلة ونرى على الفور في Jaeger أن كل شيء على ما يرام. نتحقق من نفس الاستعلام الذي لا يوجد لدينا الآن استعلامات فرعية. لماذا ا؟ لنفترض أننا تحققنا من نفس الطلب ، واكتشف التوقيت - ابحث في Elasticsearch عن المدة التي تم فيها تنفيذ الطلب. ثم سنرى الوقت. لكن هذا لا يضمن عدم وجود استعلامات فرعية. وهنا نراه ، رائع.
دعونا ننفذ جايجر. لا تحتاج إلى الكثير من التعليمات البرمجية. يمكنك إضافة التبعيات لـ opentracing ، لـ Flask. الآن حول ما رمز نقوم به.
أول جزء من الكود هو إعداد عميل Jaeger.
ثم أنشأنا التكامل مع Flask أو Django أو أي إطار عمل آخر به تكامل.
install_all_patches هو آخر سطر من التعليمات البرمجية والأكثر إثارة للاهتمام. نقوم بتصحيح معظم عمليات الدمج الخارجية من خلال التفاعل مع مكتبة الطلبات MySQL و Postgres. نحن نقوم بتصحيح كل هذا وهذا هو السبب في أننا في واجهة Jaeger نرى على الفور جميع الاستعلامات باستخدام SQL وأي من الخدمات التي ذهبت إليها الخدمة المطلوبة. رائع جدا. ولم يكن عليك أن تكتب كثيرًا. لقد كتبنا للتو install_all_patches. سحر!
ما الذي حصلنا عليه؟ الآن لا تحتاج إلى جمع الأحداث من السجلات. كما قلت ، السجلات أحداث متباينة. في Jaeger ، هذا حدث كبير ترى هيكله. يتيح لك Jaeger اكتشاف الاختناقات في تطبيقك. ما عليك سوى البحث عن استعلامات طويلة ويمكنك تحليل الخطأ الذي يحدث.
المشكلة 3. الأخطاء
المشكلة الأخيرة هي الأخطاء. نعم ، أنا ماكرة. لن أساعدك في التخلص من الأخطاء في التطبيق ، لكنني سأخبرك بما يمكنك فعله بعد ذلك.
سياق الكلام. يمكنك أن تقول: "دانيا ، نحن نسجل الأخطاء ، لدينا تنبيهات لخمسمائة ، قمنا بتكوينها. ماذا تريد؟ قمنا بتسجيل الدخول ، ونسجل الدخول وسنتولى التسجيل والتصحيح.
أنت لا تعرف أهمية الخطأ من السجلات. ما هي الأهمية؟ هنا لديك خطأ واحد رائع ، وخطأ الاتصال بقاعدة البيانات. القاعدة تراجعت للتو. أود أن أرى على الفور أن هذا الخطأ ليس مهمًا جدًا ، وإذا لم يكن هناك وقت ، فتجاهله ، ولكن أصلح الخطأ الأكثر أهمية.
معدل الخطأ هو سياق يمكن أن يساعدنا في تصحيحه. كيف تتعقب الأخطاء؟ دعنا نستمر ، لقد كان لدينا خطأ منذ شهر ، والآن ظهر مرة أخرى. أرغب في العثور على حل على الفور وتصحيحه أو مقارنة مظهره بأحد الإصدارات.
هذا مثال جيد. عندما رأيت التكامل مع Jaeger ، قمت بتغيير API الخاص بي قليلاً. لقد قمت بتغيير تنسيق استجابة التطبيق. حصلت على هذا الخطأ. لكن ليس من الواضح فيه سبب عدم وجود مفتاح ، والكثير في كائن الترتيب ، ولا يوجد شيء يمكن أن يساعدني. مثل ، انظر الخطأ هنا ، أعد إنتاجه وامسكه بنفسك.
دعونا ننفذ الحراسة. هذا هو أداة تعقب الأخطاء التي ستساعدنا في حل المشكلات المماثلة وإيجاد سياق الخطأ. خذ المكتبة القياسية التي يحتفظ بها مطورو الحراسة. في أربعة أسطر من التعليمات البرمجية ، نضيفها إلى تطبيقنا. كل شىء.
ماذا حصلنا في طريقنا للخروج؟ فيما يلي لوحة تحكم بها أخطاء يمكن تجميعها حسب المشروع ويمكنك متابعتها. يتم تجميع مجموعة كبيرة من سجلات الأخطاء في سجلات متشابهة. يتم توفير الإحصائيات عنها. ويمكنك أيضًا التعامل مع هذه الأخطاء باستخدام الواجهة.
لنلق نظرة على مثالنا. الوقوع في خطأ KeyError. نرى على الفور سياق الخطأ ، وما كان في كائن الترتيب ، وما لم يكن موجودًا. أرى على الفور عن طريق الخطأ أن تطبيق التسليم قد منحني بنية بيانات جديدة. الخزانة ببساطة ليست جاهزة لذلك.
ماذا يعطي الحارس بجانب ما ذكرته؟ لنضفي الطابع الرسمي.
هذا هو مخزن الأخطاء حيث يمكنك البحث عنها. هناك أدوات يدوية لهذا الغرض. هناك تجميع للأخطاء - حسب المشاريع ، من خلال التشابه. يوفر Sentry تكاملات مع أجهزة تعقب مختلفة. وهذا يعني أنه يمكنك مراقبة أخطائك والعمل معها. يمكنك فقط إضافة المهمة إلى سياقك وهذا كل شيء. هذا يساعد في التنمية.
إحصائيات الخطأ. مرة أخرى ، من السهل مقارنة ذلك مع طرح إصدار. سوف يساعدك الحارس في هذا. يمكن أن تساعدك الأحداث المماثلة التي حدثت بجوار الخطأ أيضًا في العثور على ما أدى إليه وفهمه.
دعونا نلخص. لقد كتبنا تطبيقًا بسيطًا ولكنه يلبي الاحتياجات. يساعدك على تطويره والحفاظ عليه في دورة حياته. ماذا فعلنا؟ لقد قمنا بتجميع السجلات في مستودع واحد. أعطانا هذا فرصة عدم البحث عنهم في أماكن مختلفة. بالإضافة إلى ذلك ، لدينا الآن بحث بالسجلات وميزات الجهات الخارجية ، وأدواتنا.
التتبع المتكامل. الآن يمكننا مراقبة تدفق البيانات بشكل مرئي في تطبيقنا.
وأضيفت أداة يدوية للتعامل مع الأخطاء. سيكونون في تطبيقنا ، بغض النظر عن مدى صعوبة المحاولة. لكننا سنصلحها بشكل أسرع وأفضل.
ماذا يمكنك أن تضيف؟ التطبيق نفسه جاهز ، يوجد رابط ، يمكنك أن ترى كيف يتم ذلك. يتم رفع جميع عمليات التكامل هناك. على سبيل المثال ، التكامل مع Elasticsearch أو التتبع. تعال وانظر.
الشيء الرائع الآخر الذي لم يكن لدي الوقت لتغطيته هو request_id. لا يختلف تقريبًا عن trace_id ، الذي يستخدم في عمليات التتبع. لكننا مسؤولون عن request_id ، فهذه هي الميزة الأكثر أهمية. يمكن للمدير أن يأتي إلينا على الفور مع معرف الطلبات ، ولسنا بحاجة للبحث عنه. سنبدأ على الفور في حل مشكلتنا. رائع جدا.
ولا تنسوا أن الأدوات التي قمنا بتنفيذها هي عبث. هذه هي القضايا التي تحتاج إلى معالجة لكل تطبيق. لا يمكنك تنفيذ جميع عمليات التكامل الخاصة بنا دون تفكير ، وجعل حياتك أسهل ، ثم التفكير فيما يجب القيام به مع تطبيق مثبط.
تحقق من ذلك. إذا لم يؤثر عليك ، رائع. لقد حصلت على الإيجابيات فقط ولا تحل مشاكل الفرامل. لا تنس هذا. شكرا لكم جميعا على الاستماع.