Halaman ini menunjukkan cara mengekspor log dan metrik dari cluster terlampir ke Cloud Logging dan Cloud Monitoring.
Cara kerjanya
Google Cloud Observability adalah solusi kemampuan observasi bawaan untuk Google Cloud. Untuk mengekspor telemetri tingkat cluster dari cluster terlampir ke Google Cloud, Anda harus men-deploy agen ekspor open source berikut ke cluster Anda:
- Stackdriver Log Aggregator (stackdriver-log-aggregator-*). StatefulSet Fluentd yang mengirim log ke Cloud Logging API (sebelumnya Stackdriver Logging).
- Stackdriver Log Forwarder (stackdriver-log-forwarder-*). Daemonset Fluentbit yang meneruskan log dari setiap node Kubernetes ke Stackdriver Log Aggregator.
- Pengumpul Metrik Stackdriver (stackdriver-prometheus-k8s-*). StatefulSet Prometheus, yang dikonfigurasi dengan container sidecar ekspor stackdriver, untuk mengirim metrik Prometheus ke API Cloud Monitoring (sebelumnya Stackdriver Monitoring). Sidecar adalah container lain di dalam pod yang sama yang membaca metrik yang disimpan server Prometheus di disk dan meneruskannya ke Cloud Monitoring API.
Prasyarat
Project Google Cloud dengan penagihan diaktifkan. Lihat panduan harga kami untuk mempelajari biaya Cloud Operations.
Satu cluster terlampir, terdaftar menggunakan panduan ini. Jalankan perintah berikut untuk memverifikasi bahwa cluster Anda telah terdaftar.
gcloud container fleet memberships list
Contoh output:
NAME EXTERNAL_ID eks ae7b76b8-7922-42e9-89cd-e46bb8c4ffe4
Lingkungan lokal tempat Anda dapat mengakses cluster dan menjalankan perintah
kubectl
. Lihat panduan memulai GKE untuk mengetahui petunjuk cara menginstalkubectl
melalui gcloud. Jalankan perintah berikut untuk memverifikasi bahwa Anda dapat menjangkau cluster terlampir menggunakankubectl
.kubectl cluster-info
Contoh output:
Kubernetes master is running at https://[redacted].gr7.us-east-2.eks.amazonaws.com
Penyiapan
Clone repositori contoh dan buka direktori untuk panduan ini.
git clone https://github.com/GoogleCloudPlatform/anthos-samples cd anthos-samples/attached-logging-monitoring
Tetapkan variabel project ID ke project tempat Anda mendaftarkan cluster.
PROJECT_ID="your-project-id"
Buat 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 workload 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
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
Ubah ke direktori
logging/
.cd logging/
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
Di
aggregator.yaml
, di bagianvolumeClaimTemplates/spec
, tentukan PersistentVolumeClaimstorageClassName
untuk cluster Anda: kami telah memberikan nilai default untuk EKS dan AKS yang dapat Anda hapus komentarnya sesuai kebutuhan. Jika Anda menggunakan EKS, nilainya adalahgp2
. Untuk AKS, ini adalahdefault
.Jika Anda telah mengonfigurasi Class Penyimpanan Kubernetes kustom di AWS atau Azure, ingin menggunakan class penyimpanan non-default, atau menggunakan jenis cluster yang sesuai lainnya, Anda dapat menambahkan
storageClassName
Anda sendiri.storageClassName
yang sesuai didasarkan pada jenis PersistentVolume (PV) yang telah disediakan oleh administrator untuk cluster menggunakanStorageClass
. Anda dapat mengetahui selengkapnya tentang class penyimpanan dan class penyimpanan default untuk penyedia Kubernetes utama lainnya di dokumentasi Kubernetes.# storageClassName: standard #Google Cloud # storageClassName: gp2 #AWS EKS # storageClassName: default #Azure AKS
Deploy pengumpul dan penerus log ke cluster.
kubectl apply -f aggregator.yaml kubectl apply -f forwarder.yaml
Verifikasi bahwa pod telah dimulai. Anda akan melihat 2 pod agregator, dan satu pod penerusan per node pekerja Kubernetes. Misalnya, di cluster 4 node, Anda akan melihat 4 pod penerusan.
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
Dapatkan log penggabung dan verifikasi bahwa log sedang 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.
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
Pastikan Anda dapat melihat log dari cluster terlampir di dasbor Cloud Logging. Buka Logs Explorer di konsol: Google Cloud
Di Logs Explorer, salin contoh kueri di bawah ke kolom Query builder, ganti
${your-cluster-name}
dengan nama cluster Anda. Klik Run query. Anda akan melihat log cluster terbaru muncul di bagian Hasil kueri.resource.type="k8s_container" resource.labels.cluster_name="${your-cluster-name}"
Menginstal agen pemantauan
Keluar dari direktori
logging/
dan masuk ke direktorimonitoring/
.cd ../monitoring
Buka
prometheus.yaml
. Di bagianstackdriver-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]"
Dari prometheus.yaml, di bagian
volumeClaimTemplates/spec
, hapus komentarstorageClassName
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
Deploy StatefulSet stackdriver-prometheus, yang dikonfigurasi dengan sidecar exporter, ke cluster Anda.
kubectl apply -f server-configmap.yaml kubectl apply -f sidecar-configmap.yaml kubectl apply -f prometheus.yaml
Verifikasi bahwa pod
stackdriver-prometheus
sedang berjalan. Output:watch kubectl get pods -n kube-system | grep stackdriver-prometheus
stackdriver-prometheus-k8s-0 2/2 Running 0 5h24m
Dapatkan log container file bantuan Stackdriver Prometheus untuk memverifikasi bahwa pod telah dimulai.
Output:kubectl logs stackdriver-prometheus-k8s-0 -n kube-system stackdriver-prometheus-sidecar
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"
Pastikan metrik cluster berhasil diekspor ke Cloud Monitoring. Buka Metrics Explorer di Google Cloud konsol:
Klik Editor kueri, lalu salin perintah berikut, dengan mengganti
${your-project-id}
dan${your-cluster-name}
dengan informasi project dan cluster Anda sendiri. Kemudian, klik run query. Anda akan melihat1.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
Pembersihan
Untuk menghapus semua resource 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?
Mempelajari Cloud Logging:
- Ringkasan Cloud Logging
- Menggunakan Logs Explorer
- Membuat kueri untuk Cloud Logging
- Membuat metrik berbasis log