Menulis log tugas

Dokumen ini menjelaskan cara menulis log tugas dan cara membuat serta menjalankan tugas Batch yang memiliki log tugas.

Jika logging diaktifkan untuk tugas, log tugas akan dihasilkan dari pesan yang dicetak oleh tugas yang dapat dijalankan selama waktu proses. Dengan mengonfigurasi runnable untuk menulis log tugas, Anda dapat menampilkan informasi kustom di Cloud Logging, yang dapat membantu memudahkan tugas Anda untuk dianalisis dan dipecahkan masalahnya. Untuk mempelajari log lebih lanjut, lihat Menganalisis tugas menggunakan log.

Sebelum memulai

  1. Jika belum pernah menggunakan Batch, baca Mulai menggunakan Batch dan aktifkan Batch dengan menyelesaikan prasyarat untuk project dan pengguna.
  2. Untuk mendapatkan izin yang diperlukan guna membuat tugas yang menulis log, minta administrator untuk memberi Anda peran IAM berikut:

    Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

    Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Membuat dan menjalankan tugas yang memiliki log tugas

Untuk membuat dan menjalankan tugas yang ingin memiliki log tugas, lakukan hal berikut saat Anda membuat tugas:

  1. Aktifkan log untuk tugas. Hal ini memungkinkan log apa pun yang ditulis untuk tugas dibuat.
  2. Untuk setiap log tugas yang Anda inginkan untuk tugas, tambahkan perintah yang menulis log tugas ke yang dapat dijalankan. Saat tugas berjalan, log tugas akan dibuat setiap kali perintah untuk menulis log tugas dieksekusi.

    Untuk mempelajari cara menulis log tugas, lihat Menulis log tugas dalam dokumen ini.

Menulis log tugas

Log tugas ditulis untuk konten apa pun yang dicetak oleh runnable tugas ke aliran data output standar (stdout) atau aliran data error standar (stderr) selama waktu proses. Misalnya, Anda dapat menulis log tugas menggunakan perintah echo. Struktur log tugas yang dihasilkan bervariasi berdasarkan cara Anda memformat konten yang dicetak. Secara khusus, Anda dapat menulis setiap log tugas menggunakan salah satu opsi berikut:

Menulis log tidak terstruktur dengan mencetak string

Log tidak terstruktur memungkinkan Anda menentukan pesan, yang merupakan string yang muncul di kolom textPayload log.

Untuk menulis log tidak terstruktur, cetak string yang tidak diformat seperti yang ditunjukkan di bagian berikut.

Contoh log tidak terstruktur

Misalnya, Anda ingin log tugas yang berisi string berikut:

MESSAGE

Mencetak contoh string ini akan menghasilkan log tugas yang mirip dengan berikut ini:

insertId: ...
labels: ...
logName: projects/PROJECT_ID/logs/batch_task_logs
receiveTimestamp: ...
resource: ...
severity: INFO
textPayload: MESSAGE
timestamp: ...

Ganti kode berikut:

  • MESSAGE: pesan, yang merupakan string yang menyatakan tujuan log tugas—misalnya, The summary for a task log..
  • PROJECT_ID: Project ID project Anda.

Anda dapat mencetak string menggunakan berbagai metode, seperti dengan menyertakan perintah echo berikut dalam kode yang dapat dijalankan:

echo MESSAGE

Untuk contoh tugas yang komprehensif yang menggunakan perintah echo untuk menulis log tugas yang tidak terstruktur, lihat Membuat dan menjalankan tugas dasar.

Menulis log terstruktur dengan mencetak objek JSON

Log terstruktur memungkinkan Anda menentukan salah satu hal berikut:

Untuk menulis log terstruktur, cetak objek JSON. Bagian berikut menunjukkan cara menentukan log dengan beberapa kolom standar dan kolom kustom. Jika Anda ingin mempelajari cara menentukan log dengan peristiwa status kustom, lihat juga Mengonfigurasi peristiwa status kustom.

Contoh log terstruktur

Misalnya, Anda ingin log tugas yang berisi informasi dalam objek JSON berikut, yang menentukan pesan, tingkat keparahan, dan dua kolom kustom.

{
  "message": "MESSAGE"
  "severity": "SEVERITY"
  "CUSTOM_FIELD_1": CUSTOM_VALUE_1
  "CUSTOM_FIELD_2": CUSTOM_VALUE_2
}

Mencetak objek JSON ini akan menghasilkan log tugas yang mirip dengan berikut ini:

insertId: ...
jsonPayload:
  "CUSTOM_FIELD_1": CUSTOM_VALUE_1
  "CUSTOM_FIELD_2": CUSTOM_VALUE_2
  message: MESSAGE
labels: ...
logName: projects/PROJECT_ID/logs/batch_task_logs
receiveTimestamp: ...
resource: ...
severity: SEVERITY
timestamp: ...

Ganti kode berikut:

  • MESSAGE: pesan, yang merupakan string yang menyatakan tujuan log tugas—misalnya, The summary for a task log..
  • SEVERITY: tingkat keparahan log, yang dapat Anda gunakan sebagai filter saat melihat log untuk tugas. Tingkat keparahan harus berupa salah satu enum LogSeverity yang dikonversi menjadi string dengan hanya huruf pertama yang dikapitalisasi. Misalnya, untuk enum ERROR, tentukan Error.
  • CUSTOM_FIELD_1 dan CUSTOM_FIELD_2: nama kolom kustom untuk log tugas—misalnya, custom_field_1 dan custom_field_2.
  • CUSTOM_VALUE_1 dan CUSTOM_VALUE_2: nilai kolom kustom untuk log tugas, yang dapat berupa berbagai jenis data dan mungkin memerlukan tanda kutip—misalnya, "the first custom field" dan 2.
  • PROJECT_ID: Project ID project Anda.

Anda dapat mencetak contoh objek JSON ini menggunakan berbagai metode. Misalnya, contoh berikut menunjukkan beberapa kemungkinan metode untuk mencetak contoh objek JSON:

  • Cetak string yang setara menggunakan perintah echo.
  • Cetak kamus yang setara menggunakan Python.

perintah echo

Untuk mencetak contoh objek JSON menggunakan perintah echo dan string yang setara, sertakan perintah berikut dalam yang dapat dijalankan:

echo '{\"message\":\"MESSAGE\", \"severity\":\"SEVERITY\", \"CUSTOM_FIELD_1\":CUSTOM_VALUE_1, \"CUSTOM_FIELD_2\":CUSTOM_VALUE_2}'

Misalnya, Anda membuat dan menjalankan tugas dengan runnable berikut:

"script": {
  "text": "echo '{\"message\":\"The message for a structured log.\", \"severity\":\"Error\", \"custom_field_1\":\"the first custom field\", \"custom_field_2\":2}'"
}

Kemudian, log tugas yang dihasilkan akan mirip dengan berikut ini:

insertId: ...
jsonPayload:
  custom_field_1: the first custom field
  custom_field_2: 2
  message: The summary for a structured task log with error severity.
labels: ...
logName: projects/PROJECT_ID/logs/batch_task_logs
receiveTimestamp: ...
resource: ...
severity: ERROR
timestamp: ...

Python

Untuk mencetak contoh objek JSON menggunakan Python dan kamus yang setara, sertakan contoh berikut dalam kode yang dapat dijalankan:

#!/usr/bin/env python3

import json

entry = dict(
    severity="SEVERITY",
    message="MESSAGE",
    CUSTOM_FIELD_1=CUSTOM_VALUE_1,
    CUSTOM_FIELD_2=CUSTOM_VALUE_2,
)
print(json.dumps(entry))

Misalnya, Anda membuat dan menjalankan tugas dengan runnable berikut:

"script": {
  "text": "#!/usr/bin/env python3\n\nimport json\n\nentry = dict(\nseverity=\"Error\",\nmessage=\"The summary for a structured task log with error severity.\",\ncustom_field_1=\"the first custom field\",\ncustom_field_2=2,\n)\nprint(json.dumps(entry))"
}

Kemudian, log tugas yang dihasilkan akan mirip dengan berikut ini:

insertId: ...
jsonPayload:
  custom_field_1: the first custom field
  custom_field_2: 2
  message: The summary for a structured task log with error severity.
labels: ...
logName: projects/PROJECT_ID/logs/batch_task_logs
receiveTimestamp: ...
resource: ...
severity: ERROR
timestamp: ...

Langkah selanjutnya