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

1. Giriş

Son güncelleme: 21 Haziran 2023

Kullanılabilirlik İçin Günlük Tabanlı Hatalarla İlgili Uyarı

Günlük tabanlı uyarılar, günlüklerdeki belirli etkinlik ve kalıpları izleyerek bir uygulamanın kullanılabilirliğini belirlemek için kullanılabilir*.* Kesintiler veya kullanıcıların karşılaştığı diğer sorunlar konusunda uyarı alarak, kullanıcılarınız ve müşterileriniz üzerindeki etkiyi en aza indirmek için gerekli önlemleri alabilirsiniz.

Çalışma denetimleri, kullanılabilirlik durumu hakkında genel bir anlık görüntü sunsa da günlüklerden türetilen hata mesajlarını, daha spesifik kullanılabilirsizlik türlerinin göstergeleri olarak 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ına, yükseltmelere, hatta kötü hava gibi sistem harici faktörlere kadar pek çok nedenden kaynaklanabilir. Uyarı yapmanın püf noktası, olası tüm nedenleri tahmin etmeye çalışmak değil, sorun giderme için başlangıç noktası olabilecek birkaç temel belirti seçmektir.

Uyarı Bildirimi Kanalı olarak Pub/Sub Konuları

Pub/Sub konuları, 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.

Bir Pub/Sub konusunu bildirim kanalı olarak kullanmak için önce bir Pub/Sub konusu ve bir 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. Ardından Pub/Sub aboneliğinin abonesi mesajı işleyip uygun işlemi yapabilir.

Oluşturacaklarınız

Bu codelab'de bir uygulama dağıtacak, bir 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 günlük tabanlı bir uyarı oluşturacaksınız.

Neler öğreneceksiniz?

  • Pub/Sub konusu nasıl oluşturulur?
  • Günlük tabanlı uyarı oluşturma

Bu codelab, hatalar için uyarı oluşturmaya odaklanmıştır. Alakalı olmayan kavramlar ve uygulama kodu, herhangi bir açıklamanın üzerinden geçmiştir ve kolayca kopyalayıp yapıştırmanız için size sunulur.

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

Bir Google Cloud projesi seçin veya oluşturun

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 şu 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 bazı ek ayrıntıları 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ştur: 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 proje oluşturma hakkındaki Google Cloud belgelerini inceleyin.

3. API Uygulamasını Dağıtma

Örnek uygulama veya API ne hakkında?

Uygulamamız, envanter öğelerini listelemek ve belirli öğe envanteri sayısını almak için birkaç işlemle REST API Uç Noktası kullanıma sunan basit bir Inventory API uygulamasıdır.

API'yi dağıttıktan ve https://<somehost> adresinde barındırıldığı varsayıldığında, API uç noktalarına aşağıdaki şekilde erişebiliriz:

https://<somehost>/inventory

Bu işlem, mevcut envanter seviyelerine sahip tüm ürün öğelerini listeler.

https://<somehost>/inventory/{productid}

Bu işlem, söz konusu ürün için ürün kimliği ve mevcut 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 Google Cloud Operations gibi temel amacı hakkında bilgi edinmek için hızlıca kullanabileceğimiz bir uygulamaya sahip olmak istiyoruz.

Örnek Veriler ve API İsteği/Yanıtı

İşleri basitleştirmek adına uygulama, arka uçtaki bir veritabanı tarafından desteklenmemektedir. 3 örnek ürün kimliği ve bunların hazır envanter düzeylerini içerir.

Ürün No

Hazır Envanter Düzeyi

I-1

10

I-2

20

I-3

30

Örnek API İsteği ve Yanıtı aşağıda gösterilmiştir:

API İsteği

API Yanıtı

https://&lt;somehost&gt;/inventory

[ { &quot;I-1&quot;: 10, &quot;I-2&quot;: 20, &quot;I-3&quot;: 30 }]

https://&lt;somehost&gt;/inventory/I-1

{ &quot;productid&quot;: &quot;I-1&quot;, &quot;qty&quot;: 10}

https://&lt;somehost&gt;/inventory/I-2

{ &quot;productid&quot;: &quot;I-2&quot;, &quot;qty&quot;: 20}

https://&lt;somehost&gt;/inventory/I-200

{ &quot;productid&quot;: I-200, &quot;qty&quot;: -1}

Depoyu klonlama

Google Cloud dizüstü bilgisayarınızdan uzaktan çalıştırılabilse de 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 yer alan Cloud Shell simgesini tıklayın:

bce75f34b2c53987.png

Ortamı sağlamak ve bağlamak yalnızca birkaç dakika sürer. Tamamlandığında şuna benzer bir sonuç görmeniz gerekir:

f6ef2b5f13479f3a.png

Bu sanal makinede, ihtiyacınız olan tüm geliştirme araçları yüklüdür. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu laboratuvardaki tüm çalışmalarınızı yalnızca bir tarayıcıyla yapabilirsiniz.

gcloud'u kurun

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 yürütün:

$ git clone https://github.com/rominirani/cloud-code-sample-repository.git

Bu işlem sonucunda bu klasörde "cloud-code-sample-repository" başlıklı bir klasör oluşturulur.

(İsteğe bağlı) Uygulamayı Cloud Shell'de çalıştırın

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 sağlayın (Yazma sırasında Cloud Shell'de Python 3.9.x yüklüdür ve varsayılan sürüm kullanılır. Dizüstü bilgisayarınızda yerel olarak çalıştırmayı planlıyorsanız Python 3.8+ 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 bağlantı noktasında Önizleme'yi tıklayın. 5. Bunu yaptığınızda bir tarayıcı penceresi açılır. Bir 404 hatası göreceksiniz ve bu durum normaldir. URL'yi değiştirin ve URL'yi, ana makine adından sonra yalnızca /inventory olacak şekilde değiştirin.

Örneğin, aşağıdaki gibi görünür:

https://8080-cs-557561579860-default.cs-asia-southeast1-yelo.cloudshell.dev/inventory

Bu işlem, envanter öğelerinin listesini daha önce açıklandığı gibi gösterir:

709d57ee2f0137e4.png

  1. Terminal'e gidip Ctrl-C tuşlarına basarak sunucuyu durdurabilirsiniz.

Uygulamayı dağıtın

Şimdi bu API uygulamasını Cloud Run'a dağıtacağız. Bu süreçte, kodu Cloud Run'a dağıtmak amacıyla komutu ç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 kursta size birden çok soru sorulacak ve bazı noktalara aşağıda değinilecektir:

  1. Hizmet adı (python-flask-api): Bu varsayılan ayarı kullanın veya my-inventory-api gibi bir ad seçin
  2. API [run.googleapis.com], [613162942481] projesinde etkinleştirilmedi. Etkinleştirmek ve yeniden denemek istiyor musunuz (bu işlem birkaç dakika sürer)? (e/H)? Y
  3. Lütfen bir bölge belirtin: 31'i seçin (us-west-1)
  4. API [artifactregistry.googleapis.com], [613162942481] projesinde etkinleştirilmemiş. Etkinleştirmek ve yeniden denemek istiyor musunuz (bu işlem birkaç dakika sürer)? (e/H)? Y
  5. Kaynaktan dağıtım yapmak için derlenen container'ları depolamak üzere bir Artifact Registry Docker deposu gerekir. [us-west1] bölgesinde [cloud-run-source-deploy] adlı bir depo oluşturulacak.
  6. Devam etmek istiyor musunuz (E/H)? Y
  7. [my-inventory-api] (y/N) yöntemine yapılan kimliği doğrulanmamış çağrılara izin verilsin mi? Y

Sonuç olarak kaynak kodunuzu alma, container mimarisine alma, Artifact Registry'ye aktarma ve Cloud Run hizmeti + düzeltmesini dağıtma işlemi başlar. Bu işlemin tamamlanması için sabırlı olmalısınız (3-4 dakika sürebilir). Ardından, size gösterilen Hizmet URL'si ile işlemin tamamlandığını göreceksiniz.

Aşağıda örnek bir çalıştırma gösterilmiştir:

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, 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

Bu, örnek API İsteği ve Yanıtı ile önceki bir bölümde 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. Cloud Run hizmetini Google Cloud konsolu üzerinden istediğimiz zaman ziyaret edebiliriz.

Ana menüden Cloud Run'a gidin. Bu işlemle, Cloud Run'da çalıştırdığınız hizmetlerin listesi gösterilir. Az önce dağıttığınız hizmeti göreceksiniz. Seçtiğiniz ada bağlı olarak aşağıdakine benzer bir sonuç 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österilmektedir:

33042ae64322ce07.png

URL'ye dikkat edin. Bu URL, tarayıcıda açabileceğiniz ve az önce dağıttığımız Envanter API'sine erişebileceğiniz hizmet URL'sidir. Metriklere ve diğer ayrıntılara göz atın.

Şimdi Google Cloud Operations Suite ile başlayalım.

4. Uyarı Bildirimi Almak için Pub/Sub Konusu Oluşturma

Google Cloud Console'da şu adımları uygulayarak Pub/Sub konusu oluşturabilirsiniz:

  1. Arama kutusundan Pub/Sub'ı arayın ve Pub/Sub'a gidin. 935028bd8f6328ef.png
  2. Henüz yapmadıysanız Konular sekmesini tıklayın. 7fd8bf91386a88fd.png
  3. Konu Oluştur düğmesini tıklayın. cd9d197f9023c41b.png
  4. Konunuz için tanınabilir bir ad girin.

173f313b4a3c4934.png

  1. Oluştur düğmesini tıklayın. ca9a02477da21a44.png
  2. Kopyala simgesi düğmesini kullanarak Konu adı'nı kopyalayın. Sonraki bölümde bu bilgilere ihtiyacınız olacak.

20848252ee83df93.png

5. Hatalar İçin Uyarı Politikası Oluşturma

Hata Günlüklerini Keşfetme

Uygulamanın hata günlüklerini görmek için:

Logging (Günlük Kaydı) sekmesini tıklayın.

Burada, günlük mesajlarını gerektiğinde filtrelemek için özel olarak çeşitli kaynakları (Proje, Google Cloud Kaynağı, hizmet adları vb.) ve günlük mesajlarını filtrelemek için özel olarak seçebileceğiniz/seçimlerini kaldırabileceğiniz bir günlük arayüzü gösterilir.

6605b68395185b89.png

I-1, I-2 ve I-3 olmayan ürün kimlikleri sağlayarak Envanter Hizmeti'ne gönderilen birkaç geçersiz isteği simüle edin. Örneğin, hatalı bir istek:

https://&lt;SERVICE_URL&gt;/inventory/I-999

Artık Sorgu'da yanlış bir Ürün Kimliği sağlandığında API'mizin oluşturduğu tüm UYARI'ları arayacağız.

Hatalar İçin Özel Günlük Tabanlı Uyarı Politikası Oluşturma

Uygulamanın bir bölümü için oldukça spesifik bir hata mesajının oluşumuna dikkat etmek istediğimizi varsayalım. Ürün Kimlikleri aranırken çok sayıda hata tespit edip etmediğini varsayalım. Bu sorun, birçok olası sorunun (bozuk bir bağlantı, veritabanı tutarsızlığı veya sitemizi numaralandıran bot) bir göstergesidir. Her olası nedeni hayal etmek zor veya imkansız olsa da bu mesajı bir kez bile gönderen uygulamanın, bilgi edinmek istediğimiz üst düzey bir sorun olduğunu unutmayın. Bu konuda uyarı verebilmek için hata günlüklerimizdeki verileri temel alan bir politika oluşturmamız gerekir.

  1. Sorgu Kutusu'na aşağıdaki sorgu parametrelerini ekleyin:

resource.type=&quot;cloud_run_revision&quot;

textPayload =~ "Uygulamada UYARI: Yanlış ürün kimliği için envanter isteği alındı"

Şuna benzer bir görünümde olacaktır:

f672154cfebf0051.png

  1. Run Query'yi (Sorgu Çalıştır) tıklayın. Bu bölümde, gelen ve bu soruna sahip olan tüm istekler gösterilir.

77c190e3a2fab6bf.png

  1. Yukarıdakileri uyarıya dönüştürmek için, sorgu alanının hemen altında, sağdaki Günlük Gezgini'nde gördüğünüz Uyarı oluştur düğmesini tıklayın:

4cd3fcf142189376.png

  1. Bu işlemle, form tabanlı bir uyarı politikası oluşturulacak form açılır.

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. Örneğin amacı doğrultusunda, her biri için minimum değerleri kullanabilirsiniz:

bb3d96448ec998a1.png

  1. Son olarak, "Kimler bilgilendirilmeli?" için 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 edip Politikalar: ca08ea380fb37c91.png bölümünü kontrol edin.

6. Tebrikler

Tebrikler, Çalışma Denetiminizi Pub/Sub'a uyarı gönderecek şekilde başarıyla yapılandırdınız.