1. Giriş
Son güncelleme: 21 Haziran 2023
Kullanılabilirlik için günlük tabanlı hatalarla ilgili uyarılar
Günlük tabanlı uyarılar, günlüklerdeki belirli etkinlikleri veya kalıpları izleyerek bir uygulamanın kullanılabilirliğini belirlemek için kullanılabilir. Kesintiler veya kullanıcıya yönelik diğer sorunlar hakkında uyarılar alarak kullanıcılarınız ve müşterileriniz üzerindeki etkiyi en aza indirmek için gerekli adımları atabilirsiniz.
Çalışma denetimleri, kullanılabilirlik hakkında genel bir anlık görüntü sunsa da daha spesifik türlerdeki kullanılamama durumlarının göstergeleri olarak günlüklerden elde edilen hata mesajlarını kullanmak ve kullanıcıların ne kadarının sorun yaşadığını anlamak daha doğru olabilir.
Hatalar; kullanıcı hatalarından sistem bakımı, yükseltme ve hatta sistem dışı faktörlere (ör. kötü hava koşulları) kadar birçok nedenden kaynaklanabilir. Uyarılarla ilgili önemli nokta, olası tüm nedenleri tahmin etmeye çalışmak yerine sorun gidermeye başlamak için kullanılabilecek birkaç temel belirti seçmektir.
Uyarı Bildirim Kanalı Olarak Pub/Sub Konuları
Pub/Sub konusu, bir Pub/Sub aboneliğine uyarı göndermek için Google Cloud Monitoring bildirim kanalı olarak kullanılabilir. Bu sayede Cloud Monitoring uyarılarınızı üçüncü taraf bildirim hizmetleri de dahil olmak üzere diğer sistemlerle entegre edebilirsiniz.
Pub/Sub konusunu bildirim kanalı olarak kullanmak için önce bir Pub/Sub konusu ve Pub/Sub aboneliği oluşturmanız gerekir. Ardından, hedef olarak Pub/Sub konusunu kullanan bir Cloud Monitoring bildirim kanalı oluşturmanız gerekir.
Bir uyarı tetiklendiğinde Cloud Monitoring, Pub/Sub konusuna bir mesaj gönderir. Pub/Sub aboneliğinin abonesi daha sonra mesajı işleyebilir ve uygun işlemi yapabilir.
Ne oluşturacaksınız?
Bu codelab'de bir uygulama dağıtacak, Pub/Sub konusu oluşturacak ve uygulamanın belirli bir bölümündeki hataları kontrol eden ve Pub/Sub konusunu bildirim kanalı olarak kullanan bir günlük tabanlı uyarı oluşturacaksınız.
Neler öğreneceksiniz?
- Pub/Sub konusu oluşturma
- Günlük tabanlı uyarı oluşturma
Bu codelab, hatalar için uyarı oluşturmaya odaklanmaktadır. Alakalı olmayan kavramlar ve uygulama kodu işaretlenmiştir ve yalnızca kopyalayıp yapıştırmanız için kullanımınıza sunulmuştur.
Gerekenler
- Aşağıdaki izinlere sahip bir Google Cloud hesabı:
- Cloud Run uygulamalarını dağıtma
- Pub/Sub konuları oluşturma
- Uyarı oluşturma
2. Hazırlanma
Google Cloud projesi seçme veya oluşturma
Mevcut bir projeyi seçmek için açılır listeyi kullanın:

Google Cloud'da yeni bir proje oluşturmak için aşağıdaki adımları uygulayabilirsiniz:
- Google Cloud Platform Console'a gidin.
- Proje Oluştur düğmesini tıklayın.
- Projeniz için bir ad girin.
- Projeniz için bir faturalandırma hesabı seçin.
- Oluştur düğmesini tıklayın.
Projeniz oluşturulur ve proje kontrol paneline yönlendirilirsiniz. Buradan Google Cloud hizmetlerini kullanmaya başlayabilirsiniz.
Her adımla ilgili ek bilgileri aşağıda bulabilirsiniz:
- Ad: Projenizin adı, kuruluşunuz içinde benzersiz olmalıdır.
- Faturalandırma hesabı: Mevcut bir faturalandırma hesabını kullanabilir veya yeni bir hesap oluşturabilirsiniz.
- Oluşturma: Gerekli tüm bilgileri girdikten sonra projenizi oluşturmak için Oluştur düğmesini tıklayın.
Daha fazla bilgi için lütfen Google Cloud'un proje oluşturma ile ilgili belgelerine bakın.
3. API uygulamasını dağıtma
Örnek uygulama veya API ne hakkında?
Uygulamamız, envanter öğelerini listeleyen ve belirli öğelerin envanter sayısını alan birkaç işlem içeren bir REST API uç noktası sunan basit bir Envanter API uygulamasıdır.
API'yi dağıttıktan sonra ve https://<somehost> adresinde barındırıldığını varsayarsak API uç noktalarına aşağıdaki gibi erişebiliriz:
https://<somehost>/inventory
Bu işlem, stoktaki envanter düzeyleriyle birlikte tüm ürün öğelerini listeler.
https://<somehost>/inventory/{productid}
Bu işlem, ürün kimliğini ve söz konusu ürünün stoktaki envanter düzeyini içeren tek bir kayıt sağlar.
Döndürülen yanıt verileri JSON biçimindedir.
Not: Bu API uygulaması yalnızca demo amaçlıdır ve güvenli ve sağlam bir API uygulamasını temsil etmez. Laboratuvarın temel amacını (Google Cloud Operations) keşfetmek için hızlı bir uygulama sunması amaçlanmıştır.
Örnek Veriler ve API İsteği/Yanıtı
Uygulama, işleri basit tutmak için arka uçta bir veritabanı tarafından desteklenmez. 3 örnek ürün kimliği ve bunların stoktaki envanter düzeylerini içerir.
Ürün No | Eldeki envanter seviyesi |
I-1 | 10 |
I-2 | 20 |
I-3 | 30 |
Örnek API isteği ve yanıtı aşağıda gösterilmiştir:
API İsteği | API Yanıtı |
https://<somehost>/inventory | [ { "I-1": 10, "I-2": 20, "I-3": 30 }] |
https://<somehost>/inventory/I-1 | { "productid": "I-1", "qty": 10} |
https://<somehost>/inventory/I-2 | { "productid": "I-2", "qty": 20} |
https://<somehost>/inventory/I-200 | { "productid": I-200, "qty": -1} |
Depoyu Klonlama
Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir. Ancak bu codelab'de, Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacaksınız.
GCP Console'da sağ üstteki araç çubuğunda Cloud Shell simgesini tıklayın:

Ortamın temel hazırlığı ve bağlanması yalnızca birkaç dakikanızı alır. İşlem tamamlandığında aşağıdakine benzer bir sonuç görürsünüz:

Bu sanal makine, ihtiyaç duyduğunuz tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu laboratuvardaki tüm çalışmalarınızı yalnızca bir tarayıcıyla yapabilirsiniz.
gcloud'u ayarlama
Cloud Shell'de proje kimliğinizi ayarlayın ve PROJECT_ID değişkeni olarak kaydedin.
PROJECT_ID=[YOUR-PROJECT-ID]
gcloud config set project $PROJECT_ID
Şimdi aşağıdaki komutu çalıştırın:
$ git clone https://github.com/rominirani/cloud-code-sample-repository.git
Bu işlem, bu klasörde cloud-code-sample-repository adlı bir klasör oluşturur.
(İsteğe bağlı) Uygulamayı Cloud Shell'de çalıştırma
Aşağıdaki adımları uygulayarak uygulamayı yerel olarak çalıştırabilirsiniz:
- Terminalden aşağıdaki komutu kullanarak API'nin Python sürümüne gidin:
$ cd cloud-code-sample-repository
$ cd python-flask-api
- Terminalde aşağıdaki komutu girin (Bu belge yazılırken Cloud Shell'de Python 3.9.x yüklüydü ve varsayılan sürüm kullanılacaktır. Dizüstü bilgisayarınızda yerel olarak çalıştırmayı planlıyorsanız Python 3.8+ sürümünü kullanabilirsiniz:
$ python app.py
- Python sunucusunu yerel olarak başlatmak için aşağıdaki komutu çalıştırabilirsiniz.

8080 numaralı bağlantı noktasında önizle'yi tıklayın. 5. Bu işlemle bir tarayıcı penceresi açılır. 404 hatası görürsünüz. Bu normaldir. URL'yi değiştirin ve ana makine adından sonra yalnızca /inventory olacak şekilde düzenleyin.
Örneğin, benim makinemde şöyle görünüyor:
https://8080-cs-557561579860-default.cs-asia-southeast1-yelo.cloudshell.dev/inventory
Bu işlem, envanter öğelerinin listesini daha önce açıklandığı şekilde gösterir:

- Terminal'e gidip Ctrl-C tuşlarına basarak sunucuyu şimdi durdurabilirsiniz.
Uygulamayı dağıtın
Şimdi bu API uygulamasını Cloud Run'a dağıtacağız. Bu işlemde, kodu Cloud Run'a dağıtma komutunu çalıştırmak için gcloud komut satırı istemcisinin kullanılması gerekiyordu.
Terminalden aşağıdaki gcloud komutunu verin:
$ gcloud run deploy --source .
Bu işlemde size birden fazla soru sorulur. Bazı noktalar aşağıda belirtilmiştir:
- Hizmet adı (python-flask-api): Bu varsayılan adı kullanabilir veya my-inventory-api gibi bir ad seçebilirsiniz.
- API [run.googleapis.com], [613162942481] kimlikli projede etkinleştirilmedi. Etkinleştirip tekrar denemek ister misiniz? Bu işlem birkaç dakika sürer. (y/N)? Y
- Lütfen bir bölge belirtin: 31'i (us-west-1) seçin
- [artifactregistry.googleapis.com] API'si [613162942481] projesinde etkin değil. Etkinleştirip tekrar denemek ister misiniz? Bu işlem birkaç dakika sürer. (y/N)? Y
- Kaynaktan dağıtım için derlenen kapsayıcıları depolamak üzere bir Artifact Registry Docker deposu gerekir. [us-west1] bölgesinde [cloud-run-source-deploy] adlı bir depo oluşturulur.
- Devam etmek istiyor musunuz (E/h)? Y
- [my-inventory-api] için kimliği doğrulanmamış çağrılara izin verilsin mi? (y/N) Y
Sonuç olarak, bu işlem kaynak kodunuzu alıp container mimarisine alma, Artifact Registry'ye gönderme ve ardından Cloud Run hizmetini + düzeltmeyi dağıtma sürecini başlatır. Bu işlem sırasında sabırlı olmanız gerekir (3-4 dakika sürebilir). İşlem tamamlandığında hizmet URL'si gösterilir.
Örnek bir çalıştırma aşağıda gösterilmektedir:

Uygulamayı test etme
Uygulamayı Cloud Run'a dağıttığımıza göre, API uygulamasına aşağıdaki şekilde erişebilirsiniz:
- Önceki adımdaki hizmet URL'sini not edin. Örneğin, benim kurulumumda
https://my-inventory-api-bt2r5243dq-uw.a.run.appolarak gösteriliyor. Buna<SERVICE_URL>diyelim. - Bir tarayıcı açın ve API uç noktaları için aşağıdaki 3 URL'ye erişin:
<SERVICE_URL>/inventory<SERVICE_URL>/inventory/I-1<SERVICE_URL>/inventory/I-100
Önceki bir bölümde örnek API isteği ve yanıtıyla birlikte sağladığımız spesifikasyonlara uygun olmalıdır.
Cloud Run'dan hizmet ayrıntılarını alma
API hizmetimizi sunucusuz bilgi işlem ortamı olan Cloud Run'a dağıttık. Google Cloud Console üzerinden Cloud Run hizmetini istediğimiz zaman ziyaret edebiliriz.
Ana menüden Cloud Run'a gidin. Bu işlem, Cloud Run'da çalıştırdığınız hizmetlerin listesini gösterir. Yeni dağıttığınız hizmeti görürsünüz. Seçtiğiniz ada bağlı olarak aşağıdakine benzer bir şey görürsünüz:

Ayrıntıları görüntülemek için hizmet adını tıklayın. Örnek ayrıntıları aşağıda gösterilmiştir:

Tarayıcıya girip yeni dağıttığımız Inventory API'ye erişebileceğiniz hizmet URL'sinden başka bir şey olmayan URL'ye dikkat edin. Metrikleri ve diğer ayrıntıları inceleyin.
Şimdi Google Cloud Operations Suite'i kullanmaya başlayalım.
4. Uyarı Bildirimini Almak İçin Pub/Sub Konusu Oluşturma
Pub/Sub konusu oluşturmak için Google Cloud Console'da aşağıdaki adımları uygulayabilirsiniz:
- Arama kutusunda Pub/Sub araması yapın ve Pub/Sub'a gidin.

- Henüz orada değilseniz Konular sekmesini tıklayın.

- Konu Oluştur düğmesini tıklayın.

- Konunuz için kolayca tanınabilecek bir ad girin.

- Oluştur düğmesini tıklayın.

- Kopyalama simgesi düğmesini kullanarak Konu adını kopyalayın. Bu bilgiye sonraki bölümde ihtiyacınız olacak.

5. Hatalar için uyarı politikası oluşturma
Hata günlüklerini keşfetme
Uygulamanın hata günlüklerini görmek için:
Günlüğe Kaydetme sekmesini tıklayın.
Bu işlem, günlük mesajlarını gerektiği gibi filtrelemek için günlük düzeyleriyle birlikte çeşitli kaynakları (proje, Google Cloud kaynağı, hizmet adları vb.) özel olarak seçebileceğiniz/seçimini kaldırabileceğiniz bir günlük arayüzü görüntüler.

I-1, I-2 ve I-3'ten biri olmayan ürün kimlikleri sağlayarak envanter hizmetine birkaç geçersiz istek gönderin. Örneğin, yanlış bir istek şöyledir:
https://<SERVICE_URL>/inventory/I-999
Artık sorguda yanlış bir ürün kimliği sağlandığında API'miz tarafından oluşturulan tüm UYARILAR aranacak.
Hatalar İçin Özel Günlük Tabanlı Uyarı Politikası Oluşturma
Uygulamanın bir bölümünde çok spesifik bir hata mesajının oluşmasını izlemek istediğimizi varsayalım. Ürün kimliklerini ararken çok sayıda hata tespit ettiğimizi varsayalım. Bu sorun, birçok olası sorunun (kötü bir bağlantı, veritabanı tutarsızlığı veya sitemizi numaralandıran bir bot) belirtisidir. Olası her nedeni tahmin etmek zor veya imkansız olsa da bu mesajı bir kez bile gönderen uygulamanın yüksek düzeyde bir sorun olduğunu bilmek isteriz. Bu konuda uyarı vermek için hata günlüklerimizdeki verilere dayalı bir politika oluşturmamız gerekir.
- Sorgu kutusuna aşağıdaki sorgu parametrelerini ekleyin:
resource.type="cloud_run_revision"
textPayload =~ "WARNING in app: Received inventory request for incorrect productid"
Şuna benzer bir görünümde olacaktır:

- Sorguyu Çalıştır'ı tıklayın. Bu işlem, gelen tüm istekleri ve bu sorunu içerenleri gösterir.

- Yukarıdakileri uyarıya dönüştürmek için sorgu alanının hemen altında, sağ tarafta bulunan Günlük Gezgini'ndeki Uyarı oluştur düğmesini tıklayın:

- Bu işlem, günlük tabanlı uyarı politikası oluşturma formunu açar.

- Uyarıya dahil edilecek günlükler için ilk sorguyu kullanın:
resource.type="cloud_run_revision"
textPayload =~ "WARNING in app: Received inventory request for incorrect productid"

- Bildirim sıklığını ve olay süresini ayarlayın. Örnek amacıyla, her biri için minimum değerleri kullanabilirsiniz:

- Son olarak, "Kime bildirim gönderilecek?" bölümünde daha önce oluşturduğunuz Pub/Sub bildirim kanalını seçin:

- Kaydet'i tıklayın. Uyarı politikasını görüntülemek ve yönetmek için Uyarılar sayfasını ziyaret edin ve Politikalar bölümünü inceleyin:

6. Tebrikler
Tebrikler, Pub/Sub'a uyarı göndermek için çalışma süresi kontrolünüzü başarıyla yapılandırdınız.