Bermigrasi ke Cloud Logging

Logging untuk runtime generasi kedua berbeda dengan runtime generasi pertama. Salah satu perubahan terbesar saat mengupgrade ke runtime yang lebih baru adalah logging yang terintegrasi sebelumnya dengan App Engine tidak didukung di runtime generasi kedua, dan log tidak otomatis berkorelasi. Jika bermigrasi ke runtime generasi kedua, Anda harus menggunakan library klien Cloud Logging.

Panduan ini menjelaskan cara mengupdate aplikasi Anda untuk menggunakan Cloud Logging dan mendapatkan fitur pemfilteran dan korelasi log yang hampir sama seperti yang tersedia dengan integrasi logging di App Engine.

Cloud Logging adalah sistem pengelolaan log real time dengan dukungan penyimpanan, penelusuran, analisis, dan pemantauan. Cloud Logging otomatis mengumpulkan log dari resource Google Cloud. Anda juga dapat mengumpulkan log dari aplikasi, resource lokal, dan resource dari penyedia cloud lainnya.

Perbedaan utama

Tabel berikut membahas perbedaan logging antara runtime generasi pertama dan kedua:

Runtime generasi pertama Runtime generasi kedua
Log permintaan dan aplikasi (juga disebut log aplikasi) App Engine menyematkan semua log aplikasi dalam log permintaan. Logging pada runtime generasi pertama menggunakan kolom protoPayload.line.logMessage dari log permintaan untuk menyematkan log aplikasi. App Engine tidak menyematkan log aplikasi dalam log permintaan terkait. App Engine menghilangkan atribut protoPayload.line dalam log permintaan. Log aplikasi dirutekan berdasarkan metode logging Anda:
  • stdout dan stderr: Merutekan log seperti print() ke logs/stdout atau logs/stderr.
  • Modul logging Python setelah menyiapkan klien Cloud Logging: Merutekan semua log yang ditulis oleh modul logging root Python, seperti logging.info() dan logging.error() ke logs/python.
    Jika library klien Cloud Logging untuk Python tidak disiapkan untuk korelasi, modul logging root Python akan dirutekan ke logs/stderr secara default.
Melihat log di Logs Explorer Runtime generasi pertama hanya berisi satu jenis log, appengine.googleapis.com/request_log. Saat meluaskan log permintaan, Anda dapat melihat log aplikasi bertingkat di bawahnya. Runtime generasi kedua mencakup log dari berbagai jenis log seperti, log permintaan di appengine.googleapis.com/request_log, stdout, stderr, logs/python, dan lainnya, bergantung pada cara aplikasi Anda memunculkan log. Log internal Google juga tersedia di /var/log/google_init.log.

Karena log aplikasi tidak otomatis berkorelasi dengan log permintaan, langkah tambahan diperlukan untuk menampilkan tampilan bertingkat log permintaan dan aplikasi di Logs Explorer. Untuk mengetahui informasi selengkapnya, lihat Menggabungkan log permintaan dengan log aplikasi dan Melihat log terkait di Logs Explorer.
Integrasi Cloud Trace Terintegrasi secara otomatis dengan Cloud Trace untuk pengumpulan data latensi. Anda harus mengintegrasikan aplikasi secara manual dengan Cloud Trace untuk mengumpulkan data latensi dari App Engine. Untuk mengetahui informasi selengkapnya, lihat Instrumen untuk Cloud Trace.
Korelasi tingkat error Mencatat error yang ditampilkan di log permintaan App Engine dengan tingkat keparahan ERROR. Error Reporting secara otomatis menghubungkan detail ini di dasbor Error Reporting. Secara default, App Engine tidak mengintegrasikan Error Reporting dalam runtime generasi kedua. Untuk menyiapkan integrasi logging dengan Error Reporting, lihat Menginstrumentasikan aplikasi dengan menggunakan library klien .
Tingkat keparahan Logs Explorer menetapkan tingkat keparahan untuk meminta log, dan tingkat keparahan mencerminkan tingkat keparahan tertinggi dari setiap entri log aplikasi yang terkait dengan entri log permintaan. Misalnya, jika permintaan mengakibatkan aplikasi Anda memunculkan entri log peringatan, Logs Explorer akan menampilkan ikon peringatan di sebelah entri log permintaan. Saat memperluas entri permintaan, Anda akan melihat entri log peringatan bertingkat dalam entri permintaan. Secara default, semua log permintaan memiliki tingkat keparahan DEFAULT atau INFO. Meskipun log permintaan Anda terhubung dengan log aplikasi, dan Logs Explorer dikonfigurasi untuk menampilkan log terkait, log permintaan tidak mencerminkan tingkat keparahan log aplikasi terkait.
API Logservice Logservice API adalah bagian dari SDK layanan yang dipaketkan. Logservice API telah dihapus dari Bundled Services SDK. Untuk informasi selengkapnya, lihat daftar API yang tersedia.

Sebelum mulai memigrasikan

  1. Aktifkan Cloud Logging API di project yang berisi aplikasi Anda.

    Mengaktifkan API

  2. Pastikan aplikasi Anda memiliki izin untuk menulis log.

    Secara default, akun layanan default aplikasi Anda memiliki izin untuk menulis log.

    Jika aplikasi Anda menggunakan akun layanan yang berbeda, atau jika Anda telah mengubah izin untuk akun layanan default, pastikan akun yang Anda gunakan memiliki izin logging.logEntries.create untuk menulis log.

  3. Pelajari berbagai jenis log di App Engine.

Ringkasan proses migrasi

Untuk memigrasikan aplikasi Anda agar menggunakan Cloud Logging:

  1. Menginstal Library Klien Cloud untuk Cloud Logging
  2. Menulis log dengan Cloud Logging
  3. Menghubungkan log permintaan dengan log aplikasi
  4. Lihat log
  5. Menguji aplikasi

Menginstal Library Klien Cloud untuk Cloud Logging

Untuk menginstal dan memperbarui file konfigurasi, tambahkan Library Klien Cloud untuk Cloud Logging ke daftar dependensi Anda dalam file requirements.txt, seperti berikut:

google-cloud-logging

Menulis log dengan modul logging Python standar

Di setiap file yang menulis entri log:

  1. Impor library klien Cloud Logging.
  2. Buat instance klien Cloud Logging.
  3. Jalankan metode setup_logging() klien Cloud Logging, yang memasang pemroses default-nya sebagai pengendali logging untuk logger root Python.

Contoh:

# Imports the Cloud Logging client library
import google.cloud.logging

# Instantiates a client
client = google.cloud.logging.Client()

# Retrieves a Cloud Logging handler based on the environment
# you're running in and integrates the handler with the
# Python logging module. By default this captures all logs
# at INFO level and higher
client.setup_logging()

Setelah pengendali terpasang, setiap log pada level INFO atau yang lebih tinggi yang dimunculkan dalam aplikasi Anda akan dikirim ke Logging secara default:

# Imports Python standard library logging
import logging

# The data to log
text = "Hello, world!"

# Emits the data using the standard logging module
logging.warning(text)

Menggabungkan log permintaan dengan log aplikasi

Beberapa fitur yang tersedia di runtime generasi pertama seperti korelasi otomatis log permintaan dengan log aplikasi, tidak tersedia di runtime generasi kedua.

Aplikasi yang menggunakan runtime generasi kedua dapat mencapai perilaku logging bertingkat yang serupa dengan runtime generasi pertama dengan:

  • Menyiapkan klien Cloud Logging di aplikasi Anda dan menghubungkan log.
  • Menggunakan ID trace dengan stdout dan stderr.

Perilaku logging dalam runtime generasi pertama dan generasi kedua berbeda dalam hal berikut:

  • Pada runtime generasi pertama, App Engine menyematkan semua log aplikasi yang dihasilkan saat menangani permintaan ke kolom protoPayload.line.logMessage di log permintaan. Log ini dapat dilihat di Logs Explorer melalui appengine.googleapis.com/request_log.

    Gambar berikut menunjukkan log aplikasi dan permintaan yang berkorelasi dalam runtime generasi pertama:

    Logging di runtime generasi pertama

  • Di runtime generasi kedua, App Engine menghilangkan atribut protoPayload.line dalam log permintaan. Konten log aplikasi tidak ada dalam log permintaan JSON di Logs Explorer. Setiap log aplikasi akan muncul secara terpisah berdasarkan nama log-nya di Logs Explorer.

    Gambar berikut menunjukkan log aplikasi dan permintaan yang terpisah dalam runtime generasi kedua:

    Logging di runtime generasi kedua

Bagian berikut membahas cara menggunakan klien Cloud Logging atau logging terstruktur dengan stdout dan stderr untuk menghubungkan log.

Menggunakan modul logging Python

Untuk menambahkan korelasi permintaan ke log aplikasi yang dicatat ke dalam log 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 Anda dapat melihat entri log terkait di Log Explorer.

Menggunakan stdout dan stderr

Jika Anda menggunakan stdout dan stderr untuk menulis entri log, entri ini akan muncul di Logs Explorer. Namun, untuk mengaktifkan pemfilteran dan korelasi dengan log permintaan, Anda perlu memformat entri sebagai objek JSON dan memberikan metadata tertentu. Untuk informasi selengkapnya tentang pendekatan ini, lihat Logging terstruktur. Untuk log aplikasi terstruktur, menghubungkan entri di log aplikasi dengan log permintaan, memerlukan ID rekaman aktivitas permintaan. Ikuti petunjuk untuk menghubungkan pesan log:

  1. Ekstrak ID rekaman aktivitas dari header permintaan X-Cloud-Trace-Context.
  2. Dalam entri log terstruktur Anda, tulis ID ke kolom bernama logging.googleapis.com/trace. Untuk mengetahui informasi selengkapnya tentang header X-Cloud-Trace-Context, lihat Memaksa permintaan agar dilacak.

Lihat log

Anda dapat melihat log aplikasi dan log permintaan dalam beberapa cara:

Menggunakan Logs Explorer

Anda dapat melihat log aplikasi dan permintaan menggunakan Logs Explorer:

  1. Buka Logs Explorer di konsol Google Cloud:

    Buka Logs Explorer

  2. Pilih project Google Cloud yang ada di bagian atas halaman.

  3. Di Resource Type, pilih GAE Application.

Anda dapat memfilter Logs Explorer berdasarkan layanan, versi, dan kriteria lainnya untuk Log Explorer. 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 yang terkait di Logs Explorer

Di Logs Explorer, untuk melihat entri log turunan yang terkait dengan entri log induk, luaskan entri log tersebut.

Misalnya, untuk menampilkan entri log permintaan App Engine dan entri log aplikasi, lakukan hal berikut:

  1. Di panel navigasi konsol Google Cloud, pilih Logging, lalu pilih Logs Explorer:

    Buka Logs Explorer

  2. Di Resource Type, pilih GAE Application.

  3. Untuk melihat dan menghubungkan log permintaan, di Log Name, pilih request_log. Atau, untuk menghubungkan menurut log permintaan, klik Correlate by, lalu pilih request_log.

    Menghubungkan log

  4. Di panel Query results, untuk meluaskan entri log, klik Expand. Saat meluaskan, 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 di log aplikasi dan log permintaan tertentu, dengan asumsi aplikasi menggunakan library google-cloud-logging.

Gambar berikut menunjukkan log aplikasi yang dikelompokkan menurut kolom trace:

Entri log aplikasi disusun bertingkat di entri log permintaan.

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:

Menguji aplikasi Anda

Migrasi berhasil jika Anda dapat men-deploy aplikasi tanpa error. Untuk memastikan bahwa Cloud Logging berfungsi, ikuti langkah-langkah berikut:

  1. Buka Logs Explorer, lalu luaskan entri log permintaan.

    Buka Logs Explorer

  2. Pastikan log aplikasi yang dihasilkan oleh aplikasi Anda saat memproses permintaan ditempatkan di dalam log permintaan.

  3. Jika semua endpoint aplikasi Anda berfungsi seperti yang diharapkan, gunakan pemisahan traffic untuk secara perlahan meningkatkan traffic aplikasi yang telah diupdate. Pantau aplikasi dengan cermat untuk menemukan masalah sebelum mengarahkan lebih banyak traffic ke aplikasi yang telah diupdate.