Menggunakan kolektor diagnostik

Kolektor diagnostik adalah alat yang mengambil data diagnostik pada komponen Kubernetes Instance hybrid Apigee on-demand, dan menyimpannya di bucket penyimpanan Google Cloud. Anda memanggil Kolektor diagnostik dengan perintah apigeectl diagnostic.

Data Sistem apa yang diambil?

Kolektor diagnostik mengambil jenis data berikut:

  • Mengubah level Log.
  • {i>Jstack<i}.
  • yaml konfigurasi POD.
  • PS -ef output.
  • pembuangan TCP.
  • Output TOP.

Apa yang terjadi pada data?

Saat Kolektor Diagnostik mengambil data, data akan diupload ke bucket penyimpanan di project Google Cloud Anda. Anda dapat melihat data yang disimpan di Google Cloud Platform: Browser Cloud Storage.

Anda juga dapat memilih untuk membagikan data ini dengan Dukungan Google Apigee saat membuat dukungan tiket.

Prasyarat untuk menjalankan kolektor Diagnostik

Sebelum menggunakan kolektor Diagnostik, Anda harus menyelesaikan prasyarat berikut:

Bucket Google Cloud Storage

Buat bucket Google Cloud Storage dengan nama unik di project Google Cloud Anda. Anda dapat membuat dan mengelola bucket dengan perintah gcloud storage atau di Google Cloud Platform: Browser Cloud Storage.

Contoh:

gcloud storage buckets create gs://apigee_diagnostic_data
Creating gs://apigee_diagnostic_data/...

Lihat Membuat bucket penyimpanan untuk mengetahui petunjuknya.

Akun layanan

Buat akun layanan dengan peran Storage Admin (roles/storage.admin) di project Anda, dan download file kunci .json akun layanan.

Akun layanan dapat memiliki nama unik. Panduan ini menggunakan "apigee-diagnostic" untuk nama akun layanan.

Contoh:

gcloud config set project ${PROJECT_ID}
gcloud iam service-accounts create apigee-diagnostic
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
    --member="serviceAccount:apigee-diagnostic@${PROJECT_ID}.iam.gserviceaccount.com" \
    --role="roles/storage.admin"
gcloud iam service-accounts keys create ${PROJECT_ID}-apigee-diagnostic.json \
    --iam-account=apigee-diagnostic@${PROJECT_ID}.iam.gserviceaccount.com

Lihat:

Menggunakan Kolektor diagnostik

Urutan untuk menggunakan kolektor Diagnostik adalah:

  1. Konfigurasikan stanza Diagnostik di file overrides.yaml Anda untuk memilih jenis sendiri, penampung Apigee, dan tiap-tiap pod yang data diagnostiknya ingin Anda dapatkan. Lihat Mengonfigurasi overrides.yaml untuk Kolektor diagnostik.
  2. Jalankan kolektor Diagnostik dengan perintah apigeectl berikut.
    apigeectl diagnostic -f OVERRIDES_FILE

    Dengan OVERRIDES_FILE adalah jalur ke file overrides.yaml Anda.

  3. Periksa log:
    1. Dapatkan pod di namespace apigee-diagnostic.
      kubectl get pods -n apigee-diagnostic
    2. Catat pod dengan nama yang berisi diagnostic-collector
    3. Periksa log dengan perintah berikut:
      kubectl -n apigee-diagnostic logs -f POD_NAME

      Dengan POD_NAME adalah nama pod kolektor Diagnostik.

      Anda juga dapat melihat log yang dikumpulkan di Google Cloud Platform: Browser Cloud Storage.

  4. Setelah Anda mengumpulkan data, hapus Pengumpul diagnostik. Anda tidak dapat menjalankannya lagi hingga Anda menghapusnya.
    apigeectl diagnostic delete -f OVERRIDES_FILE

Mengonfigurasi overrides.yaml untuk kolektor Diagnostik

Sebelum dapat menjalankan kolektor Diagnostik, Anda harus mengonfigurasinya di File overrides.yaml.

Untuk referensi lengkap properti konfigurasi diagnostic, lihat Referensi properti konfigurasi: diagnostic.

Properti wajib

Properti berikut diperlukan agar kolektor Diagnostik dapat dijalankan.

  • diagnostic.serviceAccountPath: Jalur ke file kunci akun layanan untuk akun layanan dengan peran Storage Admin di Prasyarat.
  • diagnostic.operation: Menentukan apakah akan mengumpulkan semua statistik atau hanya log.

    Nilainya adalah: "ALL" atau "LOGGING"

    Jika Anda menetapkan diagnostic.operation ke "LOGGING", hal berikut properti wajib diisi:

  • diagnostic.bucket: Nama bucket Google Cloud Storage tempat data diagnostik akan disetorkan. Ini adalah bucket yang Anda buat di Prasyarat.
  • diagnostic.container: Fungsi ini menentukan jenis pod yang datanya Anda ambil dari mereka. Nilainya dapat berupa salah satu dari:
    Nilai containerKomponen ApigeeNamespace KubernetesContoh nama pod dalam container ini
    apigee-cassandra Cassandra apigee apigee-cassandra-default-0
    istio-proxy Traffic masuk Istio istio-system istio-ingressgateway-696879cdf8-9zzzf
    apigee-mart-server MART apigee apigee-mart-hybrid-example-d89fed1-151-jj2ux-l7nlb
    apigee-runtime Message Processor apigee apigee-runtime-hybrid-example-3b2ebf3-151-s64bh-g9qmv
    apigee-synchronizer Penyelaras apigee apigee-synchronizer-hybrid-example-3b2ebf3-151-xx4z6cg78
    apigee-udca UDCA apigee apigee-udca-hybrid-example-3b2ebf3-151-q4g2c-vnzg9
    apigee-watcher Pengamat apigee apigee-watcher-hybrid-example-d89fed1-151-cpu3s-sxxdf
  • diagnostic.namespace: Namespace Kubernetes tempat pod Anda berada yang mengumpulkan data pada berada. Namespace harus berupa nama yang benar untuk penampung yang Anda tentukan dengan diagnostic.container.
  • diagnostic.podNames: Nama tiap pod tempat Anda ingin mengumpulkan data diagnostik. Contoh:
    diagnostic:
     …
     podNames:
     - apigee-runtime-hybrid-example-3b2ebf3-150-8vfoj-2wcjn
     - apigee-runtime-hybrid-example-3b2ebf3-150-8vfoj-6xzn2

Properti diperlukan hanya jika operasi disetel ke LOGGING

Properti berikut diperlukan hanya saat menjalankan kolektor Diagnostik dengan diagnostic.operation adalah LOGGING.

  • diagnostic.loggerNames: Menentukan menurut nama pencatat log yang datanya akan dikumpulkan. Sebagai Apigee Hybrid versi 1.6.0, satu-satunya nilai yang didukung adalah ALL, artinya semua pencatat log. Contoh:
    diagnostic:
     …
     loggingDetails:
       loggerNames:
       - ALL
  • diagnostic.logLevel: Menentukan perincian data logging yang akan dikumpulkan. Di Apigee Hybrid 1.6, Hanya FINE yang didukung.
  • diagnostic.logDuration: Durasi dalam milidetik data log dikumpulkan. J nilai standar adalah 30000.

Properti opsional

Properti berikut bersifat opsional.

  • diagnostic.tcpDumpDetails.maxMsgs: Menetapkan jumlah maksimum tcpDump pesan untuk dikumpulkan. Apigee merekomendasikan nilai maksimum tidak lebih dari 1000.
  • diagnostic.tcpDumpDetails.timeoutInSeconds: Menetapkan jumlah waktu dalam detik untuk tunggu hingga tcpDump menampilkan pesan.
  • diagnostic.threadDumpDetails.delayInSeconds: Keterlambatan dalam detik antara mengumpulkan tiap thread dump. Harus digunakan dengan diagnostic.threadDumpDetails.iterations.
  • diagnostic.threadDumpDetails.iterations: Jumlah thread dump jstack iterasi yang harus dikumpulkan. Harus digunakan dengan diagnostic.threadDumpDetails.delayInSeconds.

Contoh umum

Berikut adalah contoh stanza diagnostic yang menunjukkan semua kemungkinan entri:

diagnostic:
  # required properties:
  serviceAccountPath: "service-accounts/apigee-diagnostics.json"
  operation: "ALL"
  bucket: "diagnostics_data"
  container: "apigee-runtime"
  namespace: "apigee"
  podNames:
  - apigee-runtime-hybrid-example-3b2ebf3-150-8vfoj-2wcjn
  - apigee-runtime-hybrid-example-3b2ebf3-150-8vfoj-6xzn2

  # required if operation is Logging
  loggingDetails:
    loggerNames:
    - ALL
    logLevel: FINE
    logDuration: 30000

  # optional properties:
  tcpDumpDetails:
    maxMsgs: 10
    timeoutInSeconds: 100

  threadDumpDetails:
    iterations: 5
    delayInSeconds: 2

Kasus penggunaan umum

Contoh berikut menunjukkan cara mengonfigurasi dan menggunakan Pengumpul diagnostik dalam beberapa situasi umum.

Latensi Proxy Tinggi

Dalam hal ini, Apigee-runtime membutuhkan waktu lama untuk memproses permintaan, sehingga menyebabkan pelanggan melihat dan latensi proxy yang tinggi. Anda perlu mengumpulkan output Jstack dan TOP.

  1. Pilih 2 pod runtime.
  2. Buat stanza diagnostic dengan struktur berikut:
    diagnostic:
      serviceAccountPath: "service-accounts/apigee-diagnostics.json"
      operation: "ALL"
      bucket: "diagnostics_data"
      container: "apigee-runtime"
      namespace: "apigee"
      podNames:
      - apigee-runtime-hybrid-example-3b2ebf3-150-8vfoj-2wcjn
      - apigee-runtime-hybrid-example-3b2ebf3-150-8vfoj-6xzn2
    
      tcpDumpDetails:
        maxMsgs: 10
    
      threadDumpDetails:
        iterations: 15
        delayInSeconds: 1
  3. Setelah mengonfigurasi stanza diagnostic, jalankan kolektor Diagnostik.
    apigeectl diagnostic -f OVERRIDES_FILE
  4. Kumpulkan log dan hapus kolektor Diagnostik.
    apigeectl diagnostic delete -f OVERRIDES_FILE

Masalah jaringan / konektivitas

Anda perlu menjalankan diagnostik di apigee-runtime serta pod gateway masuk.

  1. Pilih 2 pod runtime.
  2. Buat stanza diagnostic dengan struktur berikut:
    diagnostic:
      serviceAccountPath: "service-accounts/apigee-diagnostics.json"
      operation: "ALL"
      bucket: "diagnostics_data"
      container: "apigee-runtime"
      namespace: "apigee"
      podNames:
      - apigee-runtime-hybrid-example-3b2ebf3-150-8vfoj-2wcjn
      - apigee-runtime-hybrid-example-3b2ebf3-150-8vfoj-6xzn2
    
      tcpDumpDetails:
        maxMsgs: 1000
  3. Setelah mengonfigurasi stanza diagnostic, jalankan kolektor Diagnostik.
    apigeectl diagnostic -f OVERRIDES_FILE
  4. Kumpulkan log dan hapus kolektor Diagnostik.
    apigeectl diagnostic delete -f OVERRIDES_FILE
  5. Pilih dua pod dari gateway masuk Istio.
  6. Konfigurasi ulang stanza diagnostic Anda dengan pod masuk Istio:
    diagnostic:
      serviceAccountPath: "service-accounts/apigee-diagnostics.json"
      operation: "ALL"
      bucket: "diagnostics_data"
      container: "istio-proxy"
      namespace: "istio-system"
      podNames:
      - istio-ingressgateway-696879cdf8-9zzzf
      - istio-ingressgateway-696879cdf8-6abc7
    
      tcpDumpDetails:
        maxMsgs: 1000
  7. Setelah mengonfigurasi stanza diagnostic, jalankan kolektor Diagnostik.
    apigeectl diagnostic -f OVERRIDES_FILE
  8. Kumpulkan log dan hapus kolektor Diagnostik.
    apigeectl diagnostic delete -f OVERRIDES_FILE

Proxy menampilkan error yang tidak terduga atau kontrak baru tidak diterapkan

Dalam hal ini Anda perlu mengubah level log untuk debug setidaknya selama 5 menit, atau bahkan 10 menit sebagai dalam contoh ini. Langkah ini akan meningkatkan jumlah log, tetapi informasi yang berguna akan dicatat. Anda akan menjalankan Kolektor diagnostik dua kali, sekali di runtime Apigee lalu di Sinkronisasi Apigee.

  1. Pilih 2 pod runtime.
  2. Buat stanza diagnostic dengan struktur berikut:
    diagnostic:
      serviceAccountPath: "service-accounts/apigee-diagnostics.json"
      operation: "LOGGING"
      bucket: "diagnostics_data"
      namespace: "apigee"
      container: "apigee-runtime"
      podNames:
      - apigee-runtime-hybrid-example-3b2ebf3-150-8vfoj-2wcjn
      - apigee-runtime-hybrid-example-3b2ebf3-150-8vfoj-6xzn2
    
      loggingDetails:
        loggerNames:
        - ALL
        logLevel: FINE
        logDuration: 60000
    
  3. Setelah mengonfigurasi stanza diagnostic, jalankan kolektor Diagnostik.
    apigeectl diagnostic -f OVERRIDES_FILE
  4. Kumpulkan log dan hapus kolektor Diagnostik.
    apigeectl diagnostic delete -f OVERRIDES_FILE
  5. Pilih 2 pod sinkronisasi.
  6. Buat stanza diagnostic dengan struktur berikut:
    diagnostic:
      serviceAccountPath: "service-accounts/apigee-diagnostics.json"
      operation: "LOGGING"
      bucket: "diagnostics_data"
      namespace: "apigee"
      container: "apigee-synchronizer"
      podNames:
      - apigee-synchronizer-hybrid-example-3b2ebf3-150-xx4z-6cg78
      - apigee-synchronizer-hybrid-example-3b2ebf3-150-xx4z-1a2b3
    
      loggingDetails:
        loggerNames:
        - ALL
        logLevel: FINE
        logDuration: 60000
    
  7. Setelah mengonfigurasi stanza diagnostic, jalankan kolektor Diagnostik.
    apigeectl diagnostic -f OVERRIDES_FILE
  8. Kumpulkan log dan hapus kolektor Diagnostik.
    apigeectl diagnostic delete -f OVERRIDES_FILE