Halaman ini memberikan petunjuk mendetail tentang cara membuat kueri dan memvisualisasikan log Anda menggunakan antarmuka pengguna Grafana dan Log Query API untuk mendapatkan insight tentang peristiwa dan aktivitas layanan Anda.
Setelah mengumpulkan log dari workload dan layanan yang di-deploy di Google Distributed Cloud (GDC) yang terisolasi, Anda dapat mulai menganalisisnya. Untuk menganalisis log, Anda dapat memvisualisasikan dan memfilternya di panel Grafana yang informatif atau mengaksesnya langsung dari Log Query API menggunakan panggilan HTTP atau gRPC untuk akses terprogram.
Anda dapat mengakses log dengan salah satu dari dua metode berikut:
- Panel Grafana: Dapatkan insight tentang catatan aktivitas project Anda melalui panel Log instance Grafana Anda. Panel ini memungkinkan Anda membuat kueri dan menemukan log tertentu, sehingga memberikan kemampuan observasi data terperinci yang disesuaikan dengan kebutuhan Anda. Grafana menyediakan antarmuka yang mudah digunakan untuk memfilter dan menganalisis data workload Anda, serta membuat dasbor dan panel yang disesuaikan untuk visualisasi yang komprehensif.
- Log Query API: Untuk akses terprogram, kueri log langsung dari Log Query API project Anda. Log Query API adalah API non-Kubernetes yang mendukung HTTP dan gRPC, yang mengekspos endpointnya sendiri kepada Anda. Akses API ini hanya dalam organisasi tertentu di Distributed Cloud dengan mengikuti metode akses API standar.
Sebelum memulai
Untuk mendapatkan izin yang Anda perlukan guna membuat kueri dan memvisualisasikan log di antarmuka pengguna Grafana, minta Admin IAM Organisasi atau Admin IAM Project Anda untuk memberi Anda salah satu peran bawaan Grafana Viewer Organisasi atau Grafana Viewer Project. Bergantung pada tingkat akses dan izin yang Anda perlukan, Anda dapat memperoleh peran Grafana di organisasi atau project.
Atau, untuk mendapatkan izin yang diperlukan untuk membuat kueri log dari Log Query API, minta Admin IAM Project Anda untuk memberi Anda peran Log Query API Querier di namespace project Anda.
Untuk mengetahui informasi selengkapnya tentang peran ini, lihat Siapkan izin IAM.
Membuat kueri dan memfilter log
Pilih salah satu metode berikut untuk membuat kueri dan memfilter log dari workload project Anda:
Panel Log Grafana
Bagian ini menjelaskan cara mengakses log menggunakan panel Log di Grafana.
Mengidentifikasi endpoint Grafana Anda
URL berikut adalah endpoint instance Grafana project Anda:
https://GDC_URL/PROJECT_NAMESPACE/grafana
Ganti kode berikut:
GDC_URL
: URL organisasi Anda di GDC.PROJECT_NAMESPACE
: namespace project Anda.Misalnya, endpoint Grafana untuk project
platform-obs
di organisasiorg-1
adalahhttps://org-1/platform-obs/grafana
.
Melihat log di antarmuka pengguna Grafana
Membuat kueri log di antarmuka pengguna Grafana:
- Di konsol GDC, pilih project Anda.
- Di menu navigasi, pilih Operations > Logging.
Klik View all in Grafana Loki.
Halaman baru akan membuka endpoint Grafana Anda dan menampilkan antarmuka pengguna.
Di antarmuka pengguna, klik jelajahi Jelajahi dari menu navigasi untuk membuka halaman Jelajahi.
Dari menu di panel Explore, pilih sumber data untuk mengambil log, sesuai dengan jenis semesta Anda:
Semesta zona tunggal: Pilih salah satu sumber data berikut untuk menampilkan data logging dari zona tunggal semesta Anda:
- Log operasional: Menampilkan log operasional.
- Log audit: Menampilkan log audit.
Universe multi-zona: Grafana dapat terhubung ke zona yang berbeda dan menampilkan data lintas zona. Pilih salah satu sumber data berikut untuk menampilkan data logging dari zona mana pun di semesta Anda, terlepas dari zona tempat Anda login:
- Log operasional ZONE_NAME: Menampilkan log operasional dari zona tertentu.
- Log audit ZONE_NAME: Menampilkan log audit dari zona tertentu.
Selain itu, untuk memiliki visualisasi data lintas zona dalam satu dasbor dan menambahkan beberapa zona ke kueri, pilih Campuran sebagai sumber data.
Masukkan kueri untuk menelusuri log dari panel Log menggunakan ekspresi LogQL (Bahasa Kueri Log). Anda dapat melakukan langkah ini dengan salah satu cara berikut:
- Gunakan antarmuka pembuat kueri interaktif. Kemudian, klik Run query.
- Masukkan kueri Anda langsung di kolom teks, lalu tekan Shift+Enter untuk menjalankan kueri.
Halaman ini menampilkan log yang cocok dengan kueri Anda. Setelah membuat kueri log, Anda dapat mengekspornya. Klik Ekspor untuk mendownload log dalam format teks biasa atau CSV. Anda juga dapat memilih rentang waktu untuk log Anda.
Gambar 1. Opsi menu untuk membuat kueri log audit dari antarmuka pengguna Grafana.
Pada gambar 1, opsi Log audit menampilkan antarmuka yang memungkinkan Anda membuat kueri dari Grafana untuk mengambil log audit.
Untuk contoh label dan nilai guna membuat kueri log yang berbeda, lihat Contoh kueri dan label.
Pilih rentang waktu untuk log Anda
Untuk membuat kueri log dalam rentang waktu, ikuti langkah-langkah berikut:
Klik menu
Pemilih Waktu di Grafana.Dari menu, lakukan salah satu tindakan berikut:
- Pilih opsi rentang waktu relatif, misalnya, 30 menit terakhir.
- Tetapkan rentang waktu absolut kustom dengan memilih tanggal dan waktu tertentu dari kalender, lalu klik Terapkan rentang waktu.
Secara opsional, klik Ubah setelan waktu untuk mengubah setelan Zona waktu dan Tahun fiskal dari kontrol rentang waktu.
Setelan waktu disimpan per dasbor. Untuk mengetahui informasi selengkapnya tentang kueri selama rentang waktu, lihat https://grafana.com/docs/loki/latest/reference/api/#query-loki-over-a-range-of-time.
Log Query API
Bagian ini menjelaskan cara mengakses log menggunakan Log Query API.
Mengidentifikasi endpoint Log Query API Anda
Log Query API mengekspos dua endpoint berikut untuk mengkueri log audit dan operasional:
Endpoint log audit:
audit-log-query-api.ORG_DOMAIN
Endpoint log operasional:
operational-log-query-api.ORG_DOMAIN
Ganti ORG_DOMAIN
dengan nama domain organisasi. Anda dapat melihat properti ini menggunakan perintah gdcloud config list
. Nama domain harus mengikuti sintaksis
org-name.zone.google.gdch.com
. Misalnya, organisasi bernama org-1
,
di zona zone1
, dan di lingkungan pengujian memiliki domain seperti
org-1.zone1.google.gdch.test
.
Log Query API memiliki tiga opsi endpoint berikut:
- labels: Mencantumkan semua label untuk project.
- labels/labels/LABEL/values: Mencantumkan nilai label tertentu untuk project.
- logs: Mencantumkan log untuk project tertentu.
Untuk mengetahui informasi selengkapnya, lihat dokumentasi API.
Mengirim kueri
Kirim kueri ke endpoint Log Query API menggunakan klien HTTP atau gRPC.
HTTP
Ikuti petunjuk untuk
mengakses API secara langsung dengan klien HTTP.
Anda dapat mengandalkan kubectl
untuk mengelola autentikasi atau menangani
autentikasi sendiri.
Kueri Log Query API menggunakan klien HTTP seperti curl
, wget
, atau klien HTTP yang Anda buat dan kelola. Contoh berikut menggunakan alat
curl
untuk membuat kueri API, dan Anda dapat menggunakan format serupa untuk
perintah wget
:
Autentikasi permintaan cURL:
- Download dan instal gdcloud CLI.
Tetapkan properti gdcloud
core/organization_console_url
:gdcloud config set core/organization_console_url https://GDC_URL
Ganti
GDC_URL
dengan URL organisasi di GDC.Login dengan penyedia identitas yang dikonfigurasi:
gdcloud auth login
Gunakan nama pengguna dan sandi Anda untuk mengautentikasi dan login.
Ekspor token identitas untuk akun yang ditentukan ke variabel lingkungan:
export TOKEN="$($HOME/gdcloud auth print-identity-token --audiences=https://LOG_QUERY_API_ENDPOINT)"
Ganti
LOG_QUERY_API_ENDPOINT
dengan endpoint Log Query API dari tempat Anda ingin membuat kueri log dan domain yang ingin Anda hubungkan. Oleh karena itu, nilai untuk tandaaudiences
dapat berupa, misalnya,https://operational-log-query-api.org-1.zone1.google.gdch.test
.Jika login berhasil, Anda dapat menggunakan header otorisasi dalam permintaan cURL melalui perintah
gdcloud auth print-identity-token
. Untuk mengetahui informasi selengkapnya, lihat gdcloud auth print-identity-token.
Jika Anda ingin mencantumkan semua label untuk project, kirim kueri berikut:
curl -H "Authorization: Bearer ${TOKEN}" \ https://LOG_QUERY_API_ENDPOINT/v1/projects/PROJECT_NAMESPACE/labels \ -H "Content-Type: application/json" -v
Ganti kode berikut:
LOG_QUERY_API_ENDPOINT
: Endpoint Log Query API dari tempat Anda ingin mengirim kueri log.PROJECT_NAMESPACE
: namespace project Anda.
Jika Anda ingin mencantumkan nilai label tertentu untuk project, kirim kueri berikut:
curl -H "Authorization: Bearer ${TOKEN}" \ https://LOG_QUERY_API_ENDPOINT/v1/projects/PROJECT_NAMESPACE/labels/labels/LABEL/values \ -H "Content-Type: application/json" -v
Ganti kode berikut:
LOG_QUERY_API_ENDPOINT
: Endpoint Log Query API dari tempat Anda ingin mengirim kueri log.PROJECT_NAMESPACE
: namespace project Anda.LABEL
: label tertentu yang nilainya ingin Anda kueri.
Jika Anda ingin membuat kueri log untuk project tertentu, buat kueri
logs_filter
dan sertakan dalam isi permintaan:curl -X GET -H "Authorization: Bearer ${TOKEN}" \ https://LOG_QUERY_API_ENDPOINT/v1/projects/PROJECT_NAMESPACE/logs \ -H "Content-Type: application/json" -d \ '{"logs_filter": {"labels_equal": {"LABEL": "LABEL_VALUE"}}}' -v
Ganti kode berikut:
LOG_QUERY_API_ENDPOINT
: Endpoint Log Query API dari tempat Anda ingin mengirim kueri log.PROJECT_NAMESPACE
: namespace project Anda.LABEL
: label tertentu yang ingin Anda kueri lognya.LABEL_VALUE
: nilai label yang ingin Anda kueri lognya.
Lihat dokumentasi API untuk melihat semua opsi dalam membuat kueri
logs_filter
.
gRPC
gRPC didukung secara luas di berbagai bahasa pemrograman dan menyediakan metode komunikasi yang lebih efisien dibandingkan dengan klien HTTP.
Untuk membuat kueri log menggunakan gRPC, Anda harus memenuhi prasyarat berikut:
- Buat library klien Anda sendiri berdasarkan buffer protokol yang disediakan Google.
- Terapkan autentikasi di klien.
- Terapkan percobaan ulang.
Untuk mengetahui informasi tentang buffer protokol, lihat dokumentasi API.
Contoh berikut menunjukkan cara membuat kueri log dari program Go menggunakan klien gRPC yang tidak diautentikasi. Contoh ini mengasumsikan Anda membuat paket golang yang menyertakan file build Bazel untuk mengimpor dependensi kode:
Simpan kode berikut ke program Go bernama
client.go
:package main import ( "context" "crypto/tls" "flag" "fmt" "google.golang.org/grpc/credentials" "google.golang.org/grpc/metadata" pb "<import path to generated log query api protos>/pkg/apis/public/logging/v1/proto" "google.golang.org/grpc" ) var serverAddr = flag.String("server", "localhost:8080", "server address") func main() { flag.Parse() tc := credentials.NewTLS(&tls.Config{InsecureSkipVerify: true}) conn, err := grpc.Dial(*serverAddr, grpc.WithTransportCredentials(tc)) if err != nil { panic(error.Error(fmt.Errorf("create client connection failed: %v", err))) } defer conn.Close() c := pb.NewLogsClient(conn) md := metadata.Pairs("clienttest", "test") ctx := metadata.NewOutgoingContext(context.Background(), md) err = listLabels(ctx, c, "project-foo") if err != nil { panic(error.Error(err)) } if err := listLabelValues(ctx, c, "project-foo", "resource-bar"); err != nil { panic(error.Error(err)) } if err := listLogs(ctx, c, "project-foo", &pb.ListLogsFilter{ LabelsEqual: map[string]string{"resource-bar": "resource-bar-value"}, OrderAscending: true, }); err != nil { panic(error.Error(err)) } } // List all labels for a project. func listLabels(ctx context.Context, c pb.LogsClient, project string) error { lbr := &pb.ListLabelsRequest{ Parent: project, PageSize: 1000, // PageSize can be configured to limit the number of responses per page. } resp, err := c.ListLabels(ctx, lbr) if err != nil { return fmt.Errorf("list labels: %v", err) } fmt.Printf("%v", resp) return nil } // List specific label values for a project. func listLabelValues(ctx context.Context, c pb.LogsClient, project string, label string) error { lbr := &pb.ListLabelValuesRequest{ Parent: project, Label: label, PageSize: 1000, // PageSize can be configured to limit the number of responses per page. } resp, err := c.ListLabelValues(ctx, lbr) if err != nil { return fmt.Errorf("list label values: %v", err) } fmt.Printf("%v", resp) return nil } // List logs for a specific project. func listLogs(ctx context.Context, c pb.LogsClient, project string, lf *pb.ListLogsFilter) error { lbr := &pb.ListLogsRequest{ Parent: project, LogsFilter: lf, PageSize: 5, // PageSize can be configured to limit the number of responses per page. } resp, err := c.ListLogs(ctx, lbr) if err != nil { return fmt.Errorf("list logs: %v", err) } fmt.Printf("logs: %v", resp) return nil }
Jalankan program Go:
go run PATH_TO_API/client.go -server=LOG_QUERY_API_ENDPOINT:443
Ganti kode berikut:
PATH_TO_API
: jalur ke file API.LOG_QUERY_API_ENDPOINT
: Endpoint Log Query API dari tempat Anda ingin mengirim kueri log.
Jika tanda server tidak ditentukan, permintaan default akan mendapatkan
localhost
.
Contoh kueri dan label
Berikut adalah beberapa label default yang dapat Anda gunakan untuk membuat kueri log:
cluster
: nama cluster.namespace
: namespace project Anda.node
: nama node.pod
: nama pod.container
: nama container.
Contoh kode berikut menunjukkan penggunaan label dan nilai untuk membuat kueri berbagai log:
Pilih log server:
{cluster="admin", namespace="kube-system", resources="k8s_container", container="kube-apiserver"}
Pilih log audit cluster:
{cluster="admin", resources="k8s_audit"}