Memecahkan masalah logging di GKE


Halaman ini menunjukkan cara menyelidiki dan menyelesaikan masalah terkait logging GKE.

Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.

Log cluster tidak ada di Cloud Logging

Memastikan logging diaktifkan dalam project

  1. Cantumkan layanan yang diaktifkan:

    gcloud services list --enabled --filter="NAME=logging.googleapis.com"
    

    Output berikut menunjukkan bahwa logging diaktifkan untuk project ini:

    NAME                    TITLE
    logging.googleapis.com  Cloud Logging API
    

    Opsional: Periksa log di Logs Viewer untuk mengetahui siapa yang menonaktifkan API dan kapan mereka menonaktifkan API:

    protoPayload.methodName="google.api.serviceusage.v1.ServiceUsage.DisableService"
    protoPayload.response.services="logging.googleapis.com"
    
  2. Jika logging dinonaktifkan, aktifkan logging:

    gcloud services enable logging.googleapis.com
    

Memastikan logging diaktifkan di cluster

  1. Cantumkan cluster:

    gcloud container clusters list \
        --project=PROJECT_ID \
        '--format=value(name,loggingConfig.componentConfig.enableComponents)' \
        --sort-by=name | column -t
    

    Ganti kode berikut:

    • PROJECT_ID: ID project Google Cloud Anda.

    Outputnya mirip dengan yang berikut ini:

    cluster-1              SYSTEM_COMPONENTS
    cluster-2              SYSTEM_COMPONENTS;WORKLOADS
    cluster-3
    

    Jika nilai cluster Anda kosong, logging akan dinonaktifkan. Misalnya, cluster-3 dalam output ini menonaktifkan logging.

  2. Aktifkan logging cluster jika ditetapkan ke NONE:

    gcloud container clusters update CLUSTER_NAME  \
        --logging=SYSTEM,WORKLOAD \
        --location=COMPUTE_LOCATION
    

    Ganti kode berikut:

Memastikan node di node pool memiliki cakupan akses Cloud Logging

Salah satu cakupan berikut diperlukan bagi node untuk menulis log ke Cloud Logging:

  • https://www.googleapis.com/auth/logging.write
  • https://www.googleapis.com/auth/cloud-platform
  • https://www.googleapis.com/auth/logging.admin
  1. Periksa cakupan yang dikonfigurasi pada setiap node pool di cluster:

    gcloud container node-pools list --cluster=CLUSTER_NAME \
        --format="table(name,config.oauthScopes)" \
        --location COMPUTE_LOCATION
    

    Ganti kode berikut:

    Migrasikan workload Anda dari node pool lama ke node pool yang baru dibuat dan pantau progresnya.

  2. Buat node pool baru dengan cakupan logging yang benar:

    gcloud container node-pools create NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --location=COMPUTE_LOCATION \
        --scopes="gke-default"
    

    Ganti kode berikut:

Mengidentifikasi dan memperbaiki masalah izin terkait penulisan log

GKE menggunakan akun layanan IAM yang dilampirkan ke node Anda untuk menjalankan tugas sistem seperti logging dan pemantauan. Setidaknya, akun layanan node ini harus memiliki peran Akun Layanan Node Default Kubernetes Engine (roles/container.defaultNodeServiceAccount) di project Anda. Secara default, GKE menggunakan akun layanan default Compute Engine, yang dibuat secara otomatis di project Anda, sebagai akun layanan node.

Jika organisasi Anda menerapkan batasan kebijakan organisasi iam.automaticIamGrantsForDefaultServiceAccounts, akun layanan Compute Engine default di project Anda mungkin tidak otomatis mendapatkan izin yang diperlukan untuk GKE.

  • Untuk mengidentifikasi masalah, periksa error 401 dalam beban kerja logging sistem di cluster Anda:

    [[ $(kubectl logs -l k8s-app=fluentbit-gke -n kube-system -c fluentbit-gke | grep -cw "Received 401") -gt 0 ]] && echo "true" || echo "false"
    

    Jika outputnya adalah true, berarti beban kerja sistem mengalami error 401, yang menunjukkan kurangnya izin. Jika outputnya adalah false, lewati langkah-langkah lainnya dan coba prosedur pemecahan masalah yang berbeda.

  1. Temukan nama akun layanan yang digunakan node Anda:

    console

    1. Buka halaman Cluster Kubernetes:

      Buka cluster Kubernetes

    2. Dalam daftar cluster, klik nama cluster yang ingin diperiksa.
    3. Bergantung pada mode operasi cluster, lakukan salah satu hal berikut:
      • Untuk cluster mode Autopilot, di bagian Keamanan, temukan kolom Service account.
      • Untuk cluster mode Standar, lakukan hal berikut:
        1. Klik tab Nodes.
        2. Di tabel Node pool, klik nama node pool. Halaman Detail node pool akan terbuka.
        3. Di bagian Keamanan, temukan kolom Service account.

    Jika nilai di kolom Service account adalah default, node Anda akan menggunakan akun layanan default Compute Engine. Jika nilai di kolom ini bukan default, node Anda menggunakan akun layanan kustom. Untuk memberikan peran yang diperlukan ke akun layanan kustom, lihat Menggunakan akun layanan IAM dengan hak istimewa terendah.

    gcloud

    Untuk cluster mode Autopilot, jalankan perintah berikut:

    gcloud container clusters describe CLUSTER_NAME \
        --location=LOCATION \
        --flatten=autoscaling.autoprovisioningNodePoolDefaults.serviceAccount

    Untuk cluster mode Standar, jalankan perintah berikut:

    gcloud container clusters describe CLUSTER_NAME \
        --location=LOCATION \
        --format="table(nodePools.name,nodePools.config.serviceAccount)"

    Jika outputnya adalah default, node Anda akan menggunakan akun layanan default Compute Engine. Jika outputnya bukan default, node Anda menggunakan akun layanan kustom. Untuk memberikan peran yang diperlukan ke akun layanan kustom, lihat Menggunakan akun layanan IAM dengan hak istimewa terendah.

  2. Untuk memberikan peran roles/container.defaultNodeServiceAccount ke akun layanan default Compute Engine, selesaikan langkah-langkah berikut:

    console

    1. Buka halaman Sambutan:

      Buka Selamat Datang

    2. Di kolom Project number, klik Copy to clipboard.
    3. Buka halaman IAM:

      Buka IAM

    4. Klik Berikan akses.
    5. Di kolom Akun utama baru, tentukan nilai berikut:
      PROJECT_NUMBER-compute@developer.gserviceaccount.com
      Ganti PROJECT_NUMBER dengan nomor project yang Anda salin.
    6. Di menu Select a role, pilih peran Kubernetes Engine Default Node Service Account.
    7. Klik Simpan.

    gcloud

    1. Temukan nomor project Google Cloud Anda:
      gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)"

      Ganti PROJECT_ID dengan project ID Anda.

      Outputnya mirip dengan hal berikut ini:

      12345678901
      
    2. Berikan peran roles/container.defaultNodeServiceAccount ke akun layanan default Compute Engine:
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
          --role="roles/container.defaultNodeServiceAccount"

      Ganti PROJECT_NUMBER dengan nomor project dari langkah sebelumnya.

Memverifikasi bahwa kuota API penulisan Cloud Logging belum tercapai

Pastikan Anda belum mencapai kuota penulisan API untuk Cloud Logging.

  1. Buka halaman Quotas di Konsol Google Cloud.

    Buka Quotas

  2. Filter tabel berdasarkan "Cloud Logging API".

  3. Pastikan Anda belum mencapai batas kuota.

Men-debug masalah logging GKE dengan gcpdiag

Jika Anda tidak memiliki atau mendapatkan log yang tidak lengkap dari cluster GKE, gunakan alat gcpdiag untuk pemecahan masalah.

gcpdiag adalah alat open source. Ini bukan produk Google Cloud yang didukung secara resmi. Anda dapat menggunakan alat gcpdiag untuk membantu mengidentifikasi dan memperbaiki masalah project Google Cloud. Untuk mengetahui informasi selengkapnya, lihat project gcpdiag di GitHub.

Jika log dari cluster GKE tidak ada atau tidak lengkap, selidiki potensi penyebabnya dengan berfokus pada setelan konfigurasi inti berikut yang penting untuk fungsi logging yang tepat:

  • Logging Tingkat Project: Memastikan bahwa project Google Cloud yang menghosting cluster GKE telah mengaktifkan Cloud Logging API.
  • Logging Tingkat Cluster: Memverifikasi bahwa logging diaktifkan secara eksplisit dalam konfigurasi cluster GKE.
  • Izin Node Pool: Mengonfirmasi bahwa node dalam node pool cluster telah mengaktifkan cakupan 'Cloud Logging Write', sehingga node tersebut dapat mengirim data log.
  • Izin Akun Layanan: Memvalidasi bahwa akun layanan yang digunakan oleh node pool memiliki izin IAM yang diperlukan untuk berinteraksi dengan Cloud Logging. Secara khusus, peran 'roles/logging.logWriter' biasanya diperlukan.
  • Kuota Tulis Cloud Logging API: Memverifikasi bahwa kuota Tulis Cloud Logging API belum terlampaui dalam jangka waktu yang ditentukan.

Konsol Google Cloud

  1. Selesaikan, lalu salin perintah berikut.
  2. gcpdiag runbook gke/logs \
        --parameter project_id=PROJECT_ID \
        --parameter name=GKE_NAME \
        --parameter location=LOCATION
  3. Buka konsol Google Cloud dan aktifkan Cloud Shell.
  4. Buka Cloud Console
  5. Tempel perintah yang disalin.
  6. Jalankan perintah gcpdiag, yang mendownload image docker gcpdiag, lalu melakukan pemeriksaan diagnostik. Jika berlaku, ikuti petunjuk output untuk memperbaiki pemeriksaan yang gagal.

Docker

Anda dapat menjalankan gcpdiag menggunakan wrapper yang memulai gcpdiag dalam penampung Docker. Docker atau Podman harus diinstal.

  1. Salin dan jalankan perintah berikut di workstation lokal Anda.
    curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
  2. Jalankan perintah gcpdiag.
    ./gcpdiag runbook gke/logs \
        --parameter project_id=PROJECT_ID \
        --parameter name=GKE_NAME \
        --parameter location=LOCATION

Lihat parameter yang tersedia untuk runbook ini.

Ganti kode berikut:

  • PROJECT_ID: ID project yang berisi resource.
  • GKE_NAME: Nama cluster GKE.
  • LOCATION: Zona atau region cluster GKE.

Flag yang berguna:

Untuk mengetahui daftar dan deskripsi semua flag alat gcpdiag, lihat petunjuk penggunaan gcpdiag.

Langkah selanjutnya

Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.