רישום ביומן ומעקב באשכולות מצורפים

בדף הזה מוסבר איך לייצא יומנים ומדדים מאשכול מצורף אל 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.

דרישות מוקדמות

  1. Google Cloud פרויקט שהחיוב בו מופעל. במדריך התמחור שלנו מפורטות העלויות של Cloud Operations.

  2. אשכול אחד מצורף, שנרשם באמצעות המדריך הזה. מריצים את הפקודה הבאה כדי לוודא שהאשכול רשום.

    gcloud container fleet memberships list
    

    פלט לדוגמה:

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

  3. סביבה מקומית שממנה אפשר לגשת לאשכול ולהריץ פקודות kubectl. ראו את מדריך למתחילים של GKE לקבלת הוראות להתקנת kubectl דרך gcloud. מריצים את הפקודה הבאה כדי לוודא שאפשר להגיע לאשכול המצורף באמצעות kubectl.

    kubectl cluster-info
    

    פלט לדוגמה:

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

הגדרה

  1. משכפלים את המאגר לדוגמה ועוברים לספרייה של המדריך הזה.

    git clone https://github.com/GoogleCloudPlatform/anthos-samples
    cd anthos-samples/attached-logging-monitoring
    
  2. מגדירים את משתנה מזהה הפרויקט לפרויקט שבו רשמתם את האשכול.

    PROJECT_ID="your-project-id"
    
  3. יוצרים 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
    
  4. יוצרים ומורידים מפתח 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

  1. עוברים לספרייה logging/.

    cd logging/
    
  2. פותחים את 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
    

  3. ב-aggregator.yaml, בקטע volumeClaimTemplates/spec, מציינים את storageClassName PersistentVolumeClaim עבור האשכול: סיפקנו ערכי ברירת מחדל ל-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
    
  4. פורסים את המצבר והמעביר של היומנים לאשכול.

    kubectl apply -f aggregator.yaml
    kubectl apply -f forwarder.yaml
    
  5. מוודאים שהפודים הופעלו. אמורים להופיע 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
    

  6. מקבלים את יומני הצבירה ומוודאים שהיומנים נשלחים אל 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.
    

  7. פורסים אפליקציה לבדיקה באשכול. זהו שרת אינטרנט בסיסי של 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
    
  8. מוודאים שאפשר לראות את היומנים מהאשכול המצורף בלוח הבקרה של Cloud Logging. נכנסים לדף Logs Explorer במסוף Google Cloud :

    כניסה לדף Logs Explorer

  9. בכלי Logs Explorer, מעתיקים את שאילתת הדוגמה שבהמשך לשדה Query builder (בונה שאילתות), ומחליפים את ${your-cluster-name} בשם האשכול. לוחצים על Run query. יוצגו יומני אשכולות מהזמן האחרון בקטע Query results.

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

יומנים של אשכול מצורף

התקנת סוכן המעקב

  1. יוצאים מהספרייה logging/ ונכנסים לספרייה monitoring/.

    cd ../monitoring
    
  2. פותחים את 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]"
    
  3. ב-prometheus.yaml, בקטע volumeClaimTemplates/spec, מבטלים את ההערה של storageClassName שמתאים לספק שירותי הענן שלכם, כמו שמתואר במאמר בנושא התקנת סוכן Logging.

    # storageClassName: standard #Google Cloud
    # storageClassName: gp2 #AWS EKS
    # storageClassName: default #Azure AKS
    
  4. פורסים את StatefulSet של stackdriver-prometheus, שהוגדר עם exporter sidecar, באשכול.

    kubectl apply -f server-configmap.yaml
    kubectl apply -f sidecar-configmap.yaml
    kubectl apply -f prometheus.yaml
    
  5. מוודאים שפוד stackdriver-prometheus פועל.

    watch kubectl get pods -n kube-system | grep stackdriver-prometheus
    
    פלט:
    stackdriver-prometheus-k8s-0         2/2     Running   0          5h24m
    
  6. כדי לוודא שה-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"
    
  7. מוודאים שמדדי האשכול מיוצאים בהצלחה אל Cloud Monitoring. נכנסים ל-Metrics Explorer במסוף Google Cloud :

    לדף Metrics Explorer

  8. לוחצים על 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
    

מעקב אחר אשכול מצורף

הסרת המשאבים

  1. כדי להסיר את כל המשאבים שנוצרו במדריך הזה:

    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 Monitoring: