Cloud Functions günlük kaydı ve izleme codelab'i

Bu codelab'in amacı, tüm Cloud Functions işlevleri geliştiricilerine sunulan günlük kaydı ve izleme araçlarından nasıl yararlanacağınızı anlamanızdır. Bu araçlar, desteklenen tüm dillerde dağıttığınız her Cloud Functions işleviyle birlikte gelir ve sunucusuz kodunuzu yazıp çalıştırırken daha üretken olmanızı sağlar.

Burada HTTP tetiklenen bir işlevi kullanırız, ancak ele aldığımız her şey diğer diller ve diğer etkinlikler (depolama alanı, pub/sub vb.) tarafından tetiklenen işlevler için de geçerlidir.

Bağımsız tempolu ortam kurulumu

Google Hesabınız (Gmail veya Google Apps) yoksa bir hesap oluşturmanız gerekir. Google Cloud Platform Console'da (console.cloud.google.com) oturum açın ve yeni bir proje oluşturun:

Ekran görüntüsü: 10.02.2016 12:45:26.png

Proje kimliğini tüm Google Cloud projeleri genelinde benzersiz bir ad olarak hatırlayın (yukarıdaki ad zaten alınmıştı ve maalesef sizin için çalışmaz). Bu, daha sonra bu codelab'de PROJECT_ID olarak adlandırılacaktır.

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

Bu codelab'i gözden geçirmek için çalışmanın birkaç dolardan fazla maliyeti olmayacak. Ancak daha fazla kaynak kullanmaya karar verirseniz veya bunları çalışır durumda bırakırsanız (bu belgenin sonundaki "temizlik" bölümüne bakın) daha yüksek maliyetli olabilir.

Yeni Google Cloud Platform kullanıcıları 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.

Google Cloud Shell

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

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

Google Cloud Shell'i etkinleştirmek için geliştirici konsolunun sağ üst tarafındaki düğmeyi tıklayın (temel hazırlığın yapılması ve ortama bağlanmanız yalnızca birkaç dakika sürer):

cloudShell.png'yi etkinleştir

"Cloud Shell'i Başlat" düğmesini tıklayın:

Ekran Görüntüsü, 14.06.2017 10.13.43.png

Cloud shell'e bağlandıktan sonra kimliğinizin zaten doğrulanmış olduğunu ve projenin PROJECT_ID olarak ayarlandığını görmeniz gerekir:

gcloud auth list

Komut çıkışı

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

Komut çıkışı

[core]
project = <PROJECT_ID>

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

echo $GOOGLE_CLOUD_PROJECT

Komut çıkışı

<PROJECT_ID>

Herhangi bir nedenle proje ayarlanmadıysa aşağıdaki 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ıza göz atın veya konsolu kontrol panelinde arayın:

Proje_kimliği.png

ÖNEMLİ: Son olarak varsayılan alt bölgeyi ve proje yapılandırmasını ayarlayın:

gcloud config set compute/zone us-central1-f

Farklı bölgeler seçebilirsiniz. Bölgeler ve Alt Bölgeler dokümanlarında daha fazla bilgi edinin.

Bir şeyi izlemek için Hello World bulut işlevi oluşturalım. Console'un sol menüsünde Cloud Functions'ı ve ardından"Create function"simgesini tıklayın:

Yeni işlevinizi adlandırınhello-monitor&:

... ve kaynak kod için tüm varsayılan değerleri koruyun (yine de isterseniz farklı bir dil/çalışma zamanı seçebilirsiniz) :

Son olarak, "Create" düğmesini kullanarak işlevi oluşturun :

Kısa bir süre sonra, işlevinizin çağrılmaya hazır olarak listelendiğini görürsünüz (yeşil onay işaretiyle belirtildiği gibi) :

Bulut işlevi başarıyla dağıtıldığına göre şimdi komut satırından test edeceğiz.

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

$ gcloud functions describe hello-monitor

Bu işlev, işlevi çağırmak için HTTP(S) uç noktası olan httpsTrigger URL'si dahil olmak üzere fonksiyonun açıklamasını döndürmelidir. https://<region>-<project-id>.cloudfunctions.net/hello-monitor biçiminde olmalıdır

Fonksiyonu tetiklemek, curl'bu URL'yi tetiklemek kadar basit olmalıdır :

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

Şimdi, basit bir HTTP yük test aracı olan Vegeta'yı kullanacağız. Yüklemek için Cloud Shell'de şu komutu yazmanız yeterlidir :

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

Bulut işlevinize trafik göndermek için (birkaç dakika boyunca saniyede 5 istek) şu komutu kullanın :

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

İşlev ayrıntıları görünümünüzde "Günlükleri Görüntüle" menüsünü tıklayın :

Bu işlem sizi projenizin Cloud Logging bölümüne yönlendirerek yalnızca bulut işlev günlüklerinizin gösterilmesini sağlar :

İşlevinize yapılan tüm isteklerin 200 durum kodu döndürmesini umuyoruz.

Bu günlük görüntüleyiciyi kullanarak şunları yapabilirsiniz :

  • günlük düzeyine göre filtreleme (bu örnekte 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ındaki "oynat" düğmesi)
  • günlük girişinin bağlantısını kopyalama (ekip üyeleriyle paylaşmak için)
  • kaynak bağlamında günlük girişi göster
  • günlük girişini sabitleme (görsel işaret olarak)
  • günlükleri BigQuery, Cloud Storage veya Cloud Pub/Sub'a aktarma (veya JSON ya da CSV biçiminde indirme)

Sol üst seçicide günlükleri işleve göre filtreleyebileceğinizi de unutmayın. Ayrıca, pencerenin üst kısmındaki arama çubuğunda etiketleri veya tam metin aramasını da arayabilirsiniz. Bu örnekte, etiketler her istek için bir yürütme tanımlayıcısının yanı sıra hello-monitor (işlevin adı) şeklindedir.

Filtreleri paylaşmak için de kopyalayabilirsiniz (arama kutusundaki açılır menüye göz atın) :

Konsolu kullanarak, "tanıtım ayrıntıları" sayfasına gidip yükleme testi aracımızın oluşturduğu ani yükselişi hem saniye başına çağrı sayısı hem de yürütme süresi açısından görüntüleyin ve gözlemleyin :

Gecikme ve TBG çağrılarını gözlemlemek için kullanılan daha ayrıntılı bir araç da Stackdriver Trace özelliğidir. Ancak bu özelliği kullanabilmek için işlevlerimizde birkaç değişiklik yapmamız gerekir:

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

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

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 aşağıdaki şekilde değiştirerek asıl 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 işlem, 300 milisaniye durakladıktan sonra işlev tarafından döndürülen mesaja rastgele bir emoji ekler.

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

Kaydet'i tıklamayı unutmayın.

Şimdi Cloud Shell'e dönün ve yeni dağıtılan işlevde biraz yük oluşturmak için şu komutu çağırın :

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

Kodunuzda başka kurulum gereksinimi ve özel izleme kitaplığı olmaksızın üretilen iz listesini gözlemlemeye hazırız.

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

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

Bu durum, işlevimizde başlatılan gecikmenin 300 ms'de ölçüldüğünü açıkça ifade etmelidir.

Bu grafikteki her nokta, zaman damgası, HTTP yöntemi ve durumu, etiketleri, ilgili günlük girişine yönlendiren bir bağlantı ve işlevin yaptığı sonraki RPC çağrısı gibi ayrıntılı bilgileri görüntüleyebileceğiniz bir istektir :

Yakınlaştırmak istiyorsanız grafiği tıklayıp sürükleyin :İz grafiğinde özel bir zaman aralığı seçme

Uzaklaştırmak için sayfanın üst kısmındaki "Yakınlaştırmayı Geri Al" düğmesini tıklayın.

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

Şimdi soldaki menüde İzler ve Genel Bakış bölümüne gidin :

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

... ayrıca URI istek filtresi, HTTP yöntemi, HTTP durumu ve zaman aralığının kombinasyonuna göre özel raporlar oluşturabilmenizi sağlar. Oluşturulan değerleri bir zaman aralığıyla karşılaştırmanıza da olanak tanır :

Doğru zaman aralıklarını ayarlamayı planlıyorsanız ve yeterli veri noktasıyla, ilk işlev ile yeni işlev arasındaki önemli gecikme değişimini gösteren bir rapor oluşturabilirsiniz :

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

Böylece yeni bir bulut işlevinin dağıtımı, günlükler arasında gezinme ve istek izlerini gözlemleme konularındaki codelab'imiz sona erdi.

Cloud Functions ve Stackdriver araçları, kullanılmadığında ücret ödemeyecek olan sunucusuz platformlardır. Ancak iyi bir bulut vatandaşı olabilmemiz için işlevimizi silmemiz gerekiyor.

Cloud Functions'a genel bakış sayfasında hello-monitor işlevini seçmeniz ve"quot;delete&quot"düğmesini tıklamanız yeterlidir.

Cloud Functions günlük kaydı ve izleri içeren bu basit başlangıç kod laboratuvarının sonuna geldik.

Bununla ilgili bazı takip mesajlarını aşağıda bulabilirsiniz :

/