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
Project Google Cloud dengan penagihan diaktifkan. Lihat panduan harga kami untuk mengetahui biaya Cloud Operations.
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
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 yang terpasang menggunakankubectl
.kubectl cluster-info
Contoh output:
Kubernetes master is running at https://[redacted].gr7.us-east-2.eks.amazonaws.com
Penyiapan
Clone repositori sampel 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"
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
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
, tentukanstorageClassName
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 adalahgp2
. Untuk AKS, nilainya adalahdefault
.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 menggunakanStorageClass
. 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
Deploy agregator log dan forwarder ke cluster.
kubectl apply -f aggregator.yaml kubectl apply -f forwarder.yaml
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
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.
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 yang terpasang di dasbor Cloud Logging. Buka Logs Explorer di konsol Google Cloud:
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}"
Menginstal agen pemantauan
Keluar dari direktori
logging/
lalu 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 tanda komentar padastorageClassName
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 file bantuan pengekspor, ke cluster Anda.
kubectl apply -f server-configmap.yaml kubectl apply -f sidecar-configmap.yaml kubectl apply -f prometheus.yaml
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
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"
Pastikan metrik cluster berhasil diekspor ke Cloud Monitoring. Buka Metrics Explorer di Konsol Google Cloud:
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 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 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:
- Ringkasan Cloud Logging
- Menggunakan Logs Explorer
- Membuat kueri untuk Cloud Logging
- Membuat metrik berbasis log