בדף הזה מוסבר איך לייצא יומנים ומדדים מאשכול מצורף אל Cloud Logging ו-Cloud Monitoring.
איך זה עובד
Google Cloud Observability הוא פתרון הניראות המובנה ל-Google Cloud. כדי לייצא טלמטריה ברמת האשכול מאשכול מצורף אל Google Cloud, צריך לפרוס את סוכני הייצוא הבאים של קוד פתוח באשכול:
- Stackdriver Log Aggregator (stackdriver-log-aggregator-*). Fluentd StatefulSet ששולח יומנים אל Cloud Logging API (לשעבר Stackdriver Logging).
- Stackdriver Log Forwarder (stackdriver-log-forwarder-*). קבוצת דמונים של Fluentbit שמעבירה יומנים מכל צומת Kubernetes אל Stackdriver Log Aggregator.
- Stackdriver Metrics Collector (stackdriver-prometheus-k8s-*). Prometheus StatefulSet, שמוגדר עם קובץ sidecar של stackdriver export, כדי לשלוח מדדי Prometheus אל Cloud Monitoring API (לשעבר Stackdriver Monitoring). ה-sidecar הוא קונטיינר נוסף באותו Pod שקורא את המדדים ששרת Prometheus מאחסן בדיסק ומעביר אותם אל Cloud Monitoring API.
דרישות מוקדמות
Google Cloud פרויקט שהחיוב בו מופעל. במדריך התמחור שלנו מפורטות העלויות של Cloud Operations.
אשכול אחד מצורף, שנרשם באמצעות המדריך הזה. מריצים את הפקודה הבאה כדי לוודא שהאשכול רשום.
gcloud container fleet memberships list
פלט לדוגמה:
NAME EXTERNAL_ID eks ae7b76b8-7922-42e9-89cd-e46bb8c4ffe4
סביבה מקומית שממנה אפשר לגשת לאשכול ולהריץ פקודות
kubectl. ראו את מדריך למתחילים של GKE לקבלת הוראות להתקנתkubectlדרך gcloud. מריצים את הפקודה הבאה כדי לוודא שאפשר להגיע לאשכול המצורף באמצעותkubectl.kubectl cluster-info
פלט לדוגמה:
Kubernetes master is running at https://[redacted].gr7.us-east-2.eks.amazonaws.com
הגדרה
משכפלים את המאגר לדוגמה ועוברים לספרייה של המדריך הזה.
git clone https://github.com/GoogleCloudPlatform/anthos-samples cd anthos-samples/attached-logging-monitoring
מגדירים את משתנה מזהה הפרויקט לפרויקט שבו רשמתם את האשכול.
PROJECT_ID="your-project-id"
יוצרים Google Cloud חשבון שירות עם הרשאות לכתיבת מדדים ויומנים לממשקי Cloud Monitoring ו-Cloud Logging API. בקטע הבא נסביר איך מוסיפים את המפתח של חשבון השירות לעומסי העבודה שנפרסו.
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יוצרים ומורידים מפתח JSON לחשבון השירות שיצרתם, ואז יוצרים סוד של Kubernetes באשכול באמצעות המפתח הזה.
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
התקנת סוכן ה-Logging
עוברים לספרייה
logging/.cd logging/
פותחים את
aggregator.yaml. בתחתית הקובץ, מגדירים את המשתנים הבאים לערך שמתאים לפרויקט ולצביר:project_id [PROJECT_ID] k8s_cluster_name [CLUSTER_NAME] k8s_cluster_location [CLUSTER_LOCATION]
כדי למצוא את המיקום של האשכול, מריצים את הפקודה הבאה עם שם החברות של האשכול המצורף, ומקבלים את המיקום שמופיע ב-
/locations/<location>.gcloud container fleet memberships describe eks | grep name
פלט:
name: projects/my-project/locations/global/memberships/eks
ב-
aggregator.yaml, בקטעvolumeClaimTemplates/spec, מציינים אתstorageClassNamePersistentVolumeClaim עבור האשכול: סיפקנו ערכי ברירת מחדל ל-EKS ול-AKS, ואפשר לבטל את הסימון כהערה שלהם לפי הצורך. אם משתמשים ב-EKS, זהוgp2. ב-AKS, זהוdefault.אם הגדרתם סוג אחסון מותאם אישית של Kubernetes ב-AWS או ב-Azure, אם אתם רוצים להשתמש בסוג אחסון שאינו ברירת המחדל או אם אתם משתמשים בסוג אשכול אחר שתואם, אתם יכולים להוסיף
storageClassNameמשלכם. הערך המתאים שלstorageClassNameמבוסס על סוג ה-PersistentVolume (PV) שהוקצה לאשכול על ידי אדמין באמצעותStorageClass. מידע נוסף על סוגי אחסון ועל סוגי אחסון שמוגדרים כברירת מחדל אצל ספקי Kubernetes גדולים אחרים זמין במסמכי Kubernetes.# storageClassName: standard #Google Cloud # storageClassName: gp2 #AWS EKS # storageClassName: default #Azure AKS
פורסים את המצבר והמעביר של היומנים לאשכול.
kubectl apply -f aggregator.yaml kubectl apply -f forwarder.yaml
מוודאים שהפודים הופעלו. אמורים להופיע 2 קבוצות של Pod צובר וקבוצה אחת של Pod מעביר לכל צומת worker ב-Kubernetes. לדוגמה, באשכול עם 4 צמתים, אמורים להיות 4 פודים של מעבירי נתונים.
kubectl get pods -n kube-system | grep stackdriver-log
פלט:
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
מקבלים את יומני הצבירה ומוודאים שהיומנים נשלחים אל Google Cloud.
kubectl logs stackdriver-log-aggregator-0 -n kube-system
פלט:
2020-10-12 14:35:40 +0000 [info]: #3 [google_cloud] Successfully sent gRPC to Stackdriver Logging API.
פורסים אפליקציה לבדיקה באשכול. זהו שרת אינטרנט בסיסי של HTTP עם מחולל עומסים.
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
מוודאים שאפשר לראות את היומנים מהאשכול המצורף בלוח הבקרה של Cloud Logging. נכנסים לדף Logs Explorer במסוף Google Cloud :
בכלי Logs Explorer, מעתיקים את שאילתת הדוגמה שבהמשך לשדה Query builder (בונה שאילתות), ומחליפים את
${your-cluster-name}בשם האשכול. לוחצים על Run query. יוצגו יומני אשכולות מהזמן האחרון בקטע Query results.resource.type="k8s_container" resource.labels.cluster_name="${your-cluster-name}"

התקנת סוכן המעקב
יוצאים מהספרייה
logging/ונכנסים לספרייהmonitoring/.cd ../monitoring
פותחים את
prometheus.yaml. בקטעstackdriver-prometheus-sidecar/args, מגדירים את המשתנים הבאים בהתאם לסביבה שלכם."--stackdriver.project-id=[PROJECT_ID]" "--stackdriver.kubernetes.location=[CLUSTER_LOCATION]" "--stackdriver.generic.location=[CLUSTER_LOCATION]" "--stackdriver.kubernetes.cluster-name=[CLUSTER_NAME]"
ב-prometheus.yaml, בקטע
volumeClaimTemplates/spec, מבטלים את ההערה שלstorageClassNameשמתאים לספק שירותי הענן שלכם, כמו שמתואר במאמר בנושא התקנת סוכן Logging.# storageClassName: standard #Google Cloud # storageClassName: gp2 #AWS EKS # storageClassName: default #Azure AKS
פורסים את StatefulSet של stackdriver-prometheus, שהוגדר עם exporter sidecar, באשכול.
kubectl apply -f server-configmap.yaml kubectl apply -f sidecar-configmap.yaml kubectl apply -f prometheus.yaml
מוודאים שפוד
stackdriver-prometheusפועל. פלט:watch kubectl get pods -n kube-system | grep stackdriver-prometheus
stackdriver-prometheus-k8s-0 2/2 Running 0 5h24m
כדי לוודא שה-Pod הופעל, מקבלים את היומנים של קונטיינר ה-sidecar של Stackdriver Prometheus.
פלט: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"
מוודאים שמדדי האשכול מיוצאים בהצלחה אל Cloud Monitoring. נכנסים ל-Metrics Explorer במסוף Google Cloud :
לוחצים על Query editor (עורך השאילתות), מעתיקים את הפקודה הבאה ומחליפים את
${your-project-id}ואת${your-cluster-name}בפרטי הפרויקט והאשכול שלכם. לוחצים על run query. אמור להופיע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

הסרת המשאבים
כדי להסיר את כל המשאבים שנוצרו במדריך הזה:
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
מה השלב הבא?
מידע נוסף על Cloud Logging:
- סקירה כללית על Cloud Logging
- שימוש בכלי Logs Explorer
- יצירת שאילתות ל-Cloud Logging
- יצירת מדדים מבוססי-יומנים