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 yararlanmayı öğ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_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-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ını içerir. 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_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'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 İşlev Oluştur'u tıklayın.

3c13aa20af602aa7.png

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

fa6816c96d6d5b94.png

Kaynak kodu için tüm varsayılanları 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.

Öncelikle Cloud Shell'i kullanarak aşağıdaki komutu verin:

$ gcloud functions describe hello-monitor

Bu işlem, Cloud Functions işlevini çağırmak için kullanılan 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>-<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 Function'ınıza biraz 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ünüzde View Logs'u (Günlükleri Görüntüle) 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 kodu 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österir.
  • Günlük girişini sabitleme (görsel ipucu olarak).
  • 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ındaki ve yürütme süresindeki artışı gözlemleyin.

aaee3159bbe395d3.png 7ed347101da5eca0.png

Gecikme süresini 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 Functions işlevinin 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 izlemeleri HTTP yöntemine (GET, POST, DELETE), HTTP durumuna (2XX, 3XX) veya istek filtresini kullanarak filtreleyebilirsiniz.

Soldaki menüde 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ığının bir kombinasyonuna dayalı özel raporlar oluşturma özelliğini de bulabilirsiniz. Hatta oluşturulan değerleri bir zaman referansıyla 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.png

2e7b1ebf2f0a2b4f.png

Bu tür özel raporlar, 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ı olarak Cloud Function'ınızı silin. Cloud Functions bölümündeki Genel Bakış'ta hello-monitor simgesini seçip Sil'i tıklamanız yeterlidir.

aceb633cf70a4a27.png

9. Sırada ne var?

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

/