Uyarılar: Pub/Sub Konularında Günlük Tabanlı Hatalar

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:

b35bf95b8bf3d5d8.png

Google Cloud'da yeni bir proje oluşturmak için aşağıdaki adımları uygulayabilirsiniz:

  1. Google Cloud Platform Console'a gidin.
  2. Proje Oluştur düğmesini tıklayın.
  3. Projeniz için bir ad girin.
  4. Projeniz için bir faturalandırma hesabı seçin.
  5. 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:

bce75f34b2c53987.png

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:

f6ef2b5f13479f3a.png

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:

  1. Terminalden aşağıdaki komutu kullanarak API'nin Python sürümüne gidin:

$ cd cloud-code-sample-repository

$ cd python-flask-api

  1. 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

  1. Python sunucusunu yerel olarak başlatmak için aşağıdaki komutu çalıştırabilirsiniz.

1f798fbddfdc2c8e.png 46edf454cc70c5a6.png

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:

709d57ee2f0137e4.png

  1. 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:

  1. Hizmet adı (python-flask-api): Bu varsayılan adı kullanabilir veya my-inventory-api gibi bir ad seçebilirsiniz.
  2. 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
  3. Lütfen bir bölge belirtin: 31'i (us-west-1) seçin
  4. [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
  5. 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.
  6. Devam etmek istiyor musunuz (E/h)? Y
  7. [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:

87ba8dbf88e8cfa4.png

Uygulamayı test etme

Uygulamayı Cloud Run'a dağıttığımıza göre, API uygulamasına aşağıdaki şekilde erişebilirsiniz:

  1. Önceki adımdaki hizmet URL'sini not edin. Örneğin, benim kurulumumda https://my-inventory-api-bt2r5243dq-uw.a.run.app olarak gösteriliyor. Buna <SERVICE_URL> diyelim.
  2. Bir tarayıcı açın ve API uç noktaları için aşağıdaki 3 URL'ye erişin:
  3. <SERVICE_URL>/inventory
  4. <SERVICE_URL>/inventory/I-1
  5. <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:

2633965c4bc957cc.png

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:

33042ae64322ce07.png

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:

  1. Arama kutusunda Pub/Sub araması yapın ve Pub/Sub'a gidin. 935028bd8f6328ef.png
  2. Henüz orada değilseniz Konular sekmesini tıklayın. 7fd8bf91386a88fd.png
  3. Konu Oluştur düğmesini tıklayın. cd9d197f9023c41b.png
  4. Konunuz için kolayca tanınabilecek bir ad girin.

173f313b4a3c4934.png

  1. Oluştur düğmesini tıklayın. ca9a02477da21a44.png
  2. Kopyalama simgesi düğmesini kullanarak Konu adını kopyalayın. Bu bilgiye sonraki bölümde ihtiyacınız olacak.

20848252ee83df93.png

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.

6605b68395185b89.png

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.

  1. 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:

f672154cfebf0051.png

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

77c190e3a2fab6bf.png

  1. 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:

4cd3fcf142189376.png

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

b82446854bad87fc.png

  1. 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"

764227db73ec3de6.png

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

bb3d96448ec998a1.png

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

3593c48c29d4b76c.png

  1. 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: ca08ea380fb37c91.png

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.