Anda dapat menggunakan infrastruktur logging bawaan Apache Beam SDK untuk mencatat informasi saat menjalankan pipeline. Anda dapat menggunakan Google Cloud console untuk memantau informasi logging selama dan setelah pipeline Anda berjalan.
Menambahkan pesan log ke pipeline
Java
Apache Beam SDK untuk Java merekomendasikan agar Anda mencatat pesan pekerja melalui library Simple Logging Facade for Java (SLF4J) open source. Apache Beam SDK untuk Java menerapkan infrastruktur logging yang diperlukan sehingga kode Java Anda hanya perlu mengimpor SLF4J API. Kemudian, ia membuat instance Logger untuk mengaktifkan logging pesan dalam kode pipeline Anda.
Untuk kode dan/atau library yang sudah ada, Apache Beam SDK untuk Java menyiapkan infrastruktur logging tambahan. Pesan log yang dihasilkan oleh library logging berikut untuk Java akan dicatat:
Python
Apache Beam SDK untuk Python menyediakan paket library logging
, yang memungkinkan pekerja pipeline menampilkan pesan log. Untuk menggunakan fungsi library, Anda harus mengimpor library:
import logging
Go
Apache Beam SDK untuk Go menyediakan paket library log
,
yang memungkinkan pekerja pipeline menampilkan pesan log. Untuk menggunakan fungsi library, Anda harus mengimpor library:
import "github.com/apache/beam/sdks/v2/go/pkg/beam/log"
Contoh kode pesan log pekerja
Java
Contoh berikut menggunakan SLF4J untuk logging Dataflow. Untuk mempelajari lebih lanjut cara mengonfigurasi SLF4J untuk logging Dataflow, lihat artikel Tips Java.
Contoh WordCount Apache Beam dapat diubah untuk menghasilkan pesan log saat kata "love" ditemukan dalam baris teks yang diproses. Kode yang ditambahkan ditunjukkan dalam huruf tebal dalam contoh berikut (kode di sekitarnya disertakan untuk konteks).
package org.apache.beam.examples; // Import SLF4J packages. import org.slf4j.Logger; import org.slf4j.LoggerFactory; ... public class WordCount { ... static class ExtractWordsFn extends DoFn<String, String> { // Instantiate Logger. // Suggestion: As shown, specify the class name of the containing class // (WordCount). private static final Logger LOG = LoggerFactory.getLogger(WordCount.class); ... @ProcessElement public void processElement(ProcessContext c) { ... // Output each word encountered into the output PCollection. for (String word : words) { if (!word.isEmpty()) { c.output(word); } // Log INFO messages when the word "love" is found. if(word.toLowerCase().equals("love")) { LOG.info("Found " + word.toLowerCase()); } } } } ... // Remaining WordCount example code ...
Python
Contoh Apache Beam wordcount.py dapat diubah untuk menghasilkan pesan log saat kata "love" ditemukan dalam baris teks yang diproses.
# import Python logging module. import logging class ExtractWordsFn(beam.DoFn): def process(self, element): words = re.findall(r'[A-Za-z\']+', element) for word in words: yield word if word.lower() == 'love': # Log using the root logger at info or higher levels logging.info('Found : %s', word.lower()) # Remaining WordCount example code ...
Go
Contoh Apache Beam wordcount.go dapat diubah untuk menghasilkan pesan log saat kata "love" ditemukan dalam baris teks yang diproses.
func (f *extractFn) ProcessElement(ctx context.Context, line string, emit func(string)) { for _, word := range wordRE.FindAllString(line, -1) { // increment the counter for small words if length of words is // less than small_word_length if strings.ToLower(word) == "love" { log.Infof(ctx, "Found : %s", strings.ToLower(word)) } emit(word) } } // Remaining Wordcount example
Java
Jika pipeline WordCount yang dimodifikasi dijalankan secara lokal menggunakan DirectRunner default
dengan output yang dikirim ke file lokal (--output=./local-wordcounts
), output konsol
akan menyertakan pesan log yang ditambahkan:
INFO: Executing pipeline using the DirectRunner. ... Feb 11, 2015 1:13:22 PM org.apache.beam.examples.WordCount$ExtractWordsFn processElement INFO: Found love Feb 11, 2015 1:13:22 PM org.apache.beam.examples.WordCount$ExtractWordsFn processElement INFO: Found love Feb 11, 2015 1:13:22 PM org.apache.beam.examples.WordCount$ExtractWordsFn processElement INFO: Found love ... INFO: Pipeline execution complete.
Secara default, hanya baris log yang ditandai INFO
dan yang lebih tinggi yang dikirim ke
Cloud Logging. Untuk mengubah perilaku ini, lihat
Menetapkan Level Log Pekerja Pipeline.
Python
Jika pipeline WordCount yang dimodifikasi dijalankan secara lokal menggunakan DirectRunner default
dengan output yang dikirim ke file lokal (--output=./local-wordcounts
), output konsol
akan menyertakan pesan log yang ditambahkan:
INFO:root:Found : love INFO:root:Found : love INFO:root:Found : love
Secara default, hanya baris log yang ditandai INFO
dan yang lebih tinggi yang dikirim ke
Cloud Logging. Untuk mengubah perilaku ini, lihat
Menetapkan Level Log Pekerja Pipeline.
Jangan mengganti konfigurasi logging dengan fungsi logging.config
, karena tindakan ini dapat menonaktifkan handler log yang telah dikonfigurasi sebelumnya yang
mentransmisikan log pipeline ke Dataflow dan Cloud Logging.
Go
Jika pipeline WordCount yang dimodifikasi dijalankan secara lokal menggunakan DirectRunner default
dengan output yang dikirim ke file lokal (--output=./local-wordcounts
), output konsol
akan menyertakan pesan log yang ditambahkan:
2022/05/26 11:36:44 Found : love 2022/05/26 11:36:44 Found : love 2022/05/26 11:36:44 Found : love
Secara default, hanya baris log yang ditandai INFO
dan yang lebih tinggi yang dikirim ke
Cloud Logging.
Mengontrol volume log
Anda juga dapat mengurangi volume log yang dihasilkan dengan mengubah level log pipeline. Jika Anda tidak ingin terus menyerap beberapa atau semua log Dataflow, tambahkan Pengecualian logging untuk mengecualikan log Dataflow. Kemudian, ekspor log ke tujuan lain seperti BigQuery, Cloud Storage, atau Pub/Sub. Untuk mengetahui informasi selengkapnya, lihat Mengontrol penyerapan log Dataflow.
Pembatasan dan batas logging
Pesan log pekerja dibatasi hingga 15.000 pesan setiap 30 detik, per pekerja. Jika batas ini tercapai, satu pesan log pekerja akan ditambahkan yang menyatakan bahwa logging dibatasi:
Throttling logger worker. It used up its 30s quota for logs in only 12.345s
Penyimpanan dan retensi log
Log operasional disimpan di bucket log _Default
. Nama layanan Logging API adalah dataflow.googleapis.com
. Untuk mengetahui informasi selengkapnya
tentang jenis resource yang dimonitor dan layanan yang digunakan di
Cloud Logging, lihat Resource dan layanan yang dimonitor. Google Cloud
Untuk mengetahui detail tentang berapa lama entri log disimpan oleh Logging, lihat informasi retensi di Kuota dan batas: Periode retensi log.
Untuk mengetahui informasi tentang cara melihat log operasional, lihat Memantau dan melihat log pipeline.
Memantau dan melihat log pipeline
Saat menjalankan pipeline di layanan Dataflow, Anda dapat menggunakan antarmuka pemantauan Dataflow untuk melihat log yang dikeluarkan oleh pipeline Anda.
Contoh log worker Dataflow
Pipeline WordCount yang diubah dapat dijalankan di cloud dengan opsi berikut:
Java
--project=WordCountExample --output=gs://<bucket-name>/counts --runner=DataflowRunner --tempLocation=gs://<bucket-name>/temp --stagingLocation=gs://<bucket-name>/binaries
Python
--project=WordCountExample --output=gs://<bucket-name>/counts --runner=DataflowRunner --staging_location=gs://<bucket-name>/binaries
Go
--project=WordCountExample --output=gs://<bucket-name>/counts --runner=DataflowRunner --staging_location=gs://<bucket-name>/binaries
Melihat log
Karena pipeline cloud WordCount menggunakan eksekusi pemblokiran, pesan konsol dikeluarkan selama eksekusi pipeline. Setelah tugas dimulai, link ke halaman konsol Google Cloud akan ditampilkan ke konsol, diikuti dengan ID tugas pipeline:
INFO: To access the Dataflow monitoring console, please navigate to https://console.developers.google.com/dataflow/job/2017-04-13_13_58_10-6217777367720337669 Submitted job: 2017-04-13_13_58_10-6217777367720337669
URL konsol mengarah ke antarmuka pemantauan Dataflow dengan halaman ringkasan untuk tugas yang dikirimkan. Bagian ini menampilkan grafik eksekusi dinamis di sebelah kiri, dengan informasi ringkasan di sebelah kanan. Klik keyboard_capslock di panel bawah untuk meluaskan panel log.

Panel log secara default menampilkan Log Tugas yang melaporkan status tugas secara keseluruhan. Anda dapat memfilter pesan yang muncul di panel log dengan mengklik Infoarrow_drop_down dan filter_listFilter log.

Memilih langkah pipeline dalam grafik akan mengubah tampilan ke Log Langkah yang dihasilkan oleh kode Anda dan kode yang dihasilkan yang berjalan di langkah pipeline.

Untuk kembali ke Log Tugas, hapus langkah dengan mengklik di luar grafik atau menggunakan tombol Batalkan pilihan langkah di panel samping kanan.
Buka Logs Explorer
Untuk membuka Logs Explorer dan memilih jenis log yang berbeda, di panel log, klik Lihat di Logs Explorer (tombol link eksternal).
Di Logs Explorer, untuk melihat panel dengan berbagai jenis log, klik tombol Log fields.
Di halaman Logs Explorer, kueri dapat memfilter log menurut langkah tugas atau menurut jenis log. Untuk menghapus filter, klik tombol Tampilkan kueri dan edit kueri.
Untuk melihat semua log yang tersedia untuk tugas, ikuti langkah-langkah berikut:
Di kolom Query, masukkan kueri berikut:
resource.type="dataflow_step" resource.labels.job_id="JOB_ID"
Ganti JOB_ID dengan ID tugas Anda.
Klik Run query.
Jika Anda menggunakan kueri ini dan tidak melihat log untuk tugas Anda, klik Edit time.
Sesuaikan waktu mulai dan waktu akhir, lalu klik Terapkan.
Jenis log
Logs Explorer juga menyertakan log infrastruktur untuk pipeline Anda. Gunakan log error dan peringatan untuk mendiagnosis masalah pipeline yang diamati. Error dan peringatan di log infrastruktur yang tidak terkait dengan masalah pipeline tidak selalu menunjukkan masalah.
Berikut ringkasan berbagai jenis log yang tersedia untuk dilihat dari halaman Logs Explorer:
- Log job-message berisi pesan tingkat tugas yang dihasilkan oleh berbagai komponen Dataflow. Contohnya mencakup konfigurasi penskalaan otomatis, saat pekerja memulai atau mematikan, progres pada langkah tugas, dan error tugas. Error tingkat pekerja yang berasal dari kode pengguna yang error dan yang ada di log worker juga diteruskan ke log job-message.
- Log pekerja dihasilkan oleh pekerja Dataflow. Pekerja melakukan
sebagian besar pekerjaan pipeline (misalnya, menerapkan
ParDo
ke data). Log pekerja berisi pesan yang dicatat oleh kode dan Dataflow Anda. - Log worker-startup ada di sebagian besar tugas Dataflow dan dapat merekam pesan yang terkait dengan proses startup. Proses startup mencakup mendownload JAR tugas dari Cloud Storage, lalu memulai pekerja. Jika ada masalah saat memulai pekerja, log ini adalah tempat yang tepat untuk melihatnya.
- Log harness berisi pesan dari harness runner Runner v2.
- Log pengacak berisi pesan dari pekerja yang menggabungkan hasil operasi pipeline paralel.
- Log system berisi pesan dari sistem operasi host VM pekerja. Dalam beberapa skenario, mereka dapat merekam kumpulan data error proses atau peristiwa kehabisan memori (OOM).
- Log docker dan kubelet berisi pesan yang terkait dengan teknologi publik ini, yang digunakan di pekerja Dataflow.
- Log nvidia-mps berisi pesan tentang operasi NVIDIA Multi-Process Service (MPS).
Menetapkan tingkat log pekerja pipeline
Java
Level logging SLF4J default yang ditetapkan pada pekerja oleh Apache Beam SDK untuk Java adalah
INFO
. Semua pesan log dengan INFO
atau yang lebih tinggi (INFO
,
WARN
, ERROR
) akan dikeluarkan. Anda dapat menetapkan level log default yang berbeda
untuk mendukung level logging SLF4J yang lebih rendah (TRACE
atau DEBUG
) atau menetapkan
level log yang berbeda untuk berbagai paket class dalam kode Anda.
Opsi pipeline berikut disediakan agar Anda dapat menetapkan tingkat log pekerja dari command line atau secara terprogram:
--defaultSdkHarnessLogLevel=<level>
: gunakan opsi ini untuk menyetel semua logger pada level default yang ditentukan. Misalnya, opsi command line berikut akan menggantikan tingkat logINFO
Dataflow default, dan menyetelnya keDEBUG
:
--defaultSdkHarnessLogLevel=DEBUG
--sdkHarnessLogLevelOverrides={"<package or class>":"<level>"}
: gunakan opsi ini untuk menetapkan tingkat logging bagi paket atau class tertentu. Misalnya, untuk mengganti tingkat log pipeline default untuk paketorg.apache.beam.runners.dataflow
, dan menyetelnya keTRACE
:
--sdkHarnessLogLevelOverrides='{"org.apache.beam.runners.dataflow":"TRACE"}'
Untuk melakukan beberapa penggantian, berikan peta JSON:
(--sdkHarnessLogLevelOverrides={"<package/class>":"<level>","<package/class>":"<level>",...}
).- Opsi pipeline
defaultSdkHarnessLogLevel
dansdkHarnessLogLevelOverrides
tidak didukung dengan pipeline yang menggunakan Apache Beam SDK versi 2.50.0 dan yang lebih lama tanpa Runner v2. Dalam hal ini, gunakan opsi pipeline--defaultWorkerLogLevel=<level>
dan--workerLogLevelOverrides={"<package or class>":"<level>"}
. Untuk membuat beberapa penggantian, berikan peta JSON:
(--workerLogLevelOverrides={"<package/class>":"<level>","<package/class>":"<level>",...}
)
Contoh berikut menetapkan opsi logging pipeline secara terprogram dengan nilai default yang dapat diganti dari command line:
PipelineOptions options = ... SdkHarnessOptions loggingOptions = options.as(SdkHarnessOptions.class); // Overrides the default log level on the worker to emit logs at TRACE or higher. loggingOptions.setDefaultSdkHarnessLogLevel(LogLevel.TRACE); // Overrides the Foo class and "org.apache.beam.runners.dataflow" package to emit logs at WARN or higher. loggingOptions.getSdkHarnessLogLevelOverrides() .addOverrideForClass(Foo.class, LogLevel.WARN) .addOverrideForPackage(Package.getPackage("org.apache.beam.runners.dataflow"), LogLevel.WARN);
Python
Tingkat logging default yang ditetapkan pada pekerja oleh Apache Beam SDK untuk Python adalah
INFO
. Semua pesan log dengan INFO
atau yang lebih tinggi (INFO
,
WARNING
, ERROR
, CRITICAL
) akan dikeluarkan.
Anda dapat menetapkan level log default yang berbeda untuk mendukung level logging yang lebih rendah (DEBUG
)
atau menetapkan level log yang berbeda untuk modul yang berbeda dalam kode Anda.
Dua opsi pipeline disediakan untuk memungkinkan Anda menetapkan tingkat log pekerja dari command line atau secara terprogram:
--default_sdk_harness_log_level=<level>
: gunakan opsi ini untuk menyetel semua logger pada level default yang ditentukan. Misalnya, opsi command line berikut menggantikan tingkat log DataflowINFO
default, dan menyetelnya keDEBUG
:
--default_sdk_harness_log_level=DEBUG
--sdk_harness_log_level_overrides={\"<module>\":\"<level>\"}
: gunakan opsi ini untuk menetapkan tingkat logging bagi modul tertentu. Misalnya, untuk mengganti tingkat log pipeline default untuk modulapache_beam.runners.dataflow
, dan menyetelnya keDEBUG
:
--sdk_harness_log_level_overrides={\"apache_beam.runners.dataflow\":\"DEBUG\"}
Untuk melakukan beberapa penggantian, berikan peta JSON:
(--sdk_harness_log_level_overrides={\"<module>\":\"<level>\",\"<module>\":\"<level>\",...}
).
Contoh berikut menggunakan class
WorkerOptions
untuk menyetel opsi logging pipeline secara terprogram
yang dapat diganti dari command line:
from apache_beam.options.pipeline_options import PipelineOptions, WorkerOptions pipeline_args = [ '--project=PROJECT_NAME', '--job_name=JOB_NAME', '--staging_location=gs://STORAGE_BUCKET/staging/', '--temp_location=gs://STORAGE_BUCKET/tmp/', '--region=DATAFLOW_REGION', '--runner=DataflowRunner' ] pipeline_options = PipelineOptions(pipeline_args) worker_options = pipeline_options.view_as(WorkerOptions) worker_options.default_sdk_harness_log_level = 'WARNING' # Note: In Apache Beam SDK 2.42.0 and earlier versions, use ['{"apache_beam.runners.dataflow":"WARNING"}'] worker_options.sdk_harness_log_level_overrides = {"apache_beam.runners.dataflow":"WARNING"} # Pass in pipeline options during pipeline creation. with beam.Pipeline(options=pipeline_options) as pipeline:
Ganti kode berikut:
PROJECT_NAME
: nama projectJOB_NAME
: nama tugasSTORAGE_BUCKET
: nama Cloud StorageDATAFLOW_REGION
: region tempat Anda ingin men-deploy tugas DataflowFlag
--region
menggantikan region default yang ditetapkan di server metadata, klien lokal, atau variabel lingkungan.
Go
Fitur ini tidak tersedia di Apache Beam SDK untuk Go.
Melihat log tugas BigQuery yang diluncurkan
Saat menggunakan BigQuery di pipeline Dataflow, tugas BigQuery diluncurkan untuk melakukan berbagai tindakan atas nama Anda. Tindakan ini dapat mencakup pemuatan data, mengekspor data, dan tugas serupa lainnya. Untuk tujuan pemecahan masalah dan pemantauan, antarmuka pemantauan Dataflow memiliki informasi tambahan tentang tugas BigQuery ini yang tersedia di panel Log.
Informasi tugas BigQuery yang ditampilkan di panel Log disimpan dan dimuat dari tabel sistem BigQuery. Biaya penagihan akan dikenakan saat tabel BigQuery pokok dikueri.
Melihat detail tugas BigQuery
Untuk melihat informasi tugas BigQuery, pipeline Anda harus menggunakan Apache Beam 2.24.0 atau yang lebih baru.
Untuk mencantumkan tugas BigQuery, buka tab BigQuery Jobs, lalu pilih lokasi tugas BigQuery. Selanjutnya, klik Muat Tugas BigQuery dan konfirmasi dialog. Setelah kueri selesai, daftar tugas akan ditampilkan.
Informasi dasar tentang setiap tugas diberikan, termasuk ID tugas, jenis, durasi, dan detail lainnya.
Untuk mengetahui informasi yang lebih mendetail tentang tugas tertentu, klik Command line di kolom Info Selengkapnya.
Di jendela modal untuk command line, salin perintah bq jobs describe dan jalankan secara lokal atau di Cloud Shell.
gcloud alpha bq jobs describe BIGQUERY_JOB_ID
Perintah bq jobs describe
menghasilkan
JobStatistics,
yang memberikan detail lebih lanjut yang berguna saat mendiagnosis tugas BigQuery yang lambat atau macet.
Atau, saat Anda menggunakan BigQueryIO dengan kueri SQL, tugas kueri akan dikeluarkan. Untuk melihat kueri SQL yang digunakan oleh tugas, klik Lihat kueri di kolom Info Selengkapnya.
Melihat diagnostik
Tab Diagnostik di panel Log mengumpulkan dan menampilkan entri log tertentu yang dihasilkan di pipeline Anda. Entri ini mencakup pesan yang menunjukkan kemungkinan masalah pada pipeline dan pesan error dengan rekaman aktivitas. Entri log yang dikumpulkan akan di-duplikasikan dan digabungkan ke dalam grup error.
Laporan error mencakup informasi berikut:
- Daftar error dengan pesan error
- Jumlah kemunculan setiap error
- Histogram yang menunjukkan kapan setiap error terjadi
- Waktu terjadinya error terakhir kali
- Waktu saat error pertama kali terjadi
- Status error
Untuk melihat laporan error untuk error tertentu, klik deskripsi di bawah kolom Error. Halaman Pelaporan error akan ditampilkan. Jika error adalah Error Layanan, link Panduan pemecahan masalah akan ditampilkan.
Untuk mengetahui halaman lebih lanjut, lihat Melihat dan memfilter error.
Menonaktifkan error
Untuk membisukan pesan error, ikuti langkah-langkah berikut:
- Buka tab Diagnostik.
- Klik error yang ingin Anda nonaktifkan.
- Buka menu status penyelesaian. Status memiliki label berikut: Terbuka, Dikonfirmasi, Teratasi, atau Disenyapkan.
- Pilih Dinonaktifkan.