Bu eğitimde, Google Stackdriver'ın özelliklerini keşfedecek ve Google Cloud Platform uygulamalarınızla ilgili aşağıdaki işlemleri nasıl yapacağınızı öğreneceksiniz:
- App Engine, Compute Engine ve Container Engine'de çalışan uygulamalarınızda hata ayıklama anlık görüntüsü alın.
- Uygulama günlüklerini görüntüleyin.
- Metrikleri ayarlayın, izleyin ve uyarılar alın.
- API çağrılarınızı izleyin ve yanıt süreleri ile kodunuzdaki olası darboğazlar hakkında ayrıntılı bilgi edinin.
- Uygulamanızı dağıtmanıza gerek kalmadan çalışan bir uygulamaya günlük noktaları ekleyin. Bu gerçekten benzersiz (ve umarız faydalı) bir özelliktir.
Bu eğitimde, aşağıdaki işlemleri sıfırdan yapacağız:
- Google Cloud Platform projesi oluşturun (özellikle App Engine)
- Google Cloud Platform projesi kaynak deposunu ayarlama
- Github'da bulunan standart Guestbook Python Uygulaması kaynağını kullanın.
- Kodu dağıtma
- Çalışan uygulamanın hata ayıklama anlık görüntülerini nasıl alabileceğinizi öğrenin.
- Günlük kaydı ve uygulama çağrısı izlerine bakma
- Mevcut çalışan uygulamaya logpoint'ler ekleyin. Bu özellik ilk olarak şu blog yayınında ele alınmıştır : Uygulama günlüklerini yeniden başlatma olmadan uygulamaya ekleme
Haydi başlayalım.
Bu içerik ilk olarak Romin Irani tarafından oluşturulmuş ve burada yayınlanmıştır.
Kendi hızınızda ortam kurulumu
Henüz bir Google Hesabınız (Gmail veya Google Apps) yoksa oluşturmanız gerekir. Google Cloud Platform Console'da (console.cloud.google.com) oturum açın ve yeni bir proje oluşturun:
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 size birkaç dolardan fazla maliyet getirmemelidir. Ancak daha fazla kaynak kullanmaya karar verirseniz veya kaynakları çalışır durumda bırakırsanız maliyet daha yüksek olabilir (bu belgenin sonundaki "temizleme" bölümüne bakın).
Google Cloud Platform'un yeni kullanıcıları 300 ABD doları değerindeki ücretsiz deneme sürümünden yararlanabilir.
Google Cloud Shell
Bu codelab'de, Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacağı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 sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde iyileştirilir. Bu nedenle, bu codelab için ihtiyacınız olan tek şey bir tarayıcıdır (Chromebook'ta da çalışır).
Google Cloud Shell'i etkinleştirmek için geliştirici konsolunda sağ üst taraftaki düğmeyi tıklamanız yeterlidir (ortamın sağlanması ve bağlantının kurulması yalnızca birkaç dakika sürer):
Ardından hizmet şartlarını kabul edip "Cloud Shell'i başlat" bağlantısını tıklayın:
Cloud Shell'e bağlandıktan sonra kimliğinizin zaten doğrulandığını 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>
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 konsol kontrol panelinde arayın:
ÖNEMLİ: 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. Bölgeler ve Alt Bölgeler belgelerinden daha fazla bilgi edinebilirsiniz.
Etkinleştirilen Stackdriver API'lerini inceleyin
Projeniz için etkinleştirilen API'lere göz atalım. Aşağıda gösterildiği gibi, API Kontrol Paneli'ni bulmak için arama çubuğunu kullanın.
Projeniz için etkinleştirilen API'leri inceleyin :
Her Google Cloud Platform projesi özel Git barındırma hizmeti sunar ancak çalışmak için önce varsayılan bir depo oluşturmamız gerekir. Konsol arama kutusunu kullanarak Source Repositories'e gidin :
"default" adlı yeni bir kod deposu oluşturmak için "CREATE REPOSITORY" (DEPO OLUŞTUR) seçeneğini tıklayın:
Şimdi Cloud Shell'i kullanarak bu dizini Google Cloud Shell örneğimize klonlayacağız. Bunu yapmak için önce Google Cloud Shell örneğimizde bir dizin oluşturalım ve aşağıda gösterildiği gibi bu dizine gidelim (örnek çıktı):
mkdir stackdriver-demo
cd stackdriver-demo/
Şimdi, aşağıdaki gcloud komutuyla varsayılan depoyu klonlayabiliriz:
gcloud source repos clone default
Görmeniz gereken konsol çıkışı şudur :
Cloning into '/home/gcp123_student/default'...
warning: You appear to have cloned an empty repository.
Project [qwiklabs-gcp-1234abc1234] repository [default] was cloned to [/home/gcp123_student/default].
Mükemmel! Ayarlanan Git uzak depolarını biraz daha ayrıntılı inceleyelim. Bu, mutlaka yapılması gereken bir işlem değildir. Yalnızca arka planda neler olduğunu daha iyi anlamanız için verilmiştir.
Oluşturulan varsayılan dizine gidin ve git remote -v
komutunu aşağıda gösterildiği gibi çalıştırın.
cd default
git remote -v
Konsol çıkışında aşağıdakine benzer bir şey görmeniz gerekir:
origin https://source.developers.google.com/p/qwiklabs-gcp-1234abc1234/r/default (fetch)
origin https://source.developers.google.com/p/qwiklabs-gcp-1234abc1234/r/default (push)
Bu işlemin, GCP projemizle ilişkili Git deposuna doğru şekilde yönlendirdiğini görebilirsiniz.
Konuk defteri uygulamasını GitHub'dan çekin.
Kullanacağımız uygulama, Guestbook adlı standart bir App Engine uygulamasıdır ve resmi Google Cloud Platform GitHub deposunda mevcuttur. Bu uygulama, kullanmaya başlamak için resmi belgelerde de yer alır. Github projesine şu adresten ulaşabilirsiniz : https://github.com/GoogleCloudPlatform/appengine-guestbook-python
Şimdi bu kodu Cloud Shell örneğimize çekeceğiz. Komut ve çıkışı burada gösterilmektedir :
git pull https://github.com/GoogleCloudPlatform/appengine-guestbook-python
Görmeniz gereken konsol çıkışı şudur :
remote: Counting objects: 485, done. remote: Total 485 (delta 0), reused 0 (delta 0), pack-reused 485 Receiving objects: 100% (485/485), 436.42 KiB | 163.00 KiB/s, done. Resolving deltas: 100% (195/195), done. From https://github.com/GoogleCloudPlatform/appengine-guestbook-python * branch HEAD -> FETCH_HEAD
Artık tüm kodlar Google Cloud Shell örneğimizde yerel olarak mevcut. Github projesinden çekilen çeşitli dosyaları görebilirsiniz.
Cloud Shell'i kullanarak mevcut kodu proje Git deposuna gönderme
Şimdi bu kodu GCP projesi Git deposuna gönderelim. Böylece kodumuz için kesme noktaları, günlük noktaları ve daha fazlasını ayarlayabiliriz. Kaynak kodunuzu bağlamak için doğrudan GitHub, yerel makineniz ve diğer yöntemlerle entegrasyon yapabileceğinizden bu adımın zorunlu olmadığını unutmayın.
Ancak buradaki amacımız doğrultusunda bu kodu GCP projesi Git deposuna göndereceğiz. Bu işlem, aşağıda gösterildiği gibi standart git push komutuyla yapılır:
git push origin master
Görmeniz gereken konsol çıkışı şudur :
Counting objects: 485, done. Compressing objects: 100% (280/280), done. Writing objects: 100% (485/485), 436.42 KiB | 0 bytes/s, done. Total 485 (delta 195), reused 485 (delta 195) remote: Storing objects: 100% (485/485), done. remote: Processing commits: 100% (152/152), done. To https://source.developers.google.com/p/qwiklabs-gcp-1234abc1234/r/default * [new branch] master -> master
Şimdi GCP Cloud Console'a ve özellikle de Geliştirme bölümüne geri dönün. Kaynak kodu'nu tıkladığınızda varsayılan depoda tüm proje dosyalarını görebilirsiniz. Örnek çıkış aşağıda gösterilmiştir:
Artık konuk defteri App Engine uygulamamızı dağıtmaya hazırız. Uygulamayı dağıtmak için Google Cloud Shell'de ve varsayılan dizinde olduğunuzdan emin olun. Aşağıda gösterildiği gibi gcloud app deploy
komutunu kullanın:
gcloud app deploy --version 1
Bölge seçmeniz istendiğinde [1] us-east1'i seçin.
Görmeniz gereken konsol çıkışı şudur :
You are about to deploy the following services: — qwiklabs-gcp-1234abc1234/default/1 (from [/home/gcp123-student/default/app.yaml]) Deployed URL: [https://qwiklabs-gcp-1234abc1234.appspot.com] Do you want to continue (Y/n)? Y Beginning deployment of service [default]... File upload done. Updating service [default]...done. Deployed service [default] to https://qwiklabs-gcp-1234abc1234.appspot.com]
Uygulama dağıtma komutuna bir sürüm parametresi sağladığımızı unutmayın. Bu öğeye "1"
değeri verildi.
Guestbook uygulaması kalıcılık için Google Cloud Datastore'u kullandığından Datastore dizinlerini güncellememiz gerekir. Dizinler index.yaml
dosyasında belirtilir ve gcloud datastore create-indexes
komutunu aşağıda gösterildiği gibi kullanırız:
gcloud datastore create-indexes index.yaml
Görmeniz gereken konsol çıkışı şudur :
You are about to update the following configurations: — qwiklabs-gcp-1234abc1234/index From: [/home/gcp123_student/default/index.yaml] Do you want to continue (Y/n)? Y
Datastore dizinlerinin güncellenmesi biraz zaman alabilir. Durumu kontrol etmek için "Datastore indexes"i arayın ve Indexes'ı (Dizinler) tıklayın. Dizinler oluşturulurken aşağıda gösterildiği gibi "Dizin oluşturma" değerine sahip bir Durum görürsünüz:
1. sürümdeki uygulamamızın dağıtılıp dağıtılmadığını ve kullanıma sunulup sunulmadığını kontrol etmek için Compute → App Engine'e gidip aşağıdaki resimde gösterildiği gibi Versions'ı tıklayabiliriz:
Artık her şey yolunda görünüyor. https://<PROJECT_ID>.appspot.com
adresine giderek projenize göz atabilirsiniz. Veri deposu dizinlerinin hazır olması birkaç dakika sürebilir. Bu nedenle, uygulama hata verirse (örneğin: Dahili Sunucu Hatası) birkaç dakika sonra tekrar deneyin.
Şimdi oturum açarak ve aşağıda gösterildiği gibi birkaç konuk defteri girişi oluşturarak uygulamayı kullanalım:
Mükemmel! Artık Stackdriver özelliklerini incelemeye başlayabiliriz.
Öncelikle, çalışan uygulamamızın anlık görüntülerini nasıl alabileceğimize bakalım. Anlık görüntüler, belirli bir kod parçasında hata ayıklamak, değişkenleri incelemek ve daha fazlası için kullanışlıdır. Tüm bu işlemler, uygulamanız yayınlanmaya devam ederken gerçekleşir. Bu özellik, uygulamanızla ilgili bir sorun bildirimi almanız ve hata ayıklamayı deneyip uygulamanızda neler olduğunu görmek, bir dizi değişkeni incelemek, koşullu olarak anlık görüntü almak vb. istediğiniz durumlarda çok faydalıdır.
Şimdi bunu Guestbook uygulaması için yapalım. Ana sayfayı isteyen olursa anlık görüntü isteyeceğiz. Özellikle de Datastore'da bulunan selamlama listesini aldığı anlık görüntüyü isteyeceğiz.
Bunun kodu guestbook.py
dosyasında bulunur. Özellikle, selamlama listesi veri deposundan alındıktan sonra çalışma zamanında kodu incelemeye başlamak istiyoruz. Bu işlem 72. satırda yapılır. Bu nedenle, 72. satırın yürütüldüğünü bilmek için 74. satıra bir kesme noktası koyabiliriz.
Bunu yapmak için App Engine sürüm görünümünde "Hata ayıklama"yı tıklayın veya Stackdriver → Hata ayıklama'ya gidin . Bu işlem, aşağıdaki ekranın gösterilmesine neden olur. Yapmanız gereken, soldaki dosyayı (guestbook.py
) seçip gösterildiği gibi satır numarasını tıklamaktır.
Bu durumda, yukarıdaki kırmızı kutuda vurgulanan ve anlık görüntünün tetiklenmesini beklediğini belirten bir mesaj gösterilir. Şimdi tek yapmamız gereken
https://<PROJECT_ID>.appspot.com
.
Bunu yaptığınızda anlık görüntü etkinleştirilir ve aşağıdaki şekilde gösterildiği gibi Değişkenler ve Çağrı yığını bölümlerinin doldurulduğunu görürsünüz. Değişkenlerin nasıl görüntülendiğine bakın ve değerleri kontrol etmek için bunları genişletebilirsiniz. Bu özellik çok faydalı.
Örneğin, selamlama değişkenini genişletirseniz oluşturduğunuz misafir defteri girişlerinin sayısına karşılık gelen kayıtları görürsünüz.
Çok kullanışlı bir özellik de istediğiniz zaman anlık görüntü alabilmektir. İstediğiniz zaman kamera simgesini tıklamanız yeterlidir. Aşağıda gösterildiği gibi, anlık görüntünün çekilmesini beklemeye devam eder:
Belirli değişkenleri izlemek için aşağıdaki örnekte gösterildiği gibi İfadeler alanını kullanabilirsiniz. Örneğin, değişken bir selamlama olduğunu ve anlık görüntü alındığı anda değerini incelemek istediğimizi varsayalım. Aşağıdaki ekran görüntüsünde gösterildiği gibi selamlama değişkenini ekleyebiliriz. Anlık görüntüye ulaşıldığında, gösterilen değerlerle doldurulur.
Anlık görüntünün yalnızca belirli bir koşulda etkinleştirilmesini istiyorsanız aşağıdaki gibi Koşul alanını kullanabilirsiniz. Burada, anlık görüntünün yalnızca selamlama sayısı 1'den büyükse alınması gerektiğini belirtiyoruz. İsterseniz bu özelliği deneyebilirsiniz.
Web uygulamanızın performansının belirlediğiniz koşulları karşıladığından emin olmanız çok önemlidir. Stackdriver Trace, uygulamalarınızdaki gecikmeyi anlamanıza yardımcı olan önemli bir araçtır.
Tüm App Engine uygulamalarında varsayılan olarak etkinleştirilir ve çeşitli çağrılarla birlikte tüm uç noktalarımız için çok kullanışlı performans ayrıntıları sağlar.
Bizim örneğimizde, ana sayfaya ("/") gidip misafir defteri girişlerini görüntülüyor veya ekliyoruz. Bu, Trace'in gecikme hakkında daha fazla bilgi vermesi için yeterlidir. Stackdriver Traces Genel Bakış'a gidin. Aşağıdaki ekran görüntüsünü görürsünüz. Son izlemelere ve bunların gecikmelerine dikkat edin.
İzlerden herhangi birini (ör. URI bağlantısını) tıkladığımızda aşağıdaki gibi ayrıntılı iz gösterilir:
Gecikmenin dökümünü ve hangi aramaların en çok zaman aldığını nasıl gösterdiğine dikkat edin. Yukarıdaki görselleştirmeden, veri deposu sorgusunun zaman aldığını görebilirsiniz. Bu darboğazı azaltmak için verileri önbelleğe almayı deneyebilirsiniz. Tüm bunlar yine uygulamanıza bağlıdır ve çağrı izlemenizde hangi alanların yeniden düzenlenmesi gerekebileceğini belirlemek için çok faydalı olabilir.
Uygulama günlüklerinizi istediğiniz zaman Stackdriver Logging'e giderek (aşağıda gösterildiği gibi) görüntüleyebilirsiniz. Çeşitli GCP Hizmetleri → Günlük Türleri → Günlük Düzeyi → Tarih ve daha fazlasından başlayarak birden fazla filtre kullanılabilir.
Aşağıdaki ekran görüntüsünde, App Engine uygulamamızın günlükleri ve varsayılan 1. sürüm gösterilmektedir.
Son olarak, sunduğu olanaklar konusunda sizi heyecanlandıracak bir özelliğe göz atalım. Genellikle geliştiriciler olarak kodumuza günlük ifadeleri yerleştirmek, kodumuzu dağıtmak ve ardından günlüğün bilmek istediğimiz her şeyi bize söylemesini ummak için elimizden geleni yaparız.
Ancak bunun yeterli olmadığını ve yalnızca hata ayıklama sırasında belki de birkaç günlük ifadesi daha eklememiz gerektiğini fark ederiz. Normal iş akışı, kodunuzu değiştirip ek günlük ifadesini yerleştirmek, yeniden dağıtmak ve izlemektir.
Bu iyi bir yöntem olsa da çalışan uygulamanıza bu günlük ifadelerini (bunlara artık günlük noktaları diyelim) ekleyebilseydiniz nasıl olurdu? Bu sayede uygulamayı durdurma, kodu değiştirme ve yeniden dağıtma sürecinden geçmemize gerek kalmaz. Bunun yerine, logpoint desteğini kullanarak logpoint listemizi uygulamamızın dışından yönetebiliriz.
Hâlâ Cloud Shell'de olduğumuz için, yapılandırdığımız mevcut günlük noktaları listesini (açıkça 0 olmalıdır) kontrol edelim. Bu işlem, aşağıda gösterildiği gibi gcloud
komutuyla yapılır:
gcloud debug logpoints list
Görmeniz gereken konsol çıkışı şudur :
Debug target not specified. Using default target: default-1 Listed 0 items.
Şimdi, çalışan uygulamaya bir logpoint ekleyeceğiz. Logpoint eklemek için aşağıdakileri yapmamız gerekir:
- Kaynak kodu dosyasını ve günlük noktasını eklemek istediğimiz satır numarasını belirleyin.
- Günlük mesajını belirleyin. Bu günlük mesajı sabit kodlanmış veya ifade olabilir.
Bizim durumumuzda, aşağıdaki örnekte gösterildiği gibi logpoints create komutuyla guestbook.py dosyasının 74. satırına bir günlük noktası ekleyeceğiz:
gcloud debug logpoints create guestbook.py:74 "Fetched greetings from Datastore. Count of greetings : {len(greetings)}"
Görmeniz gereken konsol çıkışı şudur :
Debug target not specified. Using default target: default-1 — id: 53538243519d4-f9a0-bdbce location: guestbook.py:74 logLevel: INFO logMessageFormat: Fetched greetings from Datastore. Count of greetings : {len(greetings)} condition: None status: ACTIVE
filename:linenumber
ve yukarıdaki günlük mesajı sağladık. Günlük mesajımızın, veri deposundan aldığımız selamlama sayısını yazdıracak bir ifade de içerdiğini unutmayın.
Komut, günlük noktasının eklendiği mesajıyla geri döner. Cloud Shell'imizden bir ekran görüntüsü aşağıda gösterilmektedir:
Şimdi, logpoints list komutunu çalıştırırsanız aşağıdaki çıkışı görürsünüz:
gcloud debug logpoints list
Görmeniz gereken konsol çıkışı şudur :
Debug target not specified. Using default target: default-1 STATUS LOCATION CONDITION LOG_LEVEL LOG_MESSAGE_FORMAT ID ACTIVE guestbook.py:74 INFO Fetched greetings from Datastore. Count of greetings : {len(greetings)} 53538243519d4-f9a0-bdbce
Bunu uygulamalı olarak görmek için https://<PROJECT_ID>.appspot.com
adresindeki ana sayfaya tekrar gidebiliriz. Bu işlem, kodu ve dolayısıyla logpoint'imizi çağırır. Bu işlemin varsayılan olarak uygulama günlüklerimize kaydedileceğini unutmayın. Bu nedenle, aşağıda gösterildiği gibi Stackdriver Logging'i bir kez daha ziyaret etmemiz yeterlidir:
İlgili isteği tıklayın. İşte bu kadar! Ayrıntılarda, logpoint'imizin tetiklendiğini ve günlük mesajının gösterildiğini görürsünüz.
Bu eğiticiyi beğendiğinizi umuyoruz. Bu doküman, Stackdriver platformunun sunduğu özelliklerden yalnızca birkaçına değinmektedir. Keşfedebileceğiniz daha pek çok şey var. Daha fazla Google Cloud Platform eğitimi için bu Codelab'in orijinal yazarı Romin Irani'nin https://rominirani.com/ adresindeki bloguna göz atın.
Ayrıca "Using Stackdriver's monitoring and logging to get better visibility into your application's health" (Uygulamanızın durumu hakkında daha ayrıntılı bilgi edinmek için Stackdriver'ın izleme ve günlük kaydı özelliklerini kullanma) adlı diğer codelab'e de göz atabilirsiniz.
Geri bildirimde bulunmak veya bu codelab ile ilgili sorunları bildirmek isterseniz lütfen bu sayfanın sol alt kısmındaki "Lütfen bir hata bulun" bağlantısını kullanın.