Dokumen ini membahas label metrik berbasis log, dan menjelaskan cara membuat serta menggunakan label pada metrik log.
Jika sudah memahami label, Anda dapat langsung membuka bagian Membuat label di halaman ini.
Ringkasan label untuk metrik berbasis log
Label memungkinkan metrik berbasis log berisi beberapa deret waktu—satu untuk setiap kombinasi nilai label. Semua metrik berbasis log dilengkapi dengan beberapa label default.
Anda dapat membuat label tambahan yang ditentukan pengguna dalam metrik jenis penghitung dan jenis distribusi dengan menentukan ekspresi ekstraktor. Ekspresi ekstraktor memberi tahu Cloud Logging cara mengekstrak nilai label dari entri log. Anda dapat menentukan nilai label sebagai salah satu dari berikut:
- Seluruh konten kolom bernama dalam objek
LogEntry
. - Bagian dari kolom bernama yang cocok dengan ekspresi reguler (regexp).
Anda dapat mengekstrak label dari
kolom bawaan LogEntry
, seperti
httpRequest.status
, atau dari salah satu kolom payload textPayload
,
jsonPayload
, atau protoPayload
.
Untuk mengetahui informasi tentang ekspresi reguler, lihat Sintaksis RE2.
Jangan masukkan informasi sensitif dalam ekspresi ekstraktor dan jangan ekstrak data sensitif ke dalam label. Data ini diperlakukan sebagai data layanan.
Batasan label yang ditentukan pengguna
Batasan berikut berlaku untuk label yang ditentukan pengguna:
Anda dapat membuat hingga 10 label yang ditentukan pengguna per metrik.
Setelah membuat label, Anda tidak dapat menghapusnya.
Anda dapat mengubah ekspresi ekstraktor dan deskripsi label yang telah dibuat.
Anda tidak dapat mengubah nama atau jenis nilai label yang telah Anda buat.
Hanya 1.024 karakter pertama dari nilai label yang disimpan.
Setiap metrik berbasis log dibatasi hingga sekitar 30.000 deret waktu aktif, yang bergantung pada jumlah kemungkinan nilai untuk setiap label, termasuk label default.
Misalnya, jika entri log Anda berasal dari 100 resource seperti instance VM, dan Anda menentukan label dengan 20 kemungkinan nilai, Anda dapat memiliki hingga 2.000 deret waktu untuk metrik.
Jika Anda memiliki terlalu banyak deret waktu atau terlalu banyak titik data, biaya Anda akan meningkat dan aktivitas Anda mungkin akan dibatasi. Untuk informasi selengkapnya tentang biaya metrik berbasis log, lihat Harga Cloud Monitoring: Metrik yang dapat ditagih. Untuk mengetahui informasi tentang batas yang berlaku untuk metrik berbasis log, lihat Kuota dan batas: Metrik berbasis log dan Memecahkan masalah metrik berbasis log.
Label default
Sebagian besar metrik berbasis log dilengkapi dengan beberapa label standar:
Label resource: Semua metrik menggunakan objek resource yang dimonitor untuk mengidentifikasi sumber data deret waktu. Setiap jenis resource menyertakan nama jenis dan satu atau beberapa label. Contoh jenis resource mencakup instance VM, database Cloud SQL, dan load balancer.
Resource dan labelnya dicantumkan secara terpisah dari label metrik lainnya di Cloud Monitoring, tetapi memiliki efek yang sama: keduanya membuat deret waktu tambahan dalam metrik. Untuk mengetahui informasi selengkapnya, lihat Metrik, Deret Waktu, dan Resource.
log: Label ini menyimpan nilai bagian
LOG_ID
dari kolomlogName
dalam entri log.severity: Label ini menyimpan nilai kolom
severity
dalam entri log. Label tingkat keparahan disediakan secara default hanya di metrik berbasis log sistem.
Melihat label menggunakan Metrics Explorer
Untuk melihat label pada deret waktu yang dihasilkan untuk metrik berbasis log, lakukan tindakan berikut:
-
Di Google Cloud konsol, buka halaman Metrik Berbasis Log:
Jika Anda menggunakan kotak penelusuran untuk menemukan halaman ini, pilih hasil yang subjudulnya adalah Logging.
Temukan metrik yang ingin Anda lihat, lalu pilih Lihat di Metrics Explorer dari menu Lainnya more_vert metrik.
Sebelum melanjutkan, tunggu hingga diagram menampilkan data, yang mungkin memerlukan waktu beberapa menit saat Anda membuat metrik berbasis log.
Untuk melihat label yang tersedia, luaskan kolom Filter. Anda mungkin melihat label resource dan label metrik. Daftar label khusus untuk jenis resource dan jenis metrik. Contoh:
Jenis resource
gce_instance
memiliki tiga label resource:project_id
,instance_id
, danzone
.Jenis metrik
logging/log_entry_count
memiliki dua label metrik:log
danseverity
. Label yang ditentukan pengguna juga akan muncul di bagian ini.
Untuk memverifikasi bahwa label yang ditentukan pengguna mengekstrak data yang benar dari entri log Anda, lakukan hal berikut:
Ubah elemen Aggregation menjadi Unaggregated.
Pada diagram, pilih Tabel atau Keduanya.
Di toolbar, pilih view_column Column display menu, lalu pilih label Anda. Menu ini menampilkan semua label yang memiliki data.
Jika Anda tidak melihat label yang dibuat, verifikasi nama kolom dan ekspresi ekstraktor.
Membuat label
Anda membuat label yang ditentukan pengguna saat membuat metrik. Metrik penghitung dan metrik distribusi dapat memiliki label. Anda tidak dapat menambahkan label ke metrik berbasis log sistem.
Untuk membuat label, Anda menentukan kolom dalam entri log, lalu menentukan ekspresi yang mengekstrak nilai dari kolom yang ditentukan.
Konsol
Saat Anda membuat metrik berbasis log, panel Create logs metric akan menyertakan opsi untuk menambahkan label.
Klik Tambahkan label.
Tips: Untuk melihat kolom dan nilai di dalam entri log, lakukan hal berikut:
- Di bagian Filter selection, klik Preview logs.
- Di panel Lihat log, pilih entri log, lalu klik ekspander navigate_next di sampingnya.
- Klik Luaskan kolom bertingkat.
Tetapkan kolom berikut di bagian Label:
Nama label: Masukkan nama untuk label. Contoh,
ID
.Nama harus memenuhi kriteria berikut:
- Panjangnya tidak boleh lebih dari 100 karakter.
- Cocok dengan ekspresi reguler [a-zA-Z][a-zA-Z0-9_]*.
- Terdiri dari lebih dari sekadar string "log".
Deskripsi: Jelaskan label. Cobalah untuk sespesifik mungkin tentang format nilai log yang diharapkan. Contoh,
Instance number
.Jenis label: Pilih String, Boolean, atau Bilangan Bulat.
Nama kolom: Masukkan nama kolom entri log yang berisi nilai label. Anda akan ditawari pilihan saat mengetik. Dalam contoh ini, kolomnya adalah:
labels."compute.googleapis.com/resource_id"
Ekspresi reguler: Jika nilai label Anda terdiri dari seluruh konten kolom, Anda dapat mengosongkan kolom ini. Jika tidak, tentukan grup tangkapan regexp yang mengekstrak nilai label dari nilai kolom.
Misalnya, kolom biasanya berisi teks seperti berikut:
The instance number is 0123456789; the ID is my-test-instance22
Jika Anda ingin nilai label menjadi nomor instance, ada banyak ekspresi reguler yang akan mengekstrak nomor yang benar. Misalnya, dalam ekspresi berikut, tanda kurung adalah grup pengambilan yang mengidentifikasi bagian teks yang akan diekstrak:
The instance number is ([0-9]+); .*
Untuk informasi selengkapnya tentang ekspresi reguler, lihat Sintaksis RE2.
Klik Done untuk membuat label. Anda dapat menambahkan label lainnya dengan mengulangi langkah-langkah ini.
Untuk menyelesaikan pembuatan metrik, klik Create metric.
gcloud
Untuk membuat metrik berbasis log dengan label kustom, Anda harus membuat file yang
berisi representasi definisi LogMetric
dalam
format JSON atau YAML, termasuk label kustom. Kemudian, buat metrik dengan memanggil perintah create
dengan flag --config-from-file
, yang mengganti FILENAME dengan nama file JSON atau YAML Anda:
gcloud logging metrics create METRIC_NAME --config-from-file FILENAME
Untuk informasi selengkapnya, lihat
gcloud logging metrics create
.
API
Label ditentukan sebagai bagian dari objek LogMetric
dalam isi permintaan
panggilan ke metode projects.metrics.create
Logging API. Untuk informasi tentang panggilan metode lengkap,
lihat Membuat metrik penghitung
atau Membuat metrik distribusi.
Untuk setiap label, Anda harus menambahkan segmen ke kolom metricDescriptor
dan
labelExtractors
di LogMetric
.
Sintaksisnya adalah sebagai berikut:
{ ... metricDescriptor: { labels: [ { key: LABEL_NAME, valueType: LABEL_TYPE, description: LABEL_DESCRIPTION }, ... ] }, labelExtractors: { LABEL_NAME: EXTRACTOR_EXPRESSION, ... }, }
Elemen sintaksis memiliki arti berikut:
- LABEL_NAME: Nama label sebagai string.
- VALUE_TYPE: Jenis label:
STRING
,BOOL
, atauINT64
. - LABEL_DESCRIPTION: Deskripsi label.
EXTRACTOR_EXPRESSION: String yang menggabungkan nama kolom entri log dengan ekspresi reguler opsional. Ekspresi ekstraktor dapat berupa salah satu dari berikut ini:
EXTRACT(FIELD)
REGEXP_EXTRACT(FIELD, REGEXP)
Untuk informasi selengkapnya tentang ekspresi reguler, lihat Sintaksis RE2.
Berikut adalah contoh dengan dua label:
{
...
metricDescriptor: {
labels: [
{ key: "label_name_a", valueType: STRING },
{ key: "label_name_b", valueType: INT64 },
]
},
labelExtractors: {
"label_name_a":
"REGEXP_EXTRACT(jsonPayload.field_a, \"before ([a-zA-Z ]+) after\")",
"label_name_b": "EXTRACT(jsonPayload.field_b)",
},
}
Untuk detail selengkapnya, lihat jenis LogMetric
.
Contoh
Bagian ini memberikan beberapa contoh yang dapat membantu Anda memulai pembuatan label pada metrik berbasis log yang ditentukan pengguna. Setelah membuat label, sebaiknya verifikasi label menggunakan Metrics Explorer.
Tips:
- Anda harus menggunakan grup tangkapan saat menentukan ekspresi ekstraktor.
- Jika Anda tidak menentukan ekspresi ekstraktor, seluruh nilai kolom akan diekstrak.
Pastikan kumpulan nilai yang memungkinkan untuk label apa pun dibatasi. Kumpulan kecil nilai terpisah (seperti "merah", "hijau", dan "biru") adalah pendekatan yang lebih disukai. Misalnya, jika mengekstrak nilai RGB 8-bit untuk label warna, Anda dapat memiliki lebih dari 16 juta nilai yang berbeda. Artinya, Anda dapat memiliki lebih dari 16 juta deret waktu.
Jangan mengekstrak nilai beresolusi tinggi seperti stempel waktu, jenis ID unik apa pun, ID pengguna, alamat IP, URL tanpa parameter, dan sebagainya.
Mengekstrak kode status dari log audit
Jika kolom tidak berisi karakter khusus, Anda dapat menggunakan nama kolom dalam label untuk metrik berbasis log.
Misalnya, untuk log audit, kolom protoPayload
sesuai dengan struktur AuditLog
. Oleh karena itu,
untuk mengekstrak kolom status
dari log audit, Anda dapat menetapkan nama kolom ke
protoPayload.status.code
dan membiarkan ekspresi ekstraktor kosong.
Jika hanya ingin mengekstrak digit pertama kode error,
Anda dapat menetapkan ekspresi ekstraktor ke (\d)\d\d
.
Mengekstrak nilai dari kolom dengan karakter khusus
Jika kolom dalam entri log berisi karakter khusus, gabungkan kolom tersebut dengan tanda kutip ganda.
Misalnya, untuk mengekstrak seluruh nilai label k8s-pod/k8s-app
,
tetapkan nama kolom ke labels."k8s-pod/k8s-app"
dan biarkan ekspresi kosong.
Mengekstrak nilai dari payload teks
Pertimbangkan entri log yang memiliki format berikut:
textPayload: "unfinished_task_instance_count.py:61 Unfinished task instance count metric value 0 for state: deferred"
Untuk mengekstrak nilai status, seperti deferred
dari entri log
dengan format sebelumnya, Anda dapat melakukan hal seperti:
- Nama kolom:
textPayload
- Ekspresi ekstraktor:
^unfinished.*state: ([a-z]+)
Mengekstrak nilai dari kolom berulang
Entri log mungkin berisi kolom dengan kolom berulang. Dalam JSON, kolom ini
ditampilkan menggunakan tanda kurung siku ([]
). Dari perspektif label,
pertimbangkan kolom berulang sebagai kumpulan dan ekstraktor label sebagai iterator.
Anda memberikan kriteria untuk kecocokan saat menentukan label, dan
ekstraktor melakukan iterasi pada set hingga kecocokan ditemukan. Kecocokan pertama
selalu ditampilkan, meskipun beberapa anggota set cocok dengan kriteria.
Anda memutuskan untuk membuat metrik berbasis log yang menghitung log audit. Sebelum
mengonfigurasi label, Anda meninjau beberapa log audit dan melihat bahwa
format protoPayload
sesuai dengan struktur
AuditLog
. Berikut ini ilustrasi bagian dari entri log audit.
{
...
protoPayload: {
@type: "type.googleapis.com/google.cloud.audit.AuditLog"
authenticationInfo: {1}
authorizationInfo: [
0: {
granted: true
permission: "io.k8s.coordination.v1.leases.get"
resource: "coordination.k8s.io/v1/namespaces/kube-system/leases/maintenance-controller"
}
]
requestMetadata: {2}
status: {1}
...
}
...
}
Anda memutuskan untuk membuat label untuk metrik berbasis log yang menyimpan informasi dari kolom permission
. Anda melihat bahwa kolom ini diformat
seperti io.k8s.xxx
, dengan xxx
adalah string yang memberikan detail
selengkapnya tentang permintaan. String ini mungkin memiliki nilai seperti get
, atau
mungkin memiliki pemformatan yang lebih kompleks seperti io.k8s.coordination.v1.leases.get
.
Untuk meminimalkan jumlah nilai label, Anda tidak ingin mengekstrak
informasi mendetail. Anda hanya ingin menyimpan
nilai seperti get
atau coordination
dalam label. Selain itu, Anda memutuskan bahwa Anda tidak ingin menyertakan awalan umum, io.k8s.
, dalam nilai label.
Selanjutnya, Anda akan mengonfigurasi label. Karena kolom permission
adalah
kolom berulang, dengan induknya adalah kolom authorizationInfo
,
Anda menetapkan nama kolom sebagai berikut:
protoPayload.authorizationInfo.permission
Terakhir, Anda membuat ekspresi reguler berikut:
io.k8s.([a-z]+).*