Cloud Functions için Cloud Logging ve Cloud Trace'i kullanın

1. Giriş

Bu codelab'de, Cloud Functions ile çalışan tüm geliştiricilerin kullanımına sunulan günlük kaydı ve izleme araçlarından nasıl yararlanacağınızı öğreneceksiniz. Bu araçlar, desteklenen tüm dillerde dağıttığınız tüm Cloud Functions işlevleriyle birlikte sunulur. Bu araçlar, sunucusuz kodunuzu yazıp çalıştırırken daha üretken olmanızı sağlayacaktır.

5815064fec87444b.png

HTTP tetiklenmiş bir Cloud Functions işlevi kullanırsınız. Ancak ele aldığınız her şey, diğer diller ve başka etkinlikler tarafından tetiklenen Cloud Functions işlevleri için de geçerlidir.

2. Kurulum ve şartlar

Kendi hızınızda ortam kurulumu

  1. Cloud Console'da oturum açıp yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. (Gmail veya G Suite hesabınız yoksa hesap oluşturmanız gerekir.)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

Tüm Google Cloud projelerinde benzersiz bir ad olan proje kimliğini unutmayın (yukarıdaki ad zaten alınmış ve size uygun olmayacaktır!). Bu kod laboratuvarın ilerleyen bölümlerinde PROJECT_ID olarak adlandırılacaktır.

  1. Sonraki adımda, Google Cloud kaynaklarını kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir.

Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. "Temizleme" bölümündeki talimatları izlediğinizden emin olun. bölümünde, bu eğiticinin dışında faturalandırmayla karşılaşmamanız için kaynakları nasıl kapatacağınız konusunda tavsiyelerde bulunuyoruz. Yeni Google Cloud kullanıcıları 300 ABD doları ücretsiz deneme programından yararlanabilir.

Cloud Shell

Cloud Functions ile birlikte günlük kaydı ve izleme özellikleri dizüstü bilgisayarınızdan uzaktan kullanılabilir. Ancak Google Cloud'da çalışan bir komut satırı ortamı olan Cloud Shell'i kullanırsınız.

Bu Debian tabanlı sanal makine, ihtiyacınız olan tüm geliştirme araçlarıyla yüklüdür. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud'da çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Yani bu codelab'de ihtiyacınız olan tek şey bir tarayıcıdır (Evet, Chromebook'ta çalışır).

  1. Cloud Shell'i Cloud Console'dan etkinleştirmek için Cloud Shell'i etkinleştir fEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVB7zSwz7p6ItNgx4tXqQjag7BfWPcZN5kP-X3Q simgesini tıklamanız yeterlidir (sağlanması ve ortama bağlanması yalnızca birkaç dakika sürer).

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARe01A

Screen Shot 2017-06-14 at 10.13.43 PM.png

Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin PROJECT_ID olarak ayarlanmış olduğunu göreceksiniz.

gcloud auth list

Komut çıkışı

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

Komut çıkışı

[core]
project = <PROJECT_ID>

Herhangi bir nedenle proje ayarlanmamışsa şu komutu vermeniz yeterlidir:

gcloud config set project <PROJECT_ID>

PROJECT_ID cihazınızı mı arıyorsunuz? Kurulum adımlarında kullandığınız kimliği kontrol edin veya Cloud Console kontrol panelinden arayın:

R7chO4PKQfLC3bvFBNZJALLTUiCgyLEq_67ECX7ohs_0ZnSjC7GxDNxWrJJUaoM53LnqABYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93Drxccyj2-5zz4AxL-G3hzxZ4PsM5HHQ

Cloud Shell bazı ortam değişkenlerini de varsayılan olarak ayarlar. Bu değişkenler, gelecekte komut çalıştırdığınızda işinize yarayabilir.

echo $GOOGLE_CLOUD_PROJECT

Komut çıkışı

<PROJECT_ID>
  1. Son olarak, varsayılan alt bölgeyi ve proje yapılandırmasını ayarlayın.
gcloud config set compute/zone us-central1-f

Çeşitli farklı alt bölgeler seçebilirsiniz. Daha fazla bilgi için Bölgeler ve Bölgeler.

3. Basit bir Cloud Functions işlevi dağıtma

İzlemek istediğiniz bir şey olması için bir "Hello, World" oluşturun Cloud Functions işlevi görür. Google Cloud Console'un sol menüsünden Cloud Functions'ı, ardından İşlev Oluştur'u tıklayın.

3c13aa20af602aa7.png

"hello-monitor" yazın Cloud Functions işlevinizin adı olarak belirleyin.

fa6816c96d6d5b94.png

Kaynak kodu için tüm varsayılan değerleri koruyun. (Ancak isterseniz farklı bir dil/çalışma zamanı seçebilirsiniz.)

7aadf164450484e.png

Son olarak Oluştur'u tıklayın.

dc74cd21000d6c91.png

Cloud Functions işlevinizin yanında yeşil bir onay işareti bulunur. Bu, çağrılmaya hazır olduğu anlamına gelir.

5363a34eb001d5ed.png

4. Cloud Functions işlevini test etme ve yük oluşturucu kullanarak trafik gönderme

Cloud Functions işlevi başarıyla dağıtıldığına göre komut satırından test edebilirsiniz.

İlk olarak, Cloud Shell'i kullanarak aşağıdaki komutu kullanın:

$ gcloud functions describe hello-monitor

Bu açıklama, Cloud Functions işlevini çağırmak için HTTP(S) uç noktası olan httpsTrigger URL'si de dahil olmak üzere Cloud Functions işlevinin açıklamasını döndürmelidir. Şu şekilde görünmelidir: https://<region>-<proje-kimliği>.cloudfunctions.net/hello-monitor.

Artık Cloud Functions işlevini tetiklemek, söz konusu URL'de curl komutunu kullanmak kadar basit olmalıdır.

$ curl https://<region>-<project-id>.cloudfunctions.net/hello-monitor
Hello World!

Şimdi basit bir HTTP yük testi aracı olan Vegeta'yı kullanın. Yüklemek için Cloud Shell'den şu komutu yazmanız yeterlidir :

$ go get -u github.com/tsenart/vegeta

Cloud Functions işlevinize trafik göndermek için (birkaç dakika boyunca saniyede beş istek) aşağıdaki komutu kullanın:

$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \
   | vegeta attack -rate=5 -duration=120s \
   > results.bin

5. Günlükler arasında gezinin

Cloud Functions işlevi ayrıntıları görünümünde Günlükleri Görüntüle'yi tıklayın.

b24157fd3376e6a8.png

Bu bağlantı, sizi projenizin yalnızca Cloud Functions günlüklerinizi gösteren Cloud Logging bölümüne yönlendirir.

5a36fa75d2fb0165.png

Cloud Functions işlevinize gönderilen tüm istekler bir 200 durum kodu döndürür.

Günlükleri görüntülerken şunları yapabilirsiniz:

  • Günlük düzeyine göre filtreleyin (sizin durumunuzda tüm günlükler debug düzeyindedir).
  • Belirli bir zaman aralığı seçin (göreli veya mutlak).
  • Günlük akışını etkinleştirin (ekranın üst kısmındaki Oynat 751a4600016f34a7.pngsimgesine dokunun).
  • Günlük girişinin bağlantısını kopyalayın (ekip üyeleriyle paylaşmak için).
  • Kaynak bağlamında günlük girişi gösterin.
  • Bir günlük girişini (görsel işaret olarak) sabitleyin.
  • Günlükleri BigQuery, Cloud Storage veya Pub/Sub'a aktarın (ya da JSON veya CSV dosyası olarak indirin).

6. İşlevi güncelleme

Cloud Console'u kullanarak İşlev ayrıntıları görünümüne gidin ve saniye başına çağrı sayısı ile yürütme süresinde yük test kullanıcınızla oluşturduğunuz ani artışı gözlemleyin.

aaee3159bbe395d3.png 7ed347101da5eca0.png

Gecikmeyi ve RPC çağrılarını gözlemlemek için kullanılan bir diğer ayrıntılı araç da Stackdriver Trace'tir. Ancak bu aracı kullanmadan önce Cloud Functions'ınızda birkaç değişiklik yapmanız gerekir. Aşağıdakileri yapın:

  1. Hayat kurtaran node-emoji paketini bağımlılık olarak ekleyin.
  2. Düğüm-emoji modülünü kullanmak için işlev kodunu güncelleyin ve biraz gecikme uygulayın.
  3. Cloud Functions için Cloud Trace'i etkinleştirmek üzere bir ortam değişkeni ekleyin.

İşlevi değiştirmek için İşlev ayrıntıları'ndan Düzenle'yi tıklayın.

39b0f8f98b18a6c0.png

node-emoji paketine bağımlılık eklemek için package.json dosyasını düzenleyin.

{
  "name": "sample-http",
  "version": "0.0.1",
  "dependencies": {
    "node-emoji": "^1.8.1"
  }
}

index.js içeriğini şu şekilde değiştirerek gerçek işlevi düzenleyin:

const emoji = require('node-emoji');

exports.helloWorld = (req, res) => {
  let message = req.query.message || req.body.message || 'Hello World!';

  // add some latency, functions are too quick!
  setTimeout(function() {
     message += emoji.random().emoji;  
     res.status(200).send(message);
  }, (3 * 100));  // 300ms
  
};

Bu sayede, 300 milisaniye boyunca durakladıktan sonra Cloud Functions işlevi tarafından döndürülen mesaja rastgele bir emoji eklenir.

Son olarak, GOOGLE_CLOUD_TRACE_ENABLED adlı bir Cloud Functions işlevi ortam değişkeni ekleyin ve aşağıdaki gibi true değerine ayarlayın:

9205bd277b76aa21.png

Kaydet'i tıklayın.

Cloud Shell'e dönün ve yeni dağıtılan Cloud Functions işlevinde yük oluşturmak için şu komutu kullanın:

$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \
   | vegeta attack -rate=5 -duration=120s \
   > results.bin

Artık başka kurulum gereksinimleri olmadan ve kodunuzda belirli bir izleme kitaplığı olmadan üretilen izlerin listesini gözlemlemeye hazırsınız.

7. Güncellenen Cloud Functions işlevini izleme

Soldaki menüyü kullanarak Trace listesi'ne (Stackdriver Trace altında) gidin.

576373f38cad6f8.png

Aşağıdaki ekran görüntüsüne benzer bir şey görürsünüz:

44a36b758b49f88f.png

Bu durum, Cloud Functions işlevinizde ortaya çıkan gecikmenin gerçekten 300 milisaniye olarak ölçüldüğünü açıkça ortaya koyar.

Grafikteki her nokta; zaman damgası, HTTP yöntemi ve durum, etiketler, ilgili günlük girişi bağlantısı ve Cloud Functions işlevinin yaptığı sonraki RPC çağrıları gibi ayrıntılı bilgileri görüntüleyebileceğiniz bir istektir.

5815064fec87444b.png

Yakınlaştırmak isterseniz grafiği tıklayıp sürüklemeniz yeterlidir. İz grafiğinde özel bir zaman aralığı seçme.

Uzaklaştırmak için sayfanın üst tarafındaki Yakınlaştırmayı Geri Al seçeneğini tıklayın.

Tek bir Cloud Functions işlevi dağıttığınız için grafikte hello-monitor URI'sinde yalnızca GET istekleri gösterilir ancak izleri HTTP durumuna (2XX, 3XX) göre veya istek filtresini kullanarak HTTP yöntemine (GET, POST, DELETE) göre filtreleyebilirsiniz.

Sol taraftaki menüden Genel Bakış'a gidin:

e920cfca2a50899e.png

Bu genel bakış sayfasında son izleri ve diğer analizleri bulabilirsiniz.

ef5a45647967d275.png

Ayrıca URI istek filtresi, HTTP yöntemi, HTTP durumu ve zaman aralığının kombinasyonuna dayalı özel raporlar oluşturabilirsiniz. Oluşturulan değerleri zaman temel çizgisiyle karşılaştırmanıza da olanak tanır.

5bd34e9d13b47fb6.png

Yeterli veri noktasıyla doğru zaman aralıklarını ayarlamayı başarırsanız ilk Cloud Functions işleviyle yenisi arasındaki önemli gecikme geçişini gösteren bir rapor oluşturabilirsiniz.

2cc0e9a3212b91bb.png

2e7b1ebf2f0a2b4f.png

Bu tür bir özel rapor, bir performans sorununun ne zaman ortaya çıktığını bulmak ve son kullanıcı istek gecikmesi gibi bir hizmet düzeyi göstergesini (SLI) izlemek için kullanılabilir.

8. Kaynakları temizleme zamanı

Codelab'i tamamladınız.

Cloud Functions ve Stackdriver araçları, kullanılmadığında ücret gerektirmeyen sunucusuz platformlar olsa da iyi bir bulut vatandaşı olun ve Cloud Functions işlevinizi silin. Cloud Functions'ın altındaki Genel Bakış bölümünde hello-monitor'yi seçip Sil'i tıklamanız yeterlidir.

aceb633cf70a4a27.png

9. Sırada ne var?

Aşağıda daha fazla bilgi verilmiştir:

/