عیب یابی با Gemini CodeLab

۱. مقدمه

در این آزمایشگاه، شما از Gemini ، یک همکار مبتنی بر هوش مصنوعی در Google Cloud، برای عیب‌یابی مشکل در استقرار Cloud Function با تجزیه و تحلیل گزارش‌های خطا، شناسایی علت اصلی مشکل و یافتن نحوه رفع آن استفاده خواهید کرد.

کاری که انجام خواهی داد...

  • شما از ترمینال Cloud Shell و gcloud CLI برای راه‌اندازی محیط، از جمله فعال کردن APIهای مربوطه گوگل و ایجاد یک تابع ابری از کد ارائه شده، استفاده خواهید کرد.
  • شما از خلاصه‌سازی لاگ‌های Cloud Logging برای تولید خلاصه لاگ‌ها به منظور درک اطلاعات ثبت‌شده استفاده خواهید کرد.
  • شما با Gemini چت خواهید کرد تا از Gemini در عیب‌یابی و حل مشکل کمک بگیرید.

آنچه یاد خواهید گرفت...

  • نحوه استفاده از Gemini با Google Cloud Observability و عیب‌یابی مشکلات.
  • چگونه با کمک Gemini، لاگ‌های Cloud Function را پیدا و درک کنیم.

آنچه نیاز خواهید داشت...

  • مرورگر وب کروم
  • یک پروژه گوگل کلود با قابلیت پرداخت صورتحساب
  • یک حساب گوگل با مجوزهای دسترسی به پروژه که به شما امکان می‌دهد APIها را فعال کرده و منابع را دستکاری کنید

این آزمایشگاه برای مهندسان DevOps و پلتفرم و توسعه‌دهندگان نرم‌افزار در تمام سطوح، از جمله مبتدیان، در نظر گرفته شده است. تمرکز ما بر کسب تجربه عملی با قابلیت‌های Gemini در عیب‌یابی خواهد بود.

۲. راه‌اندازی

این بخش شامل تمام مواردی است که برای شروع کار با این آزمایشگاه باید انجام دهید.

پیکربندی محیط

۱. با باز کردن https://console.cloud.google.com وارد Cloud Console شوید.

۲. یک پروژه گوگل کلود که قصد دارید برای این آزمایشگاه با آن کار کنید را انتخاب کنید.

۲۲۱۷۰۴۵۹a۴f۳ba۵۹.png

۳. صفحه توابع ابری (Cloud Functions) را در کنسول باز کنید. می‌توانید این کار را با انتخاب توابع ابری (Cloud Functions) از منوی پیمایش (آیکون بالا سمت چپ ☰ در پنجره کنسول) انجام دهید.

9d27c844c16ad3e4.png

روش دیگر، می‌توانید عبارت «توابع ابری» را در قسمت جستجوی کنسول جستجو کنید:

35f23e52875b26cd.png

روی دکمه‌ی «ایجاد تابع» در بالای فهرست توابع کلیک کنید. ۳۴b5e7e36f4e48e9.png

اگر قبلاً از توابع ابری در این پروژه استفاده نکرده‌اید، برای کار کردن از شما خواسته می‌شود که APIهای گوگل را فعال کنید.

5b7978521d6f56f7.png

برای ادامه روی فعال کردن (ENABLE) کلیک کنید.

۴. ویژگی‌های اساسی تابع ابری جدید را تعریف کنید.

  • نام را روی « codelab-cf » تنظیم کنید.
  • گزینه‌ی «مجاز کردن درخواست‌های غیرمجاز» را انتخاب کنید.

6a2aaf9bedd161d9.png

برای تکمیل مرحله، روی دکمه NEXT در قسمت پایین سمت چپ پنجره کلیک کنید:

f4e76470dbdf6854.png

پس از کلیک روی NEXT، ممکن است از شما خواسته شود که API(های) اضافی گوگل را فعال کنید. مانند مرحله ۴، روی ENABLE کلیک کنید.

۱ad7bf15c07eda49.png

زمان اجرا و کد تابع ابری را تنظیم کنید

این CodeLab از پایتون به عنوان زبان برنامه‌نویسی استفاده می‌کند. اگر با پایتون آشنا نیستید نگران نباشید. برای تکمیل این CodeLab نیازی به دانش پایتون نخواهید داشت.

۵. پایتون ۳.۱۱ را به عنوان زمان اجرای تابع انتخاب کنید.

9a3cd8bf272b4d02.png

توجه داشته باشید که تغییر زمان اجرا، کد منبع نمایش داده شده در ویرایشگر درون خطی را تغییر می‌دهد.

۶. کد زیر را در ویرایشگر درون‌خطی کپی کنید تا مثال شروع سریع تولید خودکار را تغییر دهید.

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 می‌خواند، مسیر را برای دریافت نام سطل تجزیه می‌کند و API ذخیره‌سازی ابری گوگل را برای دریافت لیستی از اشیاء ذخیره شده در این مسیر فراخوانی می‌کند. تابع ( get_object_list ) درخواستی را که یک شیء Flask است به عنوان آرگومان ورودی می‌پذیرد و نام اشیاء را به عنوان یک آرایه JSON برمی‌گرداند.

۷. فایل requirements.txt را از لیست فایل‌های باقی‌مانده در ویرایشگر درون‌خطی انتخاب کنید. با کپی کردن کد زیر در ویرایشگر درون‌خطی، لیست وابستگی‌های فعلی را با لیست جدید جایگزین کنید.

google-cloud-storage

۸. برای استقرار عملکرد ابری، روی DEPLOY در پایین سمت چپ کلیک کنید.

17c4828702a32cd9.png

ممکن است لازم باشد چند دقیقه صبر کنید تا فرآیند استقرار کامل شود. اگر دستورالعمل‌های راه‌اندازی را به دقت دنبال کرده باشید، باید انتظار داشته باشید که گزارش استقرار به عنوان ناموفق گزارش شود.

۳. یافتن و حل مشکل

در این بخش، شما از ویژگی توضیحات گزارش و سایر کمک‌های Gemini برای شناسایی مشکل و نحوه حل آن استفاده خواهید کرد.

۱. استقرار با شکست مواجه می‌شود. شما باید یک پیام خطا را مشاهده کنید که این موضوع را به همراه اطلاعات اضافی و گزینه‌ای برای مشاهده گزارش‌های استقرار به شما اطلاع می‌دهد. برای مشاهده گزارش‌های استقرار، روی VIEW LOGS کلیک کنید.

bc62db6ef3b35420.png

توجه داشته باشید که گزارش‌های استقرار در یک تب جداگانه در همان مرورگر باز می‌شوند. برای تکمیل این CodeLab باید بین تب‌ها حرکت کنید.

توجه داشته باشید که ممکن است هنگام کلیک روی VIEW LOGS، خطوط گزارش را نبینید یا فقط چند خط را ببینید. در چنین حالتی، از انتخابگر محدوده زمانی در پنل پرس و جو از Log explorer استفاده کنید و Last 30 minutes را انتخاب کنید.

e24856920201ebf8.png

۲. گزارش‌ها را در برگه باز شده بررسی کنید. توجه داشته باشید که خلاصه‌های گزارش مانند چندین خط از callstack مربوط به استثنا به نظر می‌رسند. به این دلیل است که Cloud Function متن چاپ شده در stdout یا stderr را ضبط می‌کند و هر خط را به عنوان یک ورودی گزارش جداگانه می‌نویسد. سایر خطوط گزارش، اطلاعات مربوط به کد خطای خروج و همچنین اطلاعات اضافی گزارش شده توسط Cloud Functions و Cloud Run APIs را خلاصه می‌کنند.

b49e41594173b57c.png

شما می‌توانید روی هر یک از خطوط کلیک کنید تا اطلاعات بیشتری در مورد یک لاگ خاص مشاهده کنید. لاگ‌های باز شده دارای عناصر رابط کاربری اضافی هستند که با کلیک روی آنها می‌توانید تمام اطلاعات مربوط به لاگ را کپی کنید، تمام فیلدها را باز کنید تا تمام داده‌های ورودی لاگ نمایش داده شود و ورودی لاگ را با استفاده از Gemini توضیح دهید.

۴. پشته فراخوانی استثنا اطلاعات زیادی ارائه نمی‌دهد. برای یافتن انتهای گزارش ردیابی پشته استثنا، به لاگ‌ها نگاه کنید. این خط می‌گوید " Container called exit(1) ". خلاصه لاگ زیر می‌گوید:

functions_framework.exceptions.MissingTargetException: File /workspace/main.py is expected to contain...

به نظر می‌رسد گزینه‌ی خوبی برای بررسی باشد. برای باز کردن ورودی لاگ، روی این خط کلیک کنید. سپس برای مشاهده‌ی اطلاعات بیشتر در مورد لاگ انتخاب شده، روی دکمه‌ی « توضیح این ورودی لاگ » کلیک کنید.

b815de46d1b4597c.png

اگر قبلاً از Gemini در این پروژه استفاده نشده باشد، از شما خواسته می‌شود که یک API مورد نیاز را فعال کنید. اگر از شما خواسته شد که API را فعال کنید، برای ادامه روی ENABLE کلیک کنید.

7ca90e087a2e99d1.png

توجه داشته باشید که گاهی اوقات ممکن است هنگام درخواست Gemini با خطایی مواجه شوید. در چنین رویدادی، عملیات درخواست خود را یک بار دیگر تکرار کنید تا پاسخ را دریافت کنید. برای مثال، دوباره روی دکمه « توضیح این ورودی گزارش » کلیک کنید.

۵. توضیحات ارائه شده توسط Gemini را مرور کنید. اگر توضیحات ارائه شده کافی یا نامفهوم است، با استفاده از یکی از سوالات زیر یا طرح سوال خودتان، Gemini را ترغیب کنید تا اطلاعات بیشتری ارائه دهد.

میشه اطلاعات بیشتری در مورد این لاگ بدید؟
میشه اطلاعات بیشتری در مورد خطا بدید؟

۶. سپس از جوزا بخواهید برای حل مشکل پیشنهادهایی ارائه دهد. برای مثال از جوزا بپرسید

چگونه این مشکل را حل کنیم؟
برای رفع این خطا راه حلی پیشنهاد دهید
پیشنهاد بدید چطور میتونم این خطا رو برطرف کنم

پاسخ Gemini ممکن است بسته به متن فعلی و همچنین متن و قالب درخواست شما متفاوت باشد. انتظار می‌رود که Gemini توصیه کند که مطمئن شوید کد منبع تابع ابری دارای تابعی با نام hello_http است.

۷. در حال حاضر تبی را مشاهده می‌کنید که گزارش‌های توابع ابری را به شما نشان می‌دهد. تب قبلی که صفحه استقرار توابع ابری را به همراه خطا نشان می‌دهد، انتخاب کنید و روی ویرایش کلیک کنید.

c3d9b207214a2240.png

۸. تأیید کنید که احراز هویت هنوز روی «مجاز کردن فراخوانی‌های احراز هویت نشده» تنظیم شده است و در صورت لزوم، انتخاب را به‌روزرسانی کنید.

6a2aaf9bedd161d9.png

۹. برای دیدن ویرایشگر درون‌خطی، روی NEXT در پایین کلیک کنید. توصیه Gemini را دنبال کنید و نام تابع را از get_order_list به hello_http تغییر دهید.

پس از اتمام ویرایش، روی DEPLOY کلیک کنید.

ممکن است لازم باشد چند دقیقه صبر کنید تا فرآیند استقرار کامل شود. تأیید کنید که استقرار با موفقیت انجام می‌شود و هیچ پیام خطایی ظاهر نمی‌شود.

توجه داشته باشید که کنسول ممکن است تا زمان تکمیل فرآیند استقرار، آخرین پیام خطا را به شما نشان دهد.

۱۰. با ارسال درخواست HTTPS زیر با استفاده از curl ، بررسی کنید که تابع Cloud عملیاتی باشد. می‌توانید از Cloud Shell استفاده کنید یا این کار را از هر ترمینالی که curl و gcloud CLI روی آن نصب شده است، انجام دهید. دستور زیر را از ترمینال 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)"

توجه داشته باشید که برای اجرای این دستور از طریق ترمینال، باید با استفاده از gcloud CLI احراز هویت کنید و مقدار شناسه پروژه خود را روی متغیر محیطی GOOGLE_CLOUD_PROJECT تنظیم کنید.

پاداش

نام تابع hello_http به عنوان نقطه ورود پیش‌فرض برای تابع ابری فعال‌شده توسط HTTP هنگام انتخاب زمان اجرای پایتون تعریف شده است. راه‌حل جایگزین می‌تواند این باشد که get_order_list به عنوان نام تابع در کد منبع نگه دارید و فیلد نقطه ورود تابع ابری را که در بالای ویرایشگر درون‌خطی و در سمت راست فیلد زمان اجرا قرار دارد، به‌روزرسانی کنید:

9a3cd8bf272b4d02.png

تغییر نقطه ورود از hello_http به get_order_list مشکل استقرار را حل خواهد کرد.

۴. پاکسازی

برای پاکسازی می‌توانید پروژه را خاموش کنید یا نمونه تابع ابری را حذف کنید. می‌توانید توابع ابری را با استفاده از کنسول یا با دستور CLI مانند زیر حذف کنید:

gcloud functions delete codelab-cf --region=us-central1

۵. تبریک می‌گویم!

تبریک - شما با موفقیت از Gemini برای عیب‌یابی و حل مشکل برنامه خود استفاده کردید و اکنون می‌دانید که چگونه می‌تواند در درک گزارش‌ها و دریافت پاسخ به سوالات مربوط به Google Cloud به شما کمک کند.

اسناد مرجع ...