Menumpuk dan merutekan entri log secara retroaktif

Anda dapat menyalin entri log yang disimpan dari bucket log Cloud Logging ke bucket Cloud Storage untuk mendukung audit keamanan, melakukan analisis data kustom, atau mengarsipkan entri log historis. Operasi penyalinan bersifat non-destruktif; entri log tetap berada di bucket log sumber, dan Anda dapat menyalin di berbagai project Google Cloud .

Operasi penyalinan merutekan entri log yang ada secara retroaktif menggunakan gcloud CLI. Sebaliknya, sink merutekan entri log yang cocok secara otomatis secara real time saat entri tersebut tiba, tetapi tidak dapat merutekan entri log yang disimpan sebelum sink dibuat.

Batasan

Batasan berikut berlaku saat menyalin entri log:

  • Anda hanya dapat menyalin entri log ke bucket Cloud Storage yang tidak dikonfigurasi untuk Rapid storage; tujuan lain tidak tersedia.

  • Anda tidak dapat menyalin entri log dari bucket log yang telah mengonfigurasi kunci enkripsi yang dikelola pelanggan (CMEK).

Sebelum memulai

Sebelum mulai menyalin entri log, lakukan hal berikut:

  • Untuk mendapatkan izin yang diperlukan untuk menyalin entri log, minta administrator untuk memberi Anda peran IAM berikut pada project yang berisi bucket log yang Anda salin:

  • Untuk mendapatkan izin yang diperlukan untuk menulis entri log ke Cloud Storage, minta administrator untuk memberi Anda peran IAM Storage Object Creator (roles/storage.objectCreator) di project yang berisi bucket Cloud Storage.

Menyalin entri log

Logging hanya menyalin entri log yang disimpan di bucket log saat operasi penyalinan dimulai. Entri log yang disimpan di bucket log setelah operasi penyalinan dimulai tidak akan disalin ke Cloud Storage.

Untuk menyalin entri log ke Cloud Storage, Anda perlu mengetahui informasi berikut:

Untuk menyalin entri log, jalankan perintah gcloud logging copy:

gcloud logging copy LOG_BUCKET_ID storage.googleapis.com/CLOUD_STORAGE_BUCKET_NAME \
--location=LOCATION --log-filter='FILTER' --project=PROJECT_ID

Sebelum menjalankan perintah sebelumnya, lakukan hal berikut:

  • Ganti LOG_BUCKET_ID dengan nama bucket log Anda.
  • Ganti CLOUD_STORAGE_BUCKET_NAME dengan nama bucket Cloud Storage Anda.
  • Ganti LOCATION dengan lokasi bucket log.
  • (Opsional): Ganti FILTER dengan filter yang menentukan entri log yang disalin.

    Jika Anda menghilangkan flag --log-filter, semua entri log di bucket log akan disalin ke bucket Cloud Storage.

  • Ganti PROJECT_ID dengan project ID Google Cloud Anda. Anda dapat menghilangkan flag ini jika konfigurasi gcloud CLI yang aktif ditetapkan ke project Google Cloud yang benar.

Contoh perintah:

gcloud logging copy my-log-bucket storage.googleapis.com/my-gcs-bucket \
--location=global --log-filter='timestamp > "2024-07-18T10:00:00.0Z"' \
--project=my-project

Perintah ini membuat operasi yang berjalan lama untuk dijalankan di latar belakang dan menampilkan nama operasi penyalinan serta lokasi bucket log:

name: projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID

Lokasi operasi penyalinan sama dengan lokasi bucket log tempat Anda menyalin.

Melihat dan mengelola operasi penyalinan

Anda dapat melihat dan mengelola operasi penyalinan menggunakan perintah gcloud logging operations, yang memungkinkan Anda membuat daftar, melihat, dan membatalkan operasi.

Perintah berikut mengharuskan Anda menentukan lokasi operasi. Gunakan lokasi bucket log Anda. Untuk mengetahui informasi tentang cara menemukan lokasi bucket log, lihat Melihat detail bucket.

Mencantumkan operasi penyalinan

Anda dapat mencantumkan operasi penyalinan terbaru, termasuk operasi yang dijadwalkan, berjalan, selesai, gagal, dan dibatalkan. Operasi penyalinan terbaru akan muncul dalam hasil selama maksimal 30 hari setelah waktu berakhir.

Untuk mencantumkan operasi penyalinan, jalankan perintah berikut:

gcloud logging operations list --location=LOCATION \
--operation-filter=request_type=CopyLogEntries \
--project=PROJECT_ID

Sebelum menjalankan perintah sebelumnya, lakukan hal berikut:

  • Ganti LOCATION dengan lokasi bucket log yang Anda salin.
  • Ganti PROJECT_ID dengan project ID Google Cloud Anda.

Perintah ini menampilkan informasi tentang operasi yang berjalan lama, termasuk ID operasi:

projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID

Melihat status operasi penyalinan

Anda dapat mengambil status dan metadata lainnya tentang operasi penyalinan, termasuk hal berikut:

  • startTime: Stempel waktu yang menunjukkan pembuatan operasi.
  • endTime: Stempel waktu yang menunjukkan penyelesaian operasi.
  • state: Status operasi (dijadwalkan, berjalan, dibatalkan, gagal, atau berhasil).
  • cancellation: Apakah pengguna telah meminta untuk membatalkan operasi.
  • progress: Estimasi progres operasi (0-100%).
  • destination: Nama bucket Cloud Storage tempat operasi menyalin entri log.
  • filter: Filter yang menentukan entri log yang akan disalin.
  • name: Nama bucket log tempat operasi menyalin entri log.
  • logEntriesCopiedCount: Jumlah entri log yang berhasil disalin ke bucket Cloud Storage oleh operasi.

Perhatikan bahwa tidak semua kolom metadata yang tercantum berlaku untuk setiap operasi penyalinan. Misalnya, jika operasi penyalinan masih berjalan, metadata endTime tidak berlaku untuk operasi tersebut. Sebagai contoh lain, jika flag --log-filter=FILTER tidak digunakan saat menjalankan perintah gcloud logging copy, metadata filter tidak berlaku untuk operasi tersebut.

Untuk mengambil informasi tentang operasi penyalinan, jalankan perintah berikut:

gcloud logging operations describe OPERATION_ID \
--location=LOCATION --project=PROJECT_ID

Sebelum menjalankan perintah sebelumnya, lakukan hal berikut:

  • Ganti OPERATION_ID dengan ID operasi.
  • Ganti LOCATION dengan lokasi bucket log yang Anda salin.
  • Ganti PROJECT_ID dengan project ID Google Cloud Anda.

Perintah ini menampilkan metadata tentang operasi penyalinan. Misalnya, berikut adalah output untuk operasi yang sedang berlangsung:

done: false
metadata:
  `@type`: type.googleapis.com/google.logging.v2.CopyLogEntriesMetadata
  progress: 75
  destination: storage.googleapis.com/CLOUD_STORAGE_BUCKET_NAME
  source: projects/PROJECT_ID/locations/LOCATION/buckets/LOG_BUCKET_ID
  verb: copy
  startTime: `2024-05-23T10:52:40.039751Z`
  state: OPERATION_STATE_RUNNING
name: projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID

Membatalkan operasi penyalinan

Anda dapat membatalkan operasi penyalinan yang sedang berlangsung. Jika Anda membatalkan operasi penyalinan, semua entri log yang disalin sebelum operasi dibatalkan akan tetap berada di bucket Cloud Storage.

Setelah membatalkan operasi penyalinan, Logging menyelesaikan semua proses yang sedang berlangsung sebelum menyelesaikan pembatalan. Hal ini dapat menyebabkan beberapa entri log masih disalin ke Cloud Storage setelah Anda membatalkan operasi.

Untuk membatalkan operasi penyalinan, jalankan perintah berikut:

gcloud logging operations cancel OPERATION_ID \
--location=LOCATION --project=PROJECT_ID

Sebelum menjalankan perintah sebelumnya, lakukan hal berikut:

  • Ganti OPERATION_ID dengan ID operasi.
  • Ganti LOCATION dengan lokasi bucket log yang Anda salin.
  • Ganti PROJECT_ID dengan project ID Google Cloud Anda.

Melihat entri log di Cloud Storage

Untuk mengetahui informasi tentang cara melihat dan memahami entri log yang Anda salin ke Cloud Storage, lihat Melihat entri log yang dirutekan ke Cloud Storage.

Kuota dan batas

Semua operasi penyalinan memerlukan waktu setidaknya satu jam untuk diselesaikan, berapa pun jumlah data yang disalin.

Untuk menyalin volume besar—misalnya, petabyte—bagi penyalinan ke dalam beberapa operasi penyalinan menggunakan kolom timestamp dalam flag --log-filter.

Perintah salin tidak dapat menyalin entri log yang retensinya telah berakhir.

Pemecahan masalah

Bagian ini menjelaskan cara memecahkan masalah error saat menyalin entri log.

Gagal menulis data ekspor

Saat Anda melihat status operasi penyalinan menggunakan gcloud logging operations describe, operasi tersebut mungkin menampilkan error berikut:

done: true
error:
  code: 7
  message: Failed to write export data to the destination Cloud Storage bucket.

Error ini terjadi saat Logging tidak dapat menulis atau menyelesaikan file log di bucket Cloud Storage tujuan. Penulisan file yang diekspor selama operasi dapat gagal karena beberapa alasan:

  • Perimeter layanan Kontrol Layanan VPC memblokir permintaan ke bucket Cloud Storage tujuan.
  • Izin IAM akun yang memulai operasi penyalinan diubah atau dicabut saat operasi sedang berjalan.
  • Operasi penyalinan berjalan cukup lama hingga kredensial otorisasi habis masa berlakunya.
  • Bucket Cloud Storage tujuan menggunakan CMEK, dan kunci Cloud Key Management Service dinonaktifkan atau agen layanan Cloud Storage tidak memiliki izin enkripsi.
  • Upaya penulisan ulang mencoba menimpa file yang sudah ada yang tidak dapat diganti. Misalnya, jika batch ekspor dicoba ulang setelah penundaan sementara, atau jika operasi penyalinan dimulai ulang, percobaan ulang mungkin akan mencoba menimpa file yang sudah dibuat. Jika file tersebut dilindungi oleh penangguhan objek aktif atau kebijakan retensi yang terkunci, Cloud Storage akan menolak penimpaan.
  • Bucket tujuan telah dihapus, memasuki status terkunci, atau project melebihi kuota resource-nya.

Untuk mengatasi masalah ini, lakukan langkah berikut:

  1. Tinjau Kontrol Layanan VPC: Jika organisasi Anda menggunakan Kontrol Layanan VPC, tinjau Cloud Audit Logs untuk penolakan perimeter (cloudaudit.googleapis.com/data_access). Perimeter untuk bucket Cloud Storage tujuan harus mengizinkan akses dari project yang menjalankan operasi penyalinan, atau mengonfigurasi aturan ingress dan egress.

  2. Verifikasi peran IAM bucket tujuan: Akun yang memulai operasi penyalinan harus memiliki peran Storage Object Creator (roles/storage.objectCreator) di bucket tujuan.

  3. Verifikasi Kunci Enkripsi yang Dikelola Pelanggan (CMEK): Jika bucket tujuan menggunakan CMEK untuk enkripsi default, pastikan kunci Cloud KMS diaktifkan dan agen layanan Cloud Storage memiliki peran Cloud KMS CryptoKey Encrypter/Decrypter (roles/cloudkms.cryptoKeyEncrypterDecrypter) pada kunci tersebut.

  4. Bagi operasi penyalinan besar menjadi interval waktu yang lebih singkat: Untuk mencegah waktu tunggu habis atau masa berlaku kredensial habis saat menyalin entri log dalam jumlah besar, bagi operasi menjadi batch yang lebih kecil. Untuk membagi entri log menjadi beberapa batch, gunakan kolom timestamp di flag --log-filter.

  5. Pastikan tidak ada penangguhan objek atau konflik retensi: Pastikan bucket tujuan tidak berisi objek di jalur tujuan target yang dilindungi oleh penangguhan objek aktif atau kebijakan retensi yang terkunci.