Logging dan pemantauan untuk cluster yang terpasang

Halaman ini menunjukkan cara mengekspor log dan metrik dari cluster terlampir ke Cloud Logging dan Cloud Monitoring.

Cara kerjanya

Kemampuan observasi Google Cloud adalah solusi kemampuan observasi bawaan untuk Google Cloud. Untuk mengekspor telemetri tingkat cluster dari cluster yang terpasang ke Google Cloud, Anda harus men-deploy agen ekspor open source berikut ke cluster Anda:

  • Stackdriver Log Aggregator (stackdriver-log-aggregator-*). Fluentd StatefulSet yang mengirim log ke Cloud Logging (sebelumnya bernama Stackdriver Logging).
  • Stackdriver Log Forwarder (stackdriver-log-forwarder-*). Daemonset Fluentbit yang meneruskan log dari setiap node Kubernetes ke Agregator Log Stackdriver.
  • Stackdriver Metrics Collector (stackdriver-prometheus-k8s-*). Prometheus StatefulSet, yang dikonfigurasi dengan container file bantuan ekspor stackdriver, untuk mengirim metrik Prometheus ke Cloud Monitoring (sebelumnya bernama Stackdriver Monitoring). Sidecar adalah container lain di dalam pod yang sama yang membaca metrik yang disimpan oleh server prometheus di disk dan meneruskannya ke Cloud Monitoring API.

Prasyarat

  1. Project Google Cloud dengan penagihan diaktifkan. Lihat panduan harga kami untuk mengetahui biaya Cloud Operations.

  2. Satu cluster terpasang, yang terdaftar menggunakan panduan ini. Jalankan perintah berikut untuk memverifikasi bahwa cluster Anda sudah terdaftar.

    gcloud container fleet memberships list
    

    Contoh output:

    NAME  EXTERNAL_ID
    eks   ae7b76b8-7922-42e9-89cd-e46bb8c4ffe4
    

  3. Lingkungan lokal tempat Anda dapat mengakses cluster dan menjalankan perintah kubectl. Lihat panduan memulai GKE untuk mengetahui petunjuk cara menginstal kubectl melalui gcloud. Jalankan perintah berikut untuk memverifikasi bahwa Anda dapat menjangkau cluster yang terpasang menggunakan kubectl.

    kubectl cluster-info
    

    Contoh output:

    Kubernetes master is running at https://[redacted].gr7.us-east-2.eks.amazonaws.com
    

Penyiapan

  1. Clone repositori sampel dan buka direktori untuk panduan ini.

    git clone https://github.com/GoogleCloudPlatform/anthos-samples
    cd anthos-samples/attached-logging-monitoring
    
  2. Tetapkan variabel project ID ke project tempat Anda mendaftarkan cluster.

    PROJECT_ID="your-project-id"
    
  3. Membuat akun layanan Google Cloud dengan izin untuk menulis metrik dan log ke Cloud Monitoring dan Cloud Logging API. Anda akan menambahkan kunci akun layanan ini ke beban kerja yang di-deploy di bagian berikutnya.

    gcloud iam service-accounts create anthos-lm-forwarder
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="serviceAccount:anthos-lm-forwarder@${PROJECT_ID}.iam.gserviceaccount.com" \
      --role=roles/logging.logWriter
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="serviceAccount:anthos-lm-forwarder@${PROJECT_ID}.iam.gserviceaccount.com" \
      --role=roles/monitoring.metricWriter
    
  4. Buat dan download kunci JSON untuk akun layanan yang baru saja Anda buat, lalu buat secret Kubernetes di cluster Anda menggunakan kunci tersebut.

    gcloud iam service-accounts keys create credentials.json \
    --iam-account anthos-lm-forwarder@${PROJECT_ID}.iam.gserviceaccount.com
    
    kubectl create secret generic google-cloud-credentials -n kube-system --from-file credentials.json
    

Menginstal agen logging

  1. Ubah ke direktori logging/.

    cd logging/
    
  2. Buka aggregator.yaml. Di bagian bawah file, tetapkan variabel berikut ke nilai yang sesuai dengan project dan cluster Anda:

    project_id [PROJECT_ID]
    k8s_cluster_name [CLUSTER_NAME]
    k8s_cluster_location [CLUSTER_LOCATION]
    

    Anda dapat menemukan lokasi cluster dengan menjalankan perintah berikut menggunakan nama keanggotaan cluster terlampir, dan mendapatkan lokasi yang muncul di /locations/<location>.

    gcloud container fleet memberships describe eks | grep name
    

    Output:

    name: projects/my-project/locations/global/memberships/eks
    

  3. Di aggregator.yaml, di bagian volumeClaimTemplates/spec, tentukan storageClassName PersistentVolumeClaim untuk cluster Anda: kami telah menyediakan nilai default untuk EKS dan AKS agar Anda dapat menghapus komentar sebagaimana mestinya. Jika Anda menggunakan EKS, nilainya adalah gp2. Untuk AKS, nilainya adalah default.

    Jika Anda telah mengonfigurasi Kelas Penyimpanan Kubernetes kustom di AWS atau Azure, ingin menggunakan class penyimpanan non-default, atau menggunakan jenis cluster lain yang sesuai, Anda dapat menambahkan storageClassName Anda sendiri. storageClassName yang sesuai didasarkan pada jenis PersistentVolume (PV) yang telah disediakan oleh administrator untuk cluster menggunakan StorageClass. Anda dapat mengetahui lebih lanjut mengenai kelas penyimpanan dan kelas penyimpanan default untuk penyedia Kubernetes utama lainnya di dokumentasi Kubernetes.

    # storageClassName: standard #Google Cloud
    # storageClassName: gp2 #AWS EKS
    # storageClassName: default #Azure AKS
    
  4. Deploy agregator log dan forwarder ke cluster.

    kubectl apply -f aggregator.yaml
    kubectl apply -f forwarder.yaml
    
  5. Pastikan pod telah dimulai. Anda akan melihat 2 pod agregator, dan satu pod forwarder per node pekerja Kubernetes. Misalnya, dalam cluster 4 node, Anda akan melihat 4 pod forwarder.

    kubectl get pods -n kube-system | grep stackdriver-log
    

    Output:

    stackdriver-log-aggregator-0                 1/1     Running   0          139m
    stackdriver-log-aggregator-1                 1/1     Running   0          139m
    stackdriver-log-forwarder-2vlxb              1/1     Running   0          139m
    stackdriver-log-forwarder-dwgb7              1/1     Running   0          139m
    stackdriver-log-forwarder-rfrdk              1/1     Running   0          139m
    stackdriver-log-forwarder-sqz7b              1/1     Running   0          139m
    

  6. Dapatkan log agregator dan pastikan bahwa log dikirim ke Google Cloud.

    kubectl logs stackdriver-log-aggregator-0 -n kube-system
    

    Output:

    2020-10-12 14:35:40 +0000 [info]: #3 [google_cloud] Successfully sent gRPC to Stackdriver Logging API.
    

  7. Deploy aplikasi pengujian ke cluster Anda. Ini adalah server web HTTP dasar dengan loadgenerator.

    kubectl apply -f  https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/server/server.yaml
    
    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/loadgen/loadgen.yaml
    
  8. Pastikan Anda dapat melihat log dari cluster yang terpasang di dasbor Cloud Logging. Buka Logs Explorer di konsol Google Cloud:

    Buka Logs Explorer

  9. Di Logs Explorer, salin contoh kueri di bawah ke kolom Query builder, lalu ganti ${your-cluster-name} dengan nama cluster Anda. Klik Jalankan kueri. Anda akan melihat log cluster terbaru muncul di bagian Query results.

    resource.type="k8s_container" resource.labels.cluster_name="${your-cluster-name}"
    

Log untuk cluster yang dilampirkan

Menginstal agen pemantauan

  1. Keluar dari direktori logging/ lalu masuk ke direktori monitoring/.

    cd ../monitoring
    
  2. Buka prometheus.yaml. Di bagian stackdriver-prometheus-sidecar/args, tetapkan variabel berikut agar sesuai dengan lingkungan Anda.

    "--stackdriver.project-id=[PROJECT_ID]"
    "--stackdriver.kubernetes.location=[CLUSTER_LOCATION]"
    "--stackdriver.generic.location=[CLUSTER_LOCATION]"
    "--stackdriver.kubernetes.cluster-name=[CLUSTER_NAME]"
    
  3. Dari prometheus.yaml, di bagian volumeClaimTemplates/spec, hapus tanda komentar pada storageClassName yang cocok dengan penyedia cloud Anda, seperti yang dijelaskan dalam Menginstal agen logging.

    # storageClassName: standard #Google Cloud
    # storageClassName: gp2 #AWS EKS
    # storageClassName: default #Azure AKS
    
  4. Deploy StatefulSet stackdriver-prometheus, yang dikonfigurasi dengan file bantuan pengekspor, ke cluster Anda.

    kubectl apply -f server-configmap.yaml
    kubectl apply -f sidecar-configmap.yaml
    kubectl apply -f prometheus.yaml
    
  5. Pastikan pod stackdriver-prometheus sedang berjalan.

    watch kubectl get pods -n kube-system | grep stackdriver-prometheus
    
    Output:
    stackdriver-prometheus-k8s-0         2/2     Running   0          5h24m
    
  6. Mendapatkan log container file bantuan Stackdriver Prometheus untuk memverifikasi bahwa pod telah dimulai.

    kubectl logs stackdriver-prometheus-k8s-0 -n kube-system stackdriver-prometheus-sidecar
    
    Output:
    level=info ts=2020-11-18T21:37:24.819Z caller=main.go:598 msg="Web server started"
    level=info ts=2020-11-18T21:37:24.819Z caller=main.go:579 msg="Stackdriver client started"
    
  7. Pastikan metrik cluster berhasil diekspor ke Cloud Monitoring. Buka Metrics Explorer di Konsol Google Cloud:

    Buka Metrics Explorer

  8. Klik Query editor, lalu salin perintah berikut, dan ganti ${your-project-id} dan ${your-cluster-name} dengan informasi cluster dan project Anda sendiri. Kemudian klik run query. Anda akan melihat 1.0.

    fetch k8s_container
    | metric 'kubernetes.io/anthos/up'
    | filter
        resource.project_id == '${your-project-id}'
        && (resource.cluster_name =='${your-cluster-name}')
    | group_by 1m, [value_up_mean: mean(value.up)]
    | every 1m
    

Pemantauan untuk cluster yang terpasang

Pembersihan

  1. Untuk menghapus semua materi yang dibuat dalam panduan ini:

    kubectl delete -f logging
    kubectl delete -f monitoring
    kubectl delete secret google-cloud-credentials -n kube-system
    kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/loadgen/loadgen.yaml
    kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/server/server.yaml
    rm -r credentials.json
    gcloud compute service-accounts delete anthos-lm-forwarder
    

Apa langkah selanjutnya?

Pelajari Cloud Logging:

Pelajari Cloud Monitoring: