Membuat kueri dan melihat log

Halaman ini memberikan petunjuk mendetail tentang cara membuat kueri dan memvisualisasikan log menggunakan antarmuka pengguna Grafana untuk mendapatkan insight tentang peristiwa dan aktivitas layanan Anda.

Setelah mengumpulkan log dari workload dan layanan yang di-deploy di appliance air-gapped Google Distributed Cloud (GDC), Anda dapat mulai menganalisisnya. Untuk menganalisis log, Anda dapat memvisualisasikan dan memfilternya di panel Grafana yang informatif atau panggilan gRPC untuk akses terprogram.

Anda dapat mengakses log dengan 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.

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 untuk log Anda

Dengan membuat kueri log dari UI instance pemantauan sistem, Anda dapat memilih sumber data untuk mengambil log operasional dari project dan mendapatkan tampilan terintegrasi dari kueri Anda. Untuk memfilter hasil, telusuri log menurut label menggunakan ekspresi bahasa kueri. Misalnya, Anda dapat menetapkan label cluster dan namespace dalam kueri ke nilai yang mengidentifikasi cluster dan namespace project Anda.

Endpoint instance pemantauan sistem

Untuk Operator Aplikasi (AO)

URL berikut adalah endpoint instance pemantauan project Anda:

https://GDC_URL/PROJECT_NAMESPACE/grafana

Ganti kode berikut:

  • GDC_URL: URL organisasi Anda di GDC.
  • PROJECT_NAMESPACE: Namespace project Anda.

Untuk Admin Platform (PA)

URL berikut adalah endpoint instance pemantauan project Anda:

https://GDC_URL/platform-obs/grafana

Ganti GDC_URL dengan URL organisasi Anda di GDC.

Membuat kueri dan memfilter log

Pilih salah satu metode berikut untuk membuat kueri dan memfilter log dari workload project Anda:

Bagian ini menjelaskan cara mengakses log menggunakan panel Log di Grafana.

Mengidentifikasi endpoint Grafana Anda

Untuk Operator Aplikasi (AO)

URL berikut adalah endpoint instance pemantauan project Anda:

https://GDC_URL/PROJECT_NAMESPACE/grafana

Ganti kode berikut:

  • GDC_URL: URL organisasi Anda di GDC.
  • PROJECT_NAMESPACE: Namespace project Anda.

Untuk Admin Platform (PA)

URL berikut adalah endpoint instance pemantauan project Anda:

https://GDC_URL/platform-obs/grafana

Ganti GDC_URL dengan URL organisasi Anda di GDC.

Melihat log di antarmuka pengguna Grafana

Membuat kueri log di antarmuka pengguna Grafana:

  1. Di konsol GDC, pilih project Anda.
  2. Di menu navigasi, pilih Operations > Logging.
  3. Klik View all in Grafana Loki.

Halaman baru akan membuka endpoint Grafana dan menampilkan antarmuka pengguna.

  1. Di antarmuka pengguna, klik explore Jelajah dari menu navigasi untuk membuka halaman Jelajah.
  2. Dari menu di panel Jelajahi, 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.

  • 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.

  1. 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.

    Opsi Log audit dipilih di halaman Jelajahi untuk mendapatkan log audit.

    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 yang akan dikueri di 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:

    1. Klik menu Pemilih Waktu di Grafana.

    2. 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.
    3. 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.

    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:

    1. Autentikasi permintaan cURL:

      1. Download dan instal gdcloud CLI.
      2. 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.

      3. Login dengan penyedia identitas yang dikonfigurasi:

        gdcloud auth login
        
      4. Gunakan nama pengguna dan sandi Anda untuk mengautentikasi dan login.

      5. 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 tanda audiences 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.

    2. 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.
    3. 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.
    4. 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:

    1. 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
      }
      
    2. 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"}