1. Giriş
Bu laboratuvarda, hata günlüklerini analiz ederek, sorunun temel nedenini belirleyerek ve nasıl düzeltileceğini bularak Cloud Functions dağıtımıyla ilgili bir sorunu gidermek için Google Cloud'daki yapay zeka destekli bir yardımcı olan Gemini'ı kullanacaksınız.
Yapacaklarınız...
- İlgili Google API'lerini etkinleştirme ve sağlanan koddan Cloud Function oluşturma dahil olmak üzere ortamı ayarlamak için Cloud Shell Terminal ve gcloud CLI'yı kullanacaksınız.
- Elde edilen bilgileri anlamak için günlük özetleri oluşturmak üzere Cloud Logging günlük özetleme özelliğini kullanırsınız.
- Sorun giderme ve sorunu çözme konusunda Gemini'dan yardım almak için Gemini ile sohbet edersiniz.
Öğrenecekleriniz...
- Google Cloud Gözlemlenebilirliği ile Gemini'ı kullanma ve sorun giderme
- Gemini'ın yardımıyla Cloud Functions günlüklerini bulma ve anlama
Gerekenler:
- Chrome web tarayıcısı
- Faturalandırmanın etkin olduğu bir Google Cloud projesi
- API'leri etkinleştirmenize ve kaynakları değiştirmenize olanak tanıyan proje erişim izinlerine sahip bir Google Hesabı
Bu laboratuvar, yeni başlayanlar da dahil olmak üzere her seviyeden DevOps ve platform mühendisleri ile yazılım geliştiricilere yöneliktir. Bu oturumda, Gemini'ın sorun giderme özellikleriyle ilgili uygulamalı deneyim kazanmaya odaklanacağız.
2. Kurulum
Bu bölümde, laboratuvarı kullanmaya başlamak için yapmanız gereken her şey açıklanmaktadır.
Ortamı yapılandırma
1. https://console.cloud.google.com adresini açarak Cloud Console'a giriş yapın.
2. Bu laboratuvarda çalışmayı planladığınız bir Google Cloud projesi seçin.

3. Console'da Cloud Functions sayfasını açın. Bunu, gezinme menüsünden (konsol penceresindeki sol üst simge ☰) Cloud Functions'ı seçerek yapabilirsiniz.

Alternatif olarak, konsolun arama alanında "cloud functions" ifadesini arayabilirsiniz:

İşlev listesinin üst kısmındaki İşlev Oluştur düğmesini tıklayın. 
Bu projede daha önce Cloud Functions kullanmadıysanız çalışmak için Google API'lerini etkinleştirmeniz istenir.

Devam etmek için ETKİNLEŞTİR'i tıklayın.
4. Yeni Cloud Functions işlevinin temel özelliklerini tanımlayın.
- Adı "
codelab-cf" olarak ayarlayın. - Kimliği doğrulanmayan çağrılara izin ver seçeneğini belirleyin.

Adımı tamamlamak için pencerenin sol alt kısmındaki İLERİ düğmesini tıklayın:

SONRAKİ'yi tıkladıktan sonra ek Google API'lerini etkinleştirmeniz istenebilir. 4. adımda olduğu gibi ETKİNLEŞTİR'i tıklayın.

Cloud Functions işlevinin çalışma zamanını ve kodunu ayarlama
Bu CodeLab'de programlama dili olarak Python kullanılır. Python'a aşina değilseniz endişelenmeyin. Bu CodeLab'i tamamlamak için Python bilgisine ihtiyacınız yoktur.
5. İşlevin çalışma zamanı olarak Python 3.11'i seçin.

Çalışma zamanının değiştirilmesinin, satır içi düzenleyicide gösterilen kaynak kodunu değiştirdiğini unutmayın.
6. Otomatik olarak oluşturulan hızlı başlangıç örneğini değiştirmek için aşağıdaki kodu satır içi düzenleyiciye kopyalayın.
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)
Bu kod, GET isteğindeki path özelliğini okur, paket adını almak için yolu ayrıştırır ve bu yolda depolanan nesnelerin listesini almak için Google Cloud Storage API'sini çağırır. İşlev (get_object_list), Flask nesnesi olan bir isteği giriş bağımsız değişkeni olarak kabul eder ve nesnelerin adlarını JSON dizisi olarak döndürür.
7. Satır içi düzenleyicide kalan dosyalar listesinden requirements.txt dosyasını seçin. Aşağıdaki kodu satır içi düzenleyiciye kopyalayarak mevcut bağımlılıklar listesini yenisiyle değiştirin.
google-cloud-storage
8. Cloud Function'ı dağıtmak için sol alttaki DEPLOY'u (Dağıt) tıklayın.

Dağıtım işleminin tamamlanması için birkaç dakika beklemeniz gerekebilir. Kurulum talimatlarını dikkatlice uyguladıysanız dağıtımın başarısız olarak bildirildiğini görmeyi bekleyebilirsiniz.
3. Sorunu bulma ve çözme
Bu bölümde, sorunu ve nasıl çözüleceğini belirlemek için günlük açıklamaları özelliğini ve diğer Gemini yardımlarını kullanacaksınız.
1. Dağıtım başarısız olur. Bu konuda sizi bilgilendiren bir hata mesajı, ek bilgiler ve dağıtım günlüklerini görme seçeneği gösterilir. Dağıtım günlüklerini görüntülemek için GÜNLÜKLERİ GÖSTER'i tıklayın.

Dağıtım günlüklerinin aynı tarayıcıda ayrı bir sekmede açılacağını UNUTMAYIN. Bu CodeLab'i tamamlamak için sekmeler arasında gezinmeniz gerekir.
GÜNLÜKLERİ GÖRÜNTÜLE'yi tıkladığınızda günlük satırlarını görmeyebileceğinizi veya yalnızca birkaç satır görebileceğinizi UNUTMAYIN. Böyle bir durumda, Sorgu bölmesindeki zaman aralığı seçiciyi kullanın ve Son 30 dakika'yı seçin.

2. Açılan sekmedeki günlükleri inceleyin. Günlük özetlerinin, istisnanın çağrı yığınının birden fazla satırı gibi göründüğüne dikkat edin. Bunun nedeni, Cloud Functions'ın stdout veya stderr'ye yazdırılan metni yakalaması ve her satırı ayrı bir günlük girişi olarak yazmasıdır. Diğer günlük satırları, çıkış hata koduyla ilgili bilgilerin yanı sıra Cloud Functions ve Cloud Run API'leri tarafından bildirilen ek bilgileri özetler.

Belirli bir günlük hakkında daha fazla bilgi edinmek için satırlardan herhangi birini tıklayabilirsiniz. Genişletilmiş günlüklerde, tıklayarak günlükle ilgili tüm bilgileri kopyalamanıza, tüm alanları genişleterek günlük girişinin tüm verilerini görüntülemenize ve Gemini'ı kullanarak günlük girişini açıklamanıza olanak tanıyan ek kullanıcı arayüzü öğeleri bulunur.
4. İstisna çağrı yığını çok bilgilendirici değil. İstisnanın yığın izleme (stack trace) günlüğünün sonunu bulmak için günlükleri inceleyin. Bu, "Container called exit(1)" yazan satırdır. Aşağıdaki günlük özeti şunları belirtir:
functions_framework.exceptions.MissingTargetException: File /workspace/main.py is expected to contain...
Bu durumun araştırılması için iyi bir aday gibi görünüyor. Günlük girişini genişletmek için bu satırı tıklayın. Ardından, seçilen günlükle ilgili ek bilgileri görmek için "Bu günlük girişini açıkla" düğmesini tıklayın.

Gemini bu projede daha önce kullanılmadıysa gerekli bir API'yi etkinleştirmeniz istenir. API'yi etkinleştirmeniz istenirse devam etmek için ETKİNLEŞTİR'i tıklayın.

Gemini'a istem girerken bazen hata alabileceğinizi UNUTMAYIN. Böyle bir durumda, yanıtı almak için istem işleminizi bir kez daha tekrarlayın. Örneğin, "Bu günlük girişini açıkla" düğmesini tekrar tıklayın.
5. Gemini tarafından sağlanan açıklamayı inceleyin. Verilen açıklama yeterli değilse veya net değilse aşağıdaki istemlerden birini kullanarak ya da kendi sorunuzu oluşturarak Gemini'dan daha fazla bilgi vermesini isteyin.
Bu günlük hakkında daha fazla bilgi verebilir misiniz?
Hata hakkında daha fazla bilgi verebilir misiniz?
6. Ardından, Gemini'dan sorunu çözmek için öneriler isteyin. Örneğin, Gemini'a şunları sorabilirsiniz:
Bu sorunu nasıl çözebilirim?
Bu hatayı çözmek için bir çözüm öner
Bu hatayı nasıl düzeltebileceğimi öner
Gemini'ın yanıtı, mevcut bağlama, isteminizin kelimelerine ve biçimine göre değişebilir. Gemini'ın, Cloud Functions işlevinin kaynak kodunda hello_http adlı bir işlev olmasını önermesi beklenir.
7. Şu anda Cloud Functions günlüklerini gösteren sekmeyi görüyorsunuz. Hatayı içeren Cloud Function dağıtım sayfasını gösteren önceki sekmeyi seçin ve DÜZENLE'yi tıklayın.

8. Kimlik doğrulamanın hâlâ Kimliği doğrulanmayan çağrılara izin ver olarak ayarlandığını onaylayın ve gerekirse seçimi güncelleyin.

9. Satır içi düzenleyiciyi görmek için en alttaki SONRAKİ'yi tıklayın. Gemini'ın önerisini uygulayarak işlev adını get_order_list yerine hello_http olarak değiştirin.
Düzenlemeyi bitirdikten sonra DEPLOY'u (Dağıt) tıklayın.
Dağıtım işleminin tamamlanması için birkaç dakika beklemeniz gerekebilir. Dağıtımın başarıyla tamamlandığını ve hata mesajı görünmediğini onaylayın.
Dağıtım işlemi tamamlanana kadar Console'da son hata mesajının gösterilmeye devam edebileceğini UNUTMAYIN.
10. curl kullanarak aşağıdaki HTTPS isteğini göndererek Cloud Functions işlevinin çalışır durumda olduğunu kontrol edin. Cloud Shell'i kullanabilir veya curl ve gcloud KSA'nın yüklü olduğu herhangi bir terminalden yapabilirsiniz.
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)"
Bu komutu bir terminalden çalıştırmak için gcloud CLI ile kimlik doğrulamanız ve proje kimliğinizin değerini GOOGLE_CLOUD_PROJECT ortam değişkenine ayarlamanız gerektiğini UNUTMAYIN.
Bonus
Python çalışma zamanı seçildiğinde hello_http işlevinin adı, HTTP tetiklemeli Cloud Functions için varsayılan giriş noktası olarak tanımlandı. Alternatif çözüm olarak, kaynak kodda işlevin adını get_order_list olarak bırakabilir ve satır içi düzenleyicinin üzerinde, çalışma zamanı alanının sağında bulunan Cloud Functions işlevinin giriş noktası alanını güncelleyebilirsiniz:

Giriş noktasını hello_http yerine get_order_list olarak değiştirmek dağıtımla ilgili sorunu çözecektir.
4. Temizleme
Temizleme işlemi için projeyi kapatabilir veya Cloud Functions örneğini silebilirsiniz. Cloud Functions işlevlerini Console'u kullanarak veya aşağıdaki gibi CLI komutuyla silebilirsiniz:
gcloud functions delete codelab-cf --region=us-central1
5. Tebrikler!
Tebrikler. Gemini'ı kullanarak uygulamanızdaki sorunu başarıyla giderdiniz ve çözdünüz. Artık Gemini'ın günlükleri anlamanıza ve Google Cloud ile ilgili sorularınıza yanıt almanıza nasıl yardımcı olabileceğini biliyorsunuz.