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.

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
- 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.)
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.
- 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).
- Cloud Shell'i Cloud Console'dan etkinleştirmek için Cloud Shell'i etkinleştir 'i
tıklamanız yeterlidir (ortamın sağlanması ve bağlantının kurulması yalnızca birkaç saniye sürer).
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:
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>
- 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.

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

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

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

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.

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.

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

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
debugdü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
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.

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:
- Hayat kurtaran
node-emojipaketini bağımlılık olarak ekleyin. - Node-emoji modülünü kullanmak ve biraz gecikme eklemek için işlev kodunu güncelleyin.
- 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.

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:

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.

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

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.

Yakınlaştırmak için grafiği tıklayıp sürüklemeniz yeterlidir. 
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:

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

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.

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.


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.

9. Sırada ne var?
Daha fazla bilgi için aşağıdaki makaleleri inceleyebilirsiniz:
/