1. مقدمة
في هذا الدرس التطبيقي، ستستخدم Gemini، وهو أداة تعاون مستندة إلى الذكاء الاصطناعي في Google Cloud، لتحديد مشكلة في نشر Cloud Function وحلّها من خلال تحليل سجلّات الأخطاء وتحديد السبب الأساسي للمشكلة ومعرفة كيفية حلّها.
الإجراءات التي ستتّخذها...
- ستستخدم "وحدة طرفية Cloud Shell" وgcloud CLI لإعداد البيئة، بما في ذلك تفعيل واجهات Google APIs ذات الصلة وإنشاء "وظيفة Cloud" من الرمز البرمجي المقدَّم.
- ستستخدم ميزة تلخيص السجلات في Cloud Logging لإنشاء ملخّصات السجلات من أجل فهم المعلومات التي تم تسجيلها.
- ستتحدّث مع Gemini للحصول على مساعدته في تحديد المشكلة وحلّها.
ما ستتعلمه...
- كيفية استخدام Gemini مع Google Cloud Observability وتحديد المشاكل وحلّها
- كيفية العثور على سجلات Cloud Functions وفهمها بمساعدة Gemini
المتطلبات...
- متصفّح الويب Chrome
- مشروع على السحابة الإلكترونية من Google Cloud تم تفعيل الفوترة فيه
- حساب Google لديه أذونات وصول إلى المشروع تتيح لك تفعيل واجهات برمجة التطبيقات ومعالجة الموارد
هذا الدرس التطبيقي موجّه إلى مهندسي DevOps والمنصات ومطوّري البرامج من جميع المستويات، بما في ذلك المبتدئين. سنركّز على اكتساب خبرة عملية في استخدام إمكانات Gemini لتحديد المشاكل وحلّها.
2. الإعداد
يغطّي هذا القسم كل ما عليك فعله لبدء هذا الدرس التطبيقي.
ضبط البيئة
1. سجِّل الدخول إلى Cloud Console من خلال فتح https://console.cloud.google.com.
2. اختَر مشروعًا على السحابة الإلكترونية من Google تخطّط للعمل عليه في هذا المختبر.

3. افتح صفحة Cloud Functions في Console. يمكنك إجراء ذلك من خلال اختيار Cloud Functions من قائمة التنقّل (الرمز ☰ في أعلى يمين نافذة "وحدة التحكّم").

بدلاً من ذلك، يمكنك البحث عن "وظائف السحابة الإلكترونية" في مساحة البحث بوحدة التحكّم:

انقر على زر "إنشاء دالة" في أعلى قائمة الدوال 
إذا لم يسبق لك استخدام Cloud Functions في هذا المشروع، سيُطلب منك تفعيل واجهات Google APIs لكي تتمكّن من استخدامها.

انقر على "تفعيل" للمتابعة.
4. حدِّد الخصائص الأساسية لـ Cloud Function الجديدة.
- اضبط الاسم على "
codelab-cf" - اختَر الخيار السماح بعمليات استدعاء غير مصادَق عليها.

لإكمال الخطوة، انقر على الزر "التالي" في أسفل يسار النافذة:

بعد النقر على "التالي"، قد يُطلب منك تفعيل واجهات برمجة تطبيقات إضافية من Google. كما في الخطوة 4، انقر على "تفعيل".

إعداد وقت التشغيل ورمز Cloud Function
يستخدم CodeLab هذا لغة Python كلغة برمجة. لا تقلق إذا لم تكن معتادًا على لغة Python. لإكمال هذا الدرس التطبيقي، لن تحتاج إلى معرفة بلغة Python.
5. اختَر Python 3.11 كوقت تشغيل الدالة

يُرجى العِلم أنّ تغيير وقت التشغيل يؤدي إلى تغيير رمز المصدر المعروض في "أداة التعديل المضمّنة".
6. انسخ الرمز أدناه إلى "أداة التعديل المضمّنة" لتعديل مثال التشغيل السريع الذي يتم إنشاؤه تلقائيًا.
from google.cloud import storage
import json
import re
client = storage.Client()
def get_object_list(request):
if request.args and 'path' in request.args:
path = request.args['path']
else:
return '{}'
parsed = re.search('gs:\/\/([a-zA-Z0-9_-]{3,63})\/([-a-zA-Z0-9_\+.\/]*)', path)
bucket, prefix = parsed.group(1), parsed.group(2)
blobs = client.list_blobs(bucket, prefix=prefix, delimiter='/')
objects = []
if (blobs):
for blob in blobs:
objects.append(blob.name)
return json.dumps(objects)
يقرأ هذا الرمز السمة path من طلب استرداد بيانات باستخدام GET، ويحلّل المسار لاختيار اسم الحزمة، ويطلب من Google Cloud Storage API الحصول على قائمة بالعناصر المخزّنة في هذا المسار. تقبل الدالة (get_object_list) طلبًا وهو عنصر Flask كمعلَمة إدخال وتعرض أسماء العناصر كمصفوفة JSON.
7. اختَر ملف requirements.txt من قائمة الملفات المتبقية في "المحرّر المضمّن". استبدِل قائمة العناصر التابعة الحالية بالقائمة الجديدة عن طريق نسخ الرمز أدناه ولصقه في "المحرّر المضمّن".
google-cloud-storage
8. لنشر Cloud Function، انقر على DEPLOY في أسفل يمين الصفحة.

قد تحتاج إلى الانتظار بضع دقائق إلى حين اكتمال عملية النشر. إذا اتّبعت تعليمات الإعداد بدقة، من المفترض أن يظهر لك أنّ عملية النشر قد تعذّر إجراؤها.
3- العثور على المشكلة وحلّها
في هذا القسم، ستستخدم ميزة "شرح السجلّ" وميزات أخرى من Gemini لتحديد المشكلة وطريقة حلّها.
1. يتعذّر النشر. من المفترض أن تظهر لك رسالة خطأ تُعلمك بذلك مع معلومات إضافية وخيار للاطّلاع على سجلّات النشر. انقر على "عرض السجلات" لعرض سجلات عملية النشر.

يُرجى العِلم أنّه سيتم فتح سجلّات النشر في علامة تبويب منفصلة في المتصفّح نفسه. عليك التنقّل بين علامات التبويب لإكمال CodeLab هذا.
ملاحظة: قد لا تظهر لك أسطر السجل عند النقر على "عرض السجلات" أو قد يظهر لك سطران فقط. في حال حدوث ذلك، استخدِم أداة اختيار النطاق الزمني في لوحة طلب البحث في "مستكشف السجلّ" واختَر آخر 30 دقيقة.

2. راجِع السجلات في علامة التبويب المفتوحة. يُرجى الانتباه إلى أنّ ملخّصات السجلّ تبدو وكأنّها أسطر متعدّدة من سلسلة استدعاء الاستثناء. والسبب هو أنّ Cloud Function تسجّل النص المطبوع في stdout أو stderr وتكتب كل سطر كإدخال في السجلّ منفصل. تُلخّص أسطر السجلّ الأخرى معلومات حول رمز خطأ الخروج بالإضافة إلى معلومات إضافية يتم إعداد تقارير عنها من خلال واجهات برمجة التطبيقات Cloud Functions وCloud Run.

يمكنك النقر على أي من الأسطر للاطّلاع على مزيد من المعلومات حول سجلّ معيّن. تحتوي السجلات الموسّعة على عناصر إضافية في واجهة المستخدم، وعند النقر عليها، يمكنك نسخ جميع المعلومات المتعلّقة بالسجلّ، وتوسيع جميع الحقول لعرض جميع بيانات إدخال في السجلّ، وشرح إدخال في السجلّ باستخدام Gemini.
4. إنّ سلسلة استدعاء الاستثناء غير مفيدة جدًا. ابحث في السجلّات للعثور على نهاية سجلّ تتبُّع تسلسل استدعاء الدوال البرمجية الخاص بالاستثناء. وهو السطر الذي يتضمّن "Container called exit(1)". يوضّح ملخّص السجلّ التالي ما يلي:
functions_framework.exceptions.MissingTargetException: File /workspace/main.py is expected to contain...
يبدو أنّ هذا الطلب يستحق التحقيق. انقر على هذا السطر لتوسيع إدخال في السجلّ. بعد ذلك، انقر على الزر شرح إدخال في السجلّ هذا للاطّلاع على معلومات إضافية حول السجلّ المحدّد.

إذا لم يسبق لك استخدام Gemini في هذا المشروع، سيُطلب منك تفعيل واجهة برمجة تطبيقات مطلوبة. إذا طُلب منك تفعيل واجهة برمجة التطبيقات، انقر على "تفعيل" للمتابعة.

يُرجى العِلم أنّه قد يظهر لك خطأ أحيانًا عند إدخال طلب إلى Gemini. في حال حدوث ذلك، كرِّر عملية الطلب مرة أخرى للحصول على الرد. على سبيل المثال، انقر على الزر "شرح إدخال في السجلّ هذا" مرة أخرى.
5. مراجعة التفسير المقدَّم من Gemini إذا كان التفسير المقدَّم غير كافٍ أو غير واضح، اطلب من Gemini تقديم المزيد من المعلومات باستخدام أحد الطلبات التالية أو صياغة سؤالك الخاص
هل يمكنك تقديم المزيد من المعلومات حول هذا السجلّ؟
هل يمكنك تقديم المزيد من المعلومات حول الخطأ؟
6. بعد ذلك، اطلب من Gemini تقديم اقتراحات لحلّ المشكلة. على سبيل المثال، يمكنك أن تطلب من Gemini ما يلي:
كيف يمكن حلّ هذه المشكلة؟
اقترح حلاً لحلّ هذا الخطأ
اقترح طريقة لحلّ هذا الخطأ
قد يختلف ردّ Gemini حسب السياق الحالي وصيغة طلبك وتنسيقه. من المتوقّع أن يقترح Gemini التأكّد من أنّ رمز المصدر الخاص بـ "دالة السحابة الإلكترونية" يتضمّن دالة بالاسم hello_http.
7. تظهر لك حاليًا علامة التبويب التي تعرض سجلّات Cloud Functions. اختَر علامة التبويب السابقة التي تعرض صفحة نشر Cloud Function التي تتضمّن الخطأ، ثم انقر على "تعديل".

8. تأكَّد من أنّ المصادقة لا تزال مضبوطة على السماح باستدعاءات غير مصادَق عليها وعدِّل الاختيار إذا لزم الأمر.

9. انقر على "التالي" في أسفل الصفحة للاطّلاع على "المحرّر المضمّن". اتّبِع اقتراح Gemini وغيِّر اسم الدالة من get_order_list إلى hello_http.
بعد الانتهاء من التعديل، انقر على "نشر".
قد تحتاج إلى الانتظار بضع دقائق إلى حين اكتمال عملية النشر. تأكَّد من اكتمال عملية النشر بنجاح وعدم ظهور أي رسائل خطأ.
يُرجى العِلم أنّ Console قد يستمر في عرض رسالة الخطأ الأخيرة إلى أن تكتمل عملية النشر.
10. تأكَّد من أنّ Cloud Function تعمل من خلال إرسال طلب HTTPS التالي باستخدام curl. يمكنك استخدام Cloud Shell أو تنفيذ ذلك من أي وحدة طرفية مثبَّت عليها واجهة سطر الأوامر curl وgcloud من خلال تنفيذ الأمر التالي من وحدة Cloud Shell الطرفية.
curl -m 70 -X GET \
https://us-central1-${GOOGLE_CLOUD_PROJECT}.cloudfunctions.net/\
codelab-cf?path=gs://cloud-samples-data/generative-ai/image/ \
-H "Authorization: bearer $(gcloud auth print-identity-token)"
يُرجى العِلم أنّه لتنفيذ هذا الأمر من نافذة طرفية، عليك إثبات ملكية حسابك باستخدام "واجهة سطر الأوامر في Google Cloud" وتعيين قيمة رقم تعريف مشروعك إلى متغيّر البيئة GOOGLE_CLOUD_PROJECT.
مكافأة
تم تحديد اسم الدالة hello_http كنقطة دخول تلقائية لدالة Cloud Function التي يتم تشغيلها بواسطة HTTP عند اختيار وقت تشغيل Python. يمكنك بدلاً من ذلك إبقاء get_order_list كاسم للدالة في رمز المصدر وتعديل حقل نقطة الدخول في "دالة Cloud" الذي يظهر أعلى "المحرّر المضمّن" على يسار حقل "وقت التشغيل":

سيؤدي تغيير نقطة الدخول من hello_http إلى get_order_list إلى حلّ مشكلة النشر.
4. تنظيف
لإجراء عملية تنظيف، يمكنك إما إيقاف المشروع أو حذف مثيل Cloud Functions. يمكنك حذف دوال Cloud Functions باستخدام Console أو باستخدام أمر واجهة سطر الأوامر كما هو موضّح أدناه:
gcloud functions delete codelab-cf --region=us-central1
5- تهانينا!
تهانينا، لقد استخدمت Gemini بنجاح لتحديد المشاكل في تطبيقك وحلّها، وأصبحت الآن تعرف كيف يمكنه المساعدة في فهم السجلّات والحصول على إجابات عن الأسئلة المتعلقة بخدمة Google Cloud.