הגדרה של רישום ביומן במערכת מרובת דיירים

בדף הזה מוסבר איך להגדיר רישום ביומן של כמה דיירים באשכולות של Google Kubernetes Engine‏ (GKE).

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

בעזרת Google Cloud, אדמינים של אשכולות GKE יכולים ליצור מערכת שבה היומנים של האשכול נשארים בפרויקט ה-GKE הראשי, והיומנים של הדיירים מופצים לפרויקטים של הדיירים. כדי להגדיר את היומנים בדרך הזו, משתמשים בכלי להעברת יומנים. הכלי Log Router מאפשר לכם לשלוט באופן שבו היומנים זורמים ב Google Cloud פרויקט שלכם, ובאופן שבו היומנים מנותבים ליעדים נתמכים.

כדי ליצור יומנים ספציפיים לדייר, אדמין האשכול יוצר sink כדי לנתב רשומות ביומן לפרויקט של כל דייר. בכל פרויקט דייר, כל צוות יכול לקבוע איך היומנים מאוחסנים ואיך משתמשים בהם, למשל לעקוב אחרי היומנים באמצעות הגדרת מדדים מבוססי-יומנים והתראות מבוססות-יומנים.

מומלץ ש_Default sinks בפרויקטים ראשיים של GKE יכללו מסנן החרגה. מסנן ההחרגה מונע את ההטמעה של יומני הדייר גם בפרויקט ה-GKE הראשי וגם בפרויקט הדייר.

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

הגדרה של רישום ביומן במערכת מרובת דיירים

אפשר להגדיר רישום ביומן של כמה דיירים באמצעות Google Cloud CLI אוGoogle Cloud המסוף.

gcloud

כדי להגדיר רישום ביומן של כמה דיירים באשכולות GKE, מבצעים את השלבים הבאים:

  1. מגדירים את משתני הסביבה הבאים:

    export TENANT_NAMESPACE="TENANT_NAMESPACE"
    export MAIN_PROJECT="MAIN_PROJECT_ID"
    export TENANT_PROJECT="TENANT_PROJECT_ID"
    

    מחליפים את מה שכתוב בשדות הבאים:

    • TENANT_NAMESPACE: השם של מרחב השמות של פרויקט הדייר
    • MAIN_PROJECT_ID: מזהה הפרויקט הראשי
    • TENANT_PROJECT_ID: מזהה הפרויקט של פרויקט הדייר
  2. יוצרים מרחב שמות באשכול מרובה הדיירים:

    kubectl create namespace $TENANT_NAMESPACE
    
  3. יוצרים sink ביומן בפרויקט GKE הראשי:

    gcloud logging sinks create gke-$TENANT_NAMESPACE-sink \
    logging.googleapis.com/projects/$TENANT_PROJECT \
        --project=$MAIN_PROJECT \
        --log-filter=resource.labels.namespace_name="$TENANT_NAMESPACE" \
        --description="Log sink to $TENANT_PROJECT for $TENANT_NAMESPACE namespace"
    

    הפקודה הזו יוצרת sink ביומן ששולח את כל היומנים שקשורים למרחב השמות $TENANT_NAMESPACE לפרויקט דייר (tenant).

    יכול להיות שתצטרכו להשתמש ב---log-filter מגביל יותר. לדוגמה, אם לאשכול ולדייר יש את אותו מרחב שמות, צריך להוסיף מסנן אשכול.

    מידע נוסף על השדות האלה זמין במאמרי העזרה של gcloud logging sinks create API.

  4. מאחזרים את זהות בעל הרשאת הכתיבה מה-sink בפרויקט הראשי ומקצים אותה למשתנה סביבה.

    export SERVICE_ACCOUNT=$(gcloud logging sinks describe gke-$TENANT_NAMESPACE-sink \
        --project=$MAIN_PROJECT \
        --format='value(writerIdentity)')
    
  5. מקצים לחשבון השירות שמשמש את יעד ההעברה את התפקיד כתיבה ביומן (logging.bucketWriter). הפקודה הבאה מעניקה לפרויקט הראשי הרשאות לכתוב יומנים לפרויקט הדייר:

     gcloud projects add-iam-policy-binding $TENANT_PROJECT \
         --member=$SERVICE_ACCOUNT --role='roles/logging.logWriter' \
         --condition="expression=resource.name.endsWith(\"projects/$TENANT_PROJECT\"),title=Log writer for $TENANT_NAMESPACE,description=Grants Logs Writer role to service account $SERVICE_ACCOUNT used by gke-$TENANT_NAMESPACE-sink"
    

    מידע נוסף על השדות האלה זמין במאמרי העזרה של gcloud projects add-iam-policy-binding API.

  6. אופציונלי: יוצרים מסנן החרגה ל-sink שמנתב יומנים ל-bucket‏ _Default של הפרויקט הראשי. אם לא יוצרים מסנן החרגה בדלי _Default, היומנים שמועברים יופיעו גם בדלי _Default של הפרויקט הראשי וגם בקטגוריה ביומן של הדייר. כדי ליצור מסנן החרגה:

    gcloud logging sinks update _Default --project=$MAIN_PROJECT \
        --add-exclusion="name=gke-$TENANT_NAMESPACE-default-exclusion,description=\"Exclusion filter on the _Default bucket for $TENANT_NAMESPACE\",filter=resource.labels.namespace_name=\"$TENANT_NAMESPACE\""
    

    מידע נוסף על השדות האלה זמין במאמרי העזרה של gcloud logging sinks update API.

המסוף

כדי להטמיע רישום ביומן של כמה דיירים ב-GKE, מבצעים את השלבים הבאים:

  1. יוצרים את sink ביומן בפרויקט הראשי:

    1. משתמשים בכלי לבחירת פרויקטים במסוף Google Cloud כדי לבחור את פרויקט GKE הראשי.
    2. במסוף Google Cloud , עוברים לדף Log Router:

      כניסה אל Log Router

      אם משתמשים בסרגל החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא Logging.

    3. בדף Log Router, לוחצים על Create sink.
    4. מזינים שם ותיאור ל-Sink ולוחצים על הבא.
    5. בתפריט Select sink service בוחרים באפשרות Other project.
    6. בשדה Sink destination (יעד להעברה), מוסיפים את היעד הבא:

      logging.googleapis.com/projects/TENANT_PROJECT_ID
      

      מחליפים את TENANT_PROJECT_ID במזהה הפרויקט של פרויקט הדייר.

    7. לוחצים על הבא.

    8. בקטע Build inclusion filter מוסיפים את המסנן הבא:

      resource.labels.namespace_name="TENANT_NAMESPACE"
      

      מחליפים את TENANT_NAMESPACE בשם של מרחב השמות של פרויקט הדייר.

      יכול להיות שתרצו מסנן הכללה מגביל יותר. לדוגמה, אם לאשכול ולדייר יש את אותו מרחב שמות, כדאי להוסיף פסקה שתכלול רק רשומות ביומן של אשכול ספציפי.

    9. לוחצים על Create sink (יצירת יעד). היעד החדש יופיע ברשימה Log Router Sinks.

  2. מעתיקים את זהות הכתיבה של יעד הנתונים ללוח:

    1. בדף Log Router (הכלי להעברת יומנים), מאתרים את sink ביומן.
    2. במאגר הזה, לוחצים על More (עוד) ואז על View sink details (הצגת פרטים של מאגר).
    3. בחלונית Sink details, מאתרים את השדה Writer identity ומעתיקים את הערך ללוח. השמטת serviceAccount: מהערך המועתק.
    Google Cloud
  3. בפרויקט הדייר, מעניקים לחשבון השירות שמשמש את יעד ה-sink של הפרויקט הראשי את התפקיד Logs Writer (roles/logging.logWriter). הפרויקט הראשי צריך את ההרשאה הזו כדי לכתוב יומנים לפרויקט הדייר.

    1. נכנסים לדף IAM במסוף Google Cloud :

      כניסה לדף IAM

      אם משתמשים בסרגל החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא IAM & Admin.

    2. לוחצים על הענקת גישה.
    3. בשדה New principals, מוסיפים את חשבון השירות של יעד הנתונים.
    4. בתפריט הנפתח Select a role, בוחרים באפשרות Logging ואז בוחרים באפשרות Logs Writer.
    5. לוחצים על Save.
  4. אופציונלי: יוצרים מסנן החרגה בקטגוריית _Default של פרויקט הראשי כדי למנוע כתיבה של יומנים שמועברים לפרויקט דייר לקטגוריית היומנים _Default בפרויקט הראשי:

    1. במסוף Google Cloud , עוברים לדף Log Router:

      כניסה אל Log Router

      אם משתמשים בסרגל החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא Logging.

    2. לצד מאגר _Default, לוחצים על More ואז על Edit sink.
    3. בקטע Choose logs to filter out of sink, לוחצים על Add exclusion.
    4. מוסיפים שם מסנן.
    5. בתיבה Build an exclusion filter (יצירת מסנן החרגה), מוסיפים את הפרטים הבאים:

      resource.labels.namespace_name="TENANT_NAMESPACE"
      
    6. לוחצים על עדכון יעד.

אימות יומנים של דיירים

אחרי שמתחילים להשתמש בעומסי עבודה שמשתמשים ב-TENANT_NAMESPACE, אפשר לוודא שפרויקט הדייר מקבל יומנים ספציפיים לדייר:

  1. בוחרים את הפרויקט של הדייר (tenant) באמצעות בורר הפרויקטים במסוף Google Cloud .
  2. במסוף Google Cloud , נכנסים לדף Logs Explorer:

    כניסה אל Logs Explorer

    אם משתמשים בסרגל החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא Logging.

  3. בשדה עורך השאילתות, מריצים את השאילתה הבאה:

    resource.labels.namespace_name="TENANT_NAMESPACE"
    

    בחלונית Query results, אמורים להופיע יומנים ספציפיים לדייר שהועברו מהפרויקט הראשי.

שימוש ביומנים של הדייר

בפרויקטים של הדיירים, כל צוות יכול לשלוט באופן הניתוב, האחסון והניתוח של היומנים. אחרי שהיומנים מנותבים לפרויקטים של הדייר, הצוותים של האפליקציות השונות יכולים לבחור לנתב את היומנים ליעדים נתמכים כמו מאגרי יומנים, או ליעדים של צד שלישי באמצעות Pub/Sub. מידע על ניתוב רשומות ביומן מופיע במאמר ניתוב יומנים ליעדים נתמכים.

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

הסרת המשאבים

כדי להסיר את האובייקטים שיצרתם לרישום ביומן של כמה דיירים, אתם יכולים להשתמש ב-gcloud או במסוף Google Cloud .

gcloud

כדי להסיר את האובייקטים שיצרתם לרישום ביומן של כמה דיירים, מבצעים את השלבים הבאים:

  1. מגדירים משתנים כדי לפשט את הפקודות הבאות:

    export TENANT_NAMESPACE="TENANT_NAMESPACE"
    export MAIN_PROJECT="MAIN_PROJECT_ID"
    export TENANT_PROJECT="TENANT_PROJECT_ID"
    

    מחליפים את מה שכתוב בשדות הבאים:

    • TENANT_NAMESPACE: השם של מרחב השמות של פרויקט הדייר
    • MAIN-PROJECT-ID: מזהה הפרויקט הראשי
    • TENANT-PROJECT-ID: מזהה הפרויקט של פרויקט הדייר
  2. מסירים את התפקיד Logs Writer (roles/logging.logWriter) מחשבון השירות בפרויקט הדייר:

    export SERVICE_ACCOUNT=$(gcloud logging sinks describe gke-$TENANT_NAMESPACE-sink \
        --project=$MAIN_PROJECT | \
        --format='value(writerIdentity)'
    
    gcloud projects remove-iam-policy-binding $TENANT_PROJECT \
        --member=$SERVICE_ACCOUNT \
        --role='roles/logging.logWriter' \
        --all
    
  3. מוחקים את sink ביומן:

    gcloud logging sinks delete gke-$TENANT_NAMESPACE-sink \
        --project=$MAIN_PROJECT
    
  4. מוחקים את מרחב השמות:

    kubectl delete namespace $TENANT_NAMESPACE
    

המסוף

  1. בפרויקט הדייר, מסירים את התפקיד Logs Writer (roles/logging.logWriter) מחשבון השירות:

    1. נכנסים לדף IAM במסוף Google Cloud :

      כניסה לדף IAM

      אם משתמשים בסרגל החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא IAM & Admin.

    2. בחשבון השירות שרוצים למחוק, לוחצים על Edit principal.
    3. בחלונית גישת עריכה לוחצים על Delete role ליד התפקיד Logs Writer ואז על Save.
  2. בפרויקט הראשי, מוחקים את sink ביומן:

    1. משתמשים בכלי לבחירת פרויקטים במסוף Google Cloud כדי לבחור את פרויקט GKE של הדייר.
    2. במסוף Google Cloud , עוברים לדף Log Router:

      כניסה אל Log Router

      אם משתמשים בסרגל החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא Logging.

    3. בכיור שרוצים למחוק, לוחצים על עוד.
    4. בוחרים באפשרות מחיקת יעד.
    5. בחלונית האישור, לוחצים על מחיקה.

מגבלות

יש כמה מגבלות לרישום ביומן של כמה דיירים:

  • המכסה של מספר יעד העברת היומנים לכל פרויקט היא 200. אם אתם צריכים יותר מ-200 דיירים, אתם יכולים לפתוח בקשת תמיכה כדי לבקש הגדלה של המכסה.
  • יש הגבלה של 50 מסנני החרגה לכל קטגוריה ביומן. אם אתם מתכוונים להשתמש ביותר מ-50 דיירים, צריך לשנות את הגישה של מסנן ההחרגה לדלי _Default. אפשר גם לנסות את הפעולות הבאות:

    • יוצרים מסנן החרגה יחיד שמחריג את כל מרחבי השמות שאינם מערכת או שאינם ברירת מחדל באמצעות הפקודה הבאה:

      gcloud logging sinks update _Default \
      --project=$MAIN_PROJECT \
      --add-exclusion="name=gke-all-tenant-default-exclusion,description=\"Exclusion filter on the _Default bucket for all tenants\",filter=resource.labels.namespace_name !~ \"kube\" AND resource.labels.namespace_name !~ \"system\ AND resource.labels.namespace_name != \"Default\""
      
    • שכפול יומנים בין פרויקט הדייר לבין הפרויקט הראשי על ידי אי יצירת מסנן ההחרגה.

המאמרים הבאים