Pengantar pemantauan BigQuery

Pemantauan dan logging sangat penting untuk menjalankan aplikasi yang andal di cloud. Begitu pula dengan workload BigQuery, terutama jika workload Anda memiliki volume tinggi atau sangat penting. Dokumen ini memberikan ringkasan yang lebih umum tentang data pemantauan yang tersedia untuk BigQuery.

Sumber pemantauan dan logging dapat bervariasi berdasarkan frekuensi pengambilan sampel atau penggabungan. Misalnya, data skema informasi mungkin tersedia pada tingkat perincian yang lebih tinggi daripada data metrik Cloud Monitoring.

Akibatnya, grafik metrik dengan tingkat perincian yang lebih rendah mungkin tampak berbeda dari statistik skema informasi yang sebanding. Penggabungan akan cenderung memuluskan perbedaan. Saat mendesain solusi pemantauan, nilai waktu respons permintaan, presisi, dan akurasi metrik berdasarkan persyaratan Anda.

Metrik

Metrik adalah nilai numerik yang dikumpulkan pada interval reguler dan tersedia untuk analisis. Anda dapat menggunakan metrik untuk:

  • Membuat diagram dan dasbor.
  • Memicu pemberitahuan untuk kondisi atau situasi yang memerlukan intervensi manusia.
  • Menganalisis histori performa.

Untuk BigQuery, metrik yang tersedia mencakup jumlah tugas yang berjalan, jumlah byte yang dipindai selama kueri, dan distribusi waktu kueri. Metrik untuk kueri hanya akan tersedia setelah kueri berhasil dan dapat memakan waktu hingga tujuh menit untuk dilaporkan. Metrik untuk kueri yang gagal tidak dilaporkan. Untuk mengetahui daftar lengkap metrik yang tersedia, termasuk frekuensi sampel, visibilitas, dan batasannya, lihat bigquery di bagian metrik Google Cloud.

Menggunakan Cloud Monitoring untuk melihat metrik BigQuery serta membuat diagram dan pemberitahuan. Setiap metrik memiliki jenis resource, baik bigquery_dataset, bigquery_project, atau global, dan sekumpulan label. Gunakan informasi ini untuk membuat kueri di Monitoring Query Language (MQL). Anda dapat mengelompokkan atau memfilter setiap metrik menggunakan label.

Misalnya, untuk membuat diagram jumlah kueri interaktif yang sedang berlangsung, gunakan pernyataan MQL berikut, yang difilter menurut priority sama dengan interactive:

fetch global
| metric 'bigquery.googleapis.com/query/count'
| filter metric.priority = 'interactive'

Contoh berikutnya mendapatkan jumlah tugas pemuatan yang sedang berlangsung, yang dikelompokkan ke dalam interval 10 menit:

fetch bigquery_project
| metric 'bigquery.googleapis.com/job/num_in_flight'
| filter metric.job_type = 'load'
| group_by 10m

Untuk mengetahui informasi selengkapnya, lihat Membuat diagram dan pemberitahuan untuk BigQuery.

Log

Log adalah rekaman teks yang dibuat sebagai respons terhadap peristiwa atau tindakan tertentu. BigQuery membuat entri log untuk tindakan seperti membuat atau menghapus tabel, membeli slot, atau menjalankan tugas pemuatan. Untuk mengetahui informasi selengkapnya tentang logging di Google Cloud, lihat Cloud Logging.

Log adalah kumpulan entri log yang hanya dilengkapi penambahan. Misalnya, Anda dapat menulis entri log Anda sendiri ke log bernama projects/PROJECT_ID/logs/my-test-log. Banyak layanan Google Cloud, termasuk BigQuery, membuat jenis log yang disebut log audit. Log ini mencatat:

  • Aktivitas administratif, seperti membuat atau mengubah resource.
  • Akses data, seperti membaca data yang disediakan pengguna dari resource.
  • Peristiwa sistem yang dihasilkan oleh sistem Google, bukan oleh tindakan pengguna.

Log audit ditulis dalam format JSON terstruktur. Jenis data dasar untuk entri log Google Cloud adalah struktur LogEntry. Struktur ini berisi nama log, resource yang menghasilkan entri log, stempel waktu (UTC), dan informasi dasar lainnya.

Detail peristiwa yang dicatat ke dalam log terdapat di dalam subkolom yang disebut kolom payload. Untuk log audit, kolom payload diberi nama protoPayload. Nilai kolom ini adalah struktur AuditLog, yang ditunjukkan dengan nilai kolom protoPayload.@type, yang ditetapkan ke type.googleapis.com/google.cloud.audit.AuditLog.

Untuk operasi pada set data, tabel, dan tugas, BigQuery saat ini menulis log audit dalam dua format yang berbeda, meskipun keduanya menggunakan jenis dasar AuditLog yang sama.

Dalam format yang lama:

  • Kolom resource.type adalah bigquery_resource.
  • Detail tentang operasi ditulis ke kolom protoPayload.serviceData. Nilai kolom ini adalah struktur AuditData.

Dalam format yang lebih baru:

  • Kolom resource.type adalah bigquery_project atau bigquery_dataset. Resource bigquery_project memiliki entri log tentang tugas, sedangkan resource bigquery_dataset memiliki entri log tentang penyimpanan.
  • Detail tentang operasi ditulis ke kolom protoPayload.metadata. Nilai kolom ini adalah struktur BigQueryAuditMetadata.

Sebaiknya gunakan log dalam format yang lebih baru. Untuk informasi selengkapnya, lihat Panduan migrasi log audit.

Berikut adalah contoh singkat entri log yang menunjukkan operasi yang gagal:

{
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "status": {
      "code": 5,
      "message": "Not found: Dataset my-project:my-dataset was not found in location US"
    },
    "authenticationInfo": { ... },
    "requestMetadata":  { ... },
    "serviceName": "bigquery.googleapis.com",
    "methodName": "google.cloud.bigquery.v2.JobService.InsertJob",
    "metadata": {
  },
  "resource": {
    "type": "bigquery_project",
    "labels": { .. },
  },
  "severity": "ERROR",
  "logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Fdata_access",
  ...
}

Untuk operasi pada Reservasi BigQuery, protoPayload adalah struktur AuditLog, dan kolom protoPayload.request dan protoPayload.response berisi informasi yang lebih lengkap. Anda dapat menemukan definisi kolom di BigQuery Reservation API. Untuk informasi selengkapnya, lihat Memantau Reservasi BigQuery.

Dilihat INFORMATION_SCHEMAx

Tampilan INFORMATION_SCHEMA adalah sumber insight lain di BigQuery, yang dapat Anda gunakan bersama dengan metrik dan log.

Tampilan ini berisi metadata tentang tugas, set data, tabel, dan entity BigQuery lainnya. Misalnya, Anda bisa mendapatkan metadata real-time tentang tugas BigQuery mana yang berjalan selama jangka waktu tertentu, lalu mengelompokkan atau memfilter hasilnya berdasarkan project, pengguna, tabel yang direferensikan, dan dimensi lainnya.

Anda dapat menggunakan informasi ini untuk melakukan analisis yang lebih mendetail tentang workload BigQuery, dan menjawab pertanyaan seperti:

  • Berapa rata-rata pemakaian slot untuk semua kueri selama 7 hari terakhir untuk project tertentu?
  • Pengguna mana yang mengirimkan tugas pemuatan batch untuk project tertentu?
  • Error streaming apa yang terjadi dalam 30 menit terakhir, yang dikelompokkan berdasarkan kode error?

Secara khusus, lihat metadata tugas, metadata streaming, dan metadata reservasi untuk mendapatkan insight tentang performa workload BigQuery Anda.

Anda dapat menemukan contoh kueri INFORMATION_SCHEMA di GitHub yang menunjukkan slot organisasi dan pemanfaatan reservasi, eksekusi tugas, dan error tugas. Misalnya, kueri berikut menyediakan daftar kueri yang tertunda atau yang sedang berjalan. Kueri ini diurutkan berdasarkan durasi waktu sejak dibuat di region us:

SELECT
    creation_time,
    project_id,
    user_email,
    job_id,
    job_type,
    priority,
    state,
    TIMESTAMP_DIFF(CURRENT_TIMESTAMP(), start_time,second) as running_time_sec
 FROM
   `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
 WHERE
    creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY) AND CURRENT_TIMESTAMP()
    AND state != "DONE"
ORDER BY
    running_time_sec DESC

Untuk mengetahui informasi selengkapnya, baca Memecahkan masalah performa BigQuery dengan dasbor ini.

Jika Anda memiliki reservasi slot, selain menulis kueri sendiri, Anda dapat menggunakan Diagram Resource Admin BigQuery untuk melihat diagram yang menampilkan penggunaan slot, konkurensi tugas, dan waktu proses tugas. Untuk mengetahui informasi selengkapnya, lihat Pengantar Diagram Resource Admin BigQuery (pratinjau).

Langkah selanjutnya