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 kullanabileceği günlük kaydı ve izleme araçlarından nasıl yararlanacağınızı öğreneceksiniz. Araçlar, desteklenen tüm dillerde dağıttığınız her Cloud Function ile birlikte gelir ve sunucusuz kodunuzu yazarken ve çalıştırırken daha üretken olmanızı sağlar.

5815064fec87444b.png

HTTP tetiklenmiş bir Cloud Functions işlevi kullanacaksınız ancak ele aldığınız her şey diğer diller ve diğer etkinlikler tarafından tetiklenen Cloud Functions işlevleri için de geçerlidir.

2. Kurulum ve şartlar

Yönlendirmesiz ortam kurulumu

  1. Cloud Console'da oturum açın ve 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_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZwci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

Proje kimliğini unutmayın. Bu kimlik, tüm Google Cloud projelerinde benzersiz bir addır (Yukarıdaki ad zaten alınmış olduğundan sizin için çalışmayacaktır). Bu codelab'in ilerleyen kısımlarında PROJECT_ID olarak adlandırılacaktır.

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

Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırma ücreti alınmaması için kaynakları nasıl kapatacağınız konusunda size tavsiyelerde bulunan "Temizleme" bölümündeki talimatları uyguladığınızdan emin olun. Google Cloud'un yeni kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.

Cloud Shell

Cloud Functions ile günlük kaydı ve izleme özelliklerini dizüstü bilgisayarınızdan uzaktan kullanabilirsiniz. Ancak bu laboratuvarda Google Cloud'da çalışan bir komut satırı ortamı olan Cloud Shell'i kullanacaksınız.

Bu Debian tabanlı sanal makine, ihtiyaç duyacağınız tüm geliştirme araçlarıyla birlikte gelir. 5 GB boyutunda kalıcı bir ana dizin bulunur ve Google Cloud'da çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu nedenle, bu codelab için ihtiyacınız olan tek şey bir tarayıcıdır (Chromebook'ta da çalışır).

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

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARe01AScreen 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'nize ayarlandığını görürsünüz.

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 verin:

gcloud config set project <PROJECT_ID>

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

R7chO4PKQfLC3bvFBNZJALLTUiCgyLEq_67ECX7ohs_0ZnSjC7GxDNxWrJJUaoM53LnqABYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93Drxccyj2-5zz4AxL-G3hzxZ4PsM5HHQ

Cloud Shell, gelecekteki komutları çalıştırırken faydalı olabilecek bazı ortam değişkenlerini de varsayılan olarak ayarlar.

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 bölgeler arasından seçim yapabilirsiniz. Daha fazla bilgi için Bölgeler ve Alt Bölgeler başlıklı makaleyi inceleyin.

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

İzlenecek bir öğe olması için "Hello, World" Cloud Functions işlevi oluşturun. Google Cloud Console'un sol menüsünde Cloud Functions'ı, ardından Create Function'ı (İşlev Oluştur) tıklayın.

3c13aa20af602aa7.png

Yeni Cloud Functions işlevinizin adı olarak "hello-monitor" girin.

fa6816c96d6d5b94.png

Kaynak kodu için tüm varsayılan ayarları 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şaretiyle listelendiğini görürsünüz. Bu, işlevin ç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 edin.

İlk olarak Cloud Shell'i kullanarak aşağıdaki komutu verin:

$ gcloud functions describe hello-monitor

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

Cloud Functions işlevini tetiklemek artık bu URL'de curl komutunu kullanmak kadar kolay 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'de aşağıdaki komutu yazmanız yeterlidir :

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

Cloud Functions işlevinize az 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üklerde gezinme

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

b24157fd3376e6a8.png

Bu işlem sizi projenizin Stackdriver Logging bölümüne yönlendirir ve yalnızca Cloud Functions günlüklerinizi gösterir.

5a36fa75d2fb0165.png

Cloud Function'ınıza yapılan tüm istekler 200 durum kodunu döndürmelidir.

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ığı (göreli veya mutlak) seçin.
  • Günlük akışını etkinleştirin (ekranın üst kısmında Play 751a4600016f34a7.png simgesi bulunur).
  • Günlük girişinin bağlantısını kopyalama (ekip üyeleriyle paylaşmak için).
  • Bir günlük girişini kaynak bağlamında gösterin.
  • Günlük girişini (görsel ipucu olarak) sabitleyin.
  • Günlükleri BigQuery, Cloud Storage veya Pub/Sub'a aktarın (ya da JSON veya CSV dosyaları olarak indirin).

6. İşlevi güncelleme

Cloud Console'u kullanarak İşlev ayrıntıları görünümüne gidin ve yük testinizle oluşturduğunuz, saniyede çağrı sayısı ve yürütme süresindeki artışı gözlemleyin.

aaee3159bbe395d3.png 7ed347101da5eca0.png

Gecikme ve RPC çağrılarını gözlemlemek için daha ayrıntılı bir araç olan Stackdriver Trace'i kullanabilmek için 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. Node-emoji modülünü kullanmak ve biraz gecikme eklemek için işlev kodunu güncelleyin.
  3. Cloud Functions için Stackdriver Trace'i etkinleştirmek üzere bir ortam değişkeni ekleyin.

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

39b0f8f98b18a6c0.png

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

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

index.js içeriğini aşağıdaki ş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 kod, 300 milisaniye durakladıktan sonra Cloud Function tarafından döndürülen mesaja rastgele bir emoji ekler.

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

9205bd277b76aa21.png

Kaydet'i tıklayın.

Cloud Shell'e dönün ve yeni dağıtılan Cloud Function'da yük oluşturma komutunu hatırlayın:

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

Artık başka kurulum gerektirmeden ve kodunuzda belirli bir izleme kitaplığı olmadan oluşturulan izleme listesini gözlemlemeye hazırsınız.

7. Güncellenen Cloud Functions işlevini izleme

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

576373f38cad6f8.png

Aşağıdaki ekran görüntüsüne benzer bir şey görmeniz gerekir:

44a36b758b49f88f.png

Bu, Cloud Function'ınızda oluşan gecikmenin gerçekten 300 milisaniye olarak ölçüldüğünü açıkça gösterir.

Grafikteki her nokta, zaman damgası, HTTP yöntemi ve durumu, etiketleri, ilgili günlük girişinin bağlantısı ve Cloud Function'ın yaptığı sonraki RPC çağrısı gibi ayrıntılı bilgileri görüntüleyebileceğiniz bir istektir.

5815064fec87444b.png

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

Uzaklaştırmak için sayfanın üst kısmındaki Uzaklaştırmayı Geri Al'ı tıklayın.

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

Sol kısımdaki menüden Genel bakış'a gidin:

e920cfca2a50899e.png

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

ef5a45647967d275.png

Ayrıca, URI isteği filtresi, HTTP yöntemi, HTTP durumu ve zaman aralığı kombinasyonuna dayalı özel raporlar oluşturma özelliğini de kullanabilirsiniz. Hatta oluşturulan değerleri bir 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 Function ile yeni Cloud Function arasındaki önemli gecikme değişimini gösteren bir rapor oluşturabilirsiniz.

2cc0e9a3212b91bb.png2e7b1ebf2f0a2b4f.png

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

8. Kaynakları temizleme zamanı

Bu codelab'in sonuna geldik.

Cloud Functions ve Stackdriver araçları, kullanılmadığında maliyet oluşturmayan sunucusuz platformlar olsa da iyi bir bulut kullanıcısı olun ve Cloud Function'ınızı silin. Cloud Functions bölümündeki Overview (Genel Bakış) altında hello-monitor simgesini seçip Delete'i (Sil) tıklamanız yeterlidir.

aceb633cf70a4a27.png

9. Sırada ne var?

Daha fazla bilgi için aşağıdaki makaleleri inceleyebilirsiniz:

/