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.

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ı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).
- 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 İşlev Oluştur'u tıklayın.

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

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

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 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
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ö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.

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:
- 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 Functions işlevinin 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 izlemeleri HTTP yöntemine (GET, POST, DELETE), HTTP durumuna (2XX, 3XX) veya istek filtresini kullanarak filtreleyebilirsiniz.
Soldaki menüde 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ığı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.

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 ö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.

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