Halaman ini menjelaskan log yang tersedia untuk aplikasi App Engine, dan cara menulis, mengaitkan, dan melihat entri log.
App Engine mengumpulkan dua jenis log:
Log permintaan: Log permintaan yang dikirim ke aplikasi Anda. Secara default, App Engine otomatis menampilkan entri log untuk setiap permintaan HTTP yang diterima aplikasi.
Log aplikasi: Entri log yang dikeluarkan oleh aplikasi App Engine berdasarkan entri log yang Anda tulis ke framework atau file yang didukung.
App Engine secara otomatis mengirimkan log permintaan dan log aplikasi ke agen Cloud Logging.
Menulis log aplikasi
App Engine otomatis mengeluarkan log untuk permintaan yang dikirim ke aplikasi Anda, sehingga Anda tidak perlu menulis log permintaan. Bagian ini membahas cara menulis log aplikasi.
Saat Anda menulis log aplikasi dari aplikasi App Engine, log akan diambil secara otomatis oleh Cloud Logging, selama log ditulis menggunakan metode berikut:
Berintegrasi dengan Cloud Logging
Anda dapat mengintegrasikan aplikasi App Engine dengan Cloud Logging. Pendekatan ini memungkinkan Anda menggunakan semua fitur yang ditawarkan oleh Cloud Logging dan hanya memerlukan beberapa baris kode khusus Google.
Anda dapat menulis log ke Cloud Logging dari aplikasi Python menggunakan pengendali logging Python standar, atau dengan menggunakan library klien Cloud Logging API untuk Python secara langsung. Saat menggunakan pengendali logging Python standar, Anda harus memasang pengendali Cloud Logging ke pengendali root Python. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan Cloud Logging untuk Python.
Menulis log terstruktur ke stdout
dan stderr
Secara default, App Engine menggunakan library klien Cloud Logging untuk mengirim log.
Namun, metode ini tidak mendukung logging terstruktur. Anda hanya dapat menulis log terstruktur menggunakan stdout/stderr
. Selain itu, Anda juga dapat mengirim string teks ke
stdout
dan stderr
. Secara default, payload log adalah
string teks yang disimpan di kolom textPayload
entri log. String ini
muncul sebagai pesan di Logs Explorer, command line, dan
Cloud Logging API, serta dikaitkan dengan layanan App Engine
dan versi yang menampilkannya.
Untuk mendapatkan lebih banyak nilai dari log, Anda dapat memfilter string ini di Logs Explorer
berdasarkan tingkat keparahan. Untuk memfilter string ini, Anda perlu memformat string sebagai
data terstruktur.
Untuk melakukannya, Anda menulis log dalam bentuk satu baris JSON serialisasi. App Engine mengambil dan mengurai baris JSON serial ini, dan menempatkannya ke kolom jsonPayload
entri log, bukan textPayload
.
Cuplikan berikut menunjukkan penulisan log terstruktur tersebut.
Dalam lingkungan standar App Engine, penulisan log terstruktur ke stdout
dan stderr
tidak mengurangi kuota permintaan penyerapan log per menit di Cloud Logging API.
Kolom JSON khusus dalam pesan
Apabila Anda menyediakan log yang terstruktur sebagai kamus JSON, beberapa kolom khusus
akan dihapus dari jsonPayload
dan ditulis ke kolom yang sesuai dalam
LogEntry yang dibuat. Hal ini sebagaimana dijelaskan dalam
dokumentasi untuk kolom khusus.
Misalnya, jika JSON Anda menyertakan properti severity
, maka JSON tersebut akan dihapus dari
jsonPayload
dan muncul sebagai entri log milik severity
.
Properti message
digunakan sebagai teks tampilan utama entri log jika ada.
Menghubungkan log permintaan dengan log aplikasi
Secara default, log tidak berkorelasi dalam runtime generasi kedua. Runtime ini memerlukan penggunaan Library Klien Cloud. Library ini tidak mendukung tingkatan, dan mengharuskan Anda untuk mengorelasi log.
Menggunakan modul logging Python
Untuk menambahkan korelasi permintaan ke log aplikasi yang dicatat oleh modul logging Python, siapkan library klien Cloud Logging.
Saat Anda menjalankan metode client.setup_logging()
saat aplikasi dimulai, metode ini akan menambahkan kolom trace
dan detail permintaan HTTP ke log aplikasi yang ditulis oleh modul logging
Python seperti, logging.info()
dan logging.error()
. Log
ini dirutekan ke logs/python
.
App Engine juga menambahkan kolom trace
ini ke log permintaan terkait,
sehingga memungkinkan Anda melihat entri log terkait di Log Explorer.
Menggunakan stdout
dan stderr
Setelah memformat entri sebagai objek JSON dan memberikan metadata tertentu, Anda dapat mengaktifkan pemfilteran dan korelasi dengan log permintaan. Untuk menghubungkan entri log permintaan dengan entri log aplikasi, Anda memerlukan ID trace permintaan. Ikuti petunjuk untuk menghubungkan pesan log:
- Ekstrak ID rekaman aktivitas dari header permintaan
X-Cloud-Trace-Context
. - Dalam entri log terstruktur Anda, tulis ID ke kolom bernama
logging.googleapis.com/trace
. Untuk mengetahui informasi selengkapnya tentang headerX-Cloud-Trace-Context
, lihat Memaksa permintaan untuk dilacak.
Untuk melihat log yang terkait, lihat Melihat entri log terkait di Logs Explorer.
Lihat log
Anda dapat melihat log aplikasi dan log permintaan dengan beberapa cara:
- Gunakan Logs Explorer dari Cloud Logging di konsol Google Cloud.
- Gunakan Google Cloud CLI untuk melihat log menggunakan gcloud.
- Baca log secara terprogram menggunakan berbagai metode.
Menggunakan Logs Explorer
Anda dapat melihat log aplikasi dan permintaan menggunakan Logs Explorer:
Buka Logs Explorer di konsol Google Cloud:
Pilih project Google Cloud yang ada di bagian atas halaman.
Di Resource Type, pilih GAE Application.
Anda dapat memfilter Logs Explorer berdasarkan layanan, versi App Engine, dan kriteria lainnya. Anda juga dapat menelusuri log untuk menemukan entri tertentu. Lihat Menggunakan Logs Explorer untuk mengetahui detailnya.
Jika Anda mengirim entri teks sederhana ke output standar, Anda tidak dapat menggunakan Logs Viewer untuk memfilter entri aplikasi menurut tingkat keparahan. Anda juga tidak dapat melihat log aplikasi mana yang sesuai dengan permintaan tertentu. Anda masih dapat menggunakan jenis pemfilteran lain di Logs Explorer, seperti teks dan stempel waktu.
Melihat entri log terkait di Logs Explorer
Di Logs Explorer, untuk melihat entri log turunan yang berkorelasi dengan entri log induk, luaskan entri log.
Misalnya, untuk menampilkan entri log permintaan App Engine dan entri log aplikasi, lakukan hal berikut:
Di panel navigasi konsol Google Cloud, pilih Logging, lalu pilih Logs Explorer:
Di Resource Type, pilih GAE Application.
Untuk melihat dan mengaitkan log permintaan, di Log Name, pilih request_log. Atau, untuk melakukan korelasi menurut log permintaan, klik Correlate by, lalu pilih request_log.
Di panel Query results, untuk meluaskan entri log, klik Expand. Saat diperluas, setiap log permintaan akan menampilkan log aplikasi terkait.
Setelah membuat filter untuk log, setiap log permintaan akan menampilkan log aplikasi yang sesuai sebagai log turunan. Logs Explorer mencapai hal ini dengan menghubungkan
kolom trace
dalam log aplikasi dan log permintaan tertentu, dengan asumsi aplikasi
menggunakan library google-cloud-logging
.
Gambar berikut menampilkan log aplikasi yang dikelompokkan berdasarkan kolom trace
:
Menggunakan Google Cloud CLI
Untuk melihat log App Engine dari command line, gunakan perintah berikut:
gcloud app logs tail
Untuk mengetahui informasi selengkapnya, lihat tail log aplikasi gcloud.
Membaca log secara terprogram
Jika ingin membaca log secara terprogram, Anda dapat menggunakan salah satu metode berikut:
- Gunakan sink log ke Pub/Sub dan skrip untuk mengambil dari Pub/Sub.
- Panggil Cloud Logging API melalui library klien untuk bahasa pemrograman Anda.
- Panggil endpoint REST Cloud Logging API secara langsung.
Kebijakan harga, kuota, dan retensi log
Untuk mengetahui informasi tentang harga yang berlaku bagi log permintaan dan aplikasi, lihat Harga untuk Cloud Logging.
Untuk mengetahui kebijakan retensi log dan ukuran maksimum entri log, baca Kuota dan batas. Jika ingin menyimpan log untuk jangka waktu yang lebih lama, Anda dapat mengekspor log Anda ke Cloud Storage. Anda juga dapat mengekspor log ke BigQuery dan Pub/Sub untuk diproses lebih lanjut.
Mengelola penggunaan resource log
Anda dapat mengontrol jumlah aktivitas logging dari log aplikasi dengan menulis lebih banyak atau lebih sedikit entri dari kode aplikasi Anda. Log permintaan dibuat secara otomatis. Jadi, untuk mengelola jumlah entri log permintaan yang terkait dengan aplikasi Anda, gunakan fitur pengecualian log dari Cloud Logging.
Masalah umum
Berikut adalah beberapa masalah logging di runtime generasi kedua:
Terkadang entri log aplikasi tidak berkorelasi dengan log permintaan. Hal ini terjadi saat pertama kali aplikasi Anda menerima permintaan dan saat App Engine menulis pesan status ke log aplikasi Anda. Untuk mengetahui informasi selengkapnya, lihat https://issuetracker.google.com/issues/138365527.
Saat Anda merutekan log dari sink log ke Cloud Storage, tujuan Cloud Storage hanya berisi log permintaan. App Engine menulis log aplikasi ke folder yang berbeda.
BigQuery gagal menyerap log karena kolom
@type
dalam log permintaan. Hal ini akan mengganggu deteksi skema otomatis, karena BigQuery tidak mengizinkan@type
dalam nama kolom. Untuk mengatasinya, Anda harus menentukan skema secara manual, dan menghapus kolom@type
dari log permintaan.Jika Anda menggunakan REST API logging, thread latar belakang akan menulis log ke Cloud Logging. Jika thread utama tidak aktif, instance tidak akan mendapatkan waktu CPU, yang menyebabkan thread latar belakang berhenti. Waktu pemrosesan log tertunda. Pada suatu titik, instance akan dihapus dan log yang belum dikirim akan hilang. Untuk menghindari hilangnya log, gunakan salah satu opsi berikut:
- Konfigurasikan Cloud Logging SDK untuk menggunakan gRPC. Dengan gRPC, log akan langsung dikirim ke Cloud Logging. Namun, hal ini dapat meningkatkan batas CPU yang diperlukan.
- Kirim pesan log ke Cloud Logging menggunakan
stdout/stderr
. Pipeline ini berada di luar instance App Engine dan tidak dibatasi.
Langkah selanjutnya
- Lihat Memantau dan mendapatkan pemberitahuan tentang latensi untuk mempelajari cara menggunakan Cloud Logging guna melihat log untuk men-debug error, dan cara menggunakan Cloud Trace untuk memahami latensi aplikasi.