פתרון בעיות שקשורות ליומני Apigee שחסרים ב-Cloud Logging

אתם צופים במסמכי התיעוד של Apigee ושל Apigee Hybrid.
אין מאמרי עזרה מקבילים בנושא הזה ב- Apigee Edge.

תיאור הבעיה

תרחיש נפוץ הוא שליחת יומנים של Apigee API אל Cloud Logging. בדרך כלל, זה נעשה באמצעות מדיניות MessageLogging או מדיניות ServiceCallout. בשני המקרים, Apigee משתמש ב-Cloud Logging API כדי לכתוב את היומנים.

במקרים מסוימים, יכול להיות שלא תראו את יומני ה-API של Apigee ב-Cloud Logging.

הודעת השגיאה

לא מוצגת הודעת שגיאה.

סיבות אפשריות

מטרה תיאור הוראות לפתרון בעיות שרלוונטיות ל
Cloud Logging API לא מופעל מוודאים שהפעלתם את Cloud Logging API בפרויקט של הארגון שלכם ב-Apigee. Google Cloud ‫Apigee ו-Apigee Hybrid
‫IAM Service Account Credentials API לא מופעל מוודאים שהפעלתם את IAM Service Account Credentials API בפרויקט של ארגון Apigee. Google Cloud ‫Apigee ו-Apigee Hybrid
חשבון שירות של שרת proxy שהוגדר בצורה שגויה יכול להיות שחשבון השירות שבו נעשה שימוש בזמן הפריסה (Apigee) או בהגדרת זמן הריצה (Apigee Hybrid) נמחק או הוגדר בצורה שגויה. ‫Apigee ו-Apigee Hybrid
שם פרויקט שגוי בהגדרת המדיניות שם הפרויקט בהגדרת המדיניות לא זהה לשם שמשויך לארגון Apigee. ‫Apigee ו-Apigee Hybrid
חסרים תפקידים או הרשאות לחשבון השירות של זמן הריצה ב-Apigee hybrid, מוודאים שלחשבון השירות של זמן הריצה יש את התפקיד Service Account Token Creator. הפעולה הזו נדרשת כדי להשתמש באימות של Google. Apigee Hybrid
גודל רשומה ביומן חורג מהמגבלה המותרת של Cloud Logging ב-Cloud Logging יש מגבלה על גודל הרשומה של 256KB, ואי אפשר לשנות אותה. ‫Apigee ו-Apigee Hybrid
מיצוי המכסה של בקשות כתיבה לדקה ל-Cloud Logging API חשוב לוודא שלא חורגים מהמכסה של בקשות כתיבה לדקה עבור Cloud Logging API בפרויקט בענן של Google. ‫Apigee ו-Apigee Hybrid

הסיבה: Cloud Logging API לא מופעל

אבחון

מוודאים ש-Cloud Logging API מופעל. הוראות להצגת רשימת ממשקי ה-API והשירותים המופעלים במסוף Google Cloud מופיעות במאמר בנושא הצגת רשימת השירותים המופעלים.

רזולוציה

אם Cloud Logging API לא מופעל, צריך להפעיל אותו באמצעות השלבים שמפורטים במאמר הפעלת שירותים. יכול להיות שיחלפו כמה דקות עד שה-API יופעל.

אם לא הצלחתם לפתור את הבעיה שבה היומנים לא מוצגים ב-Cloud Logging כי Cloud Logging API לא הופעל, כדאי לעיין במאמר בנושא איסוף מידע לאבחון.

הגורם: לא הופעל IAM Service Account Credentials API

אבחון

מוודאים ש-IAM Service Account Credentials API מופעל. הוראות להצגת רשימת ממשקי ה-API והשירותים המופעלים במסוף Google Cloud מופיעות במאמר בנושא הצגת רשימת השירותים המופעלים.

רזולוציה

אם IAM Service Account Credentials API לא מופעל, מפעילים אותו באמצעות השלבים שמפורטים במאמר הפעלת שירותים. יכול להיות שיחלפו כמה דקות עד שה-API יופעל.

אם לא הצלחתם לפתור את הבעיה שבה לא רואים יומנים ב-Cloud Logging כי IAM Service Account Credentials API לא מופעל, כדאי לעיין במאמר מידע אבחוני שצריך לאסוף.

הסיבה: חשבון השירות של ה-proxy לא מוגדר בצורה נכונה

אבחון

Apigee

  1. מוצאים את השם של חשבון השירות.
    1. באמצעות ממשק המשתמש של Apigee:
      1. לוחצים על Develop > API Proxies (פיתוח > שרתי proxy של API) ואז לוחצים על שם של שרת proxy. לדוגמה, TurboBooks.
      2. השם של חשבון השירות מוצג בקטע פריסות.

    2. באמצעות Apigee API:

      מבצעים את הקריאה הבאה ל-Apigee API:

      curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/ORG_NAME/environments/ENV_NAME/apis/PROXY_NAME/revisions/REVISION_NUMBER/deployments"

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

      • ORG_NAME: שם הארגון. לדוגמה, apigee-example-org.
      • ENV_NAME: שם הסביבה. לדוגמה, myenv.
      • PROXY_NAME: שם השרת הפרוקסי. לדוגמה, TurboBooks.
      • REVISION_NUMBER: מספר הגרסה. לדוגמה, 4.

      לדוגמה:

      curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://apigee.googleapis.com/v1/organizations/apigee-example-org/environments/myenv/apis/TurboBooks/revisions/4/deployments"

      מוחזרת תשובה שדומה לדוגמה הבאה:

      {
        "environment": "myenv",
        "apiProxy": "TurboBooks",
        "revision": "4",
        "deployStartTime": "1687408163394",
        "state": "READY",
        "instances": [
          {
            "instance": "apiginstance",
            "deployedRevisions": [
              {
                "revision": "4",
                "percentage": 100
              }
          .
          .
          .
          .
        "serviceAccount": "projects/-/serviceAccounts/envsa-79@apigee-example-org.iam.gserviceaccount.com"
      }

      כאשר serviceAccount הוא חשבון השירות שמשויך ל-proxy ל-API.

  2. בודקים את הפרטים הבאים לגבי חשבון השירות של ה-proxy:
    1. חשבון השירות הזה צריך להיות באותו פרויקט Google Cloud שבו השתמשתם כדי ליצור את הארגון שלכם ב-Apigee. לדוגמה, apigee-example-org.
    2. למשתמש שמבצע את הפריסה של ה-proxy יש את ההרשאה iam.serviceAccounts.actAs בחשבון השירות הזה.
    3. לחשבון השירות של ה-proxy יש את ההרשאות הנדרשות כדי להפעיל את שירות Cloud Logging.

Apigee Hybrid

ב-Apigee hybrid, בנוסף לשלבים שמפורטים בApigee, פותחים את הקובץ overrides.yaml ומוודאים שצוין חשבון שירות בכל סביבה שנדרש בה אימות של Google. לדוגמה:

envs:
  - name: "ENVIRONMENT_NAME"
    serviceAccountPaths:
      runtime: "KEY_FILE_PATH"

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

  • ENVIRONMENT_NAME: שם הסביבה. לדוגמה: myenv.
  • KEY_FILE_PATH: הנתיב לקובץ המפתח של חשבון השירות של זמן הריצה. בדרך כלל יוצרים את חשבון השירות במהלך ההתקנה, כמו שמוסבר במאמר יצירת חשבונות שירות.

רזולוציה

  1. אם חשבון השירות לא נמצא באותו Google Cloud פרויקט שבו השתמשתם כדי ליצור את הארגון שלכם ב-Apigee, צריך ליצור חשבון שירות באותו Google Cloud פרויקט ולהשתמש בו. המידע הזה מופיע גם במאמר שימוש באימות של Google.
  2. אם למשתמש שמבצע את הפריסה של ה-proxy אין את ההרשאה iam.serviceAccounts.actAs בחשבון השירות הזה, אפשר לעיין במאמר בנושא הקצאת תפקיד יחיד.
  3. אם לחשבון השירות של ה-proxy אין את ההרשאות הנדרשות לקריאה לשירות Cloud Logging, כדאי לעיין במאמר בנושא הקצאת תפקיד יחיד.

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

הסיבה: שם הפרויקט בהגדרות המדיניות שגוי

אבחון

אם אתם משתמשים ב מדיניות MessageLogging כדי לשלוח יומנים ל-Cloud Logging:

  1. בממשק המשתמש של Apigee, לוחצים על Develop (פיתוח) > API Proxies (proxy ל-API) > API proxy name (שם ה-proxy ל-API) > Develop (פיתוח).
  2. בחלונית Code, מאתרים את הרכיב <CloudLogging>.
  3. מוודאים שהערך <LogName> הוא שם הפרויקט הנכון:
    <CloudLogging>
      <LogName>projects/PROJECT_ID/logs/LOG_ID</LogName>
    </CloudLogging>

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

    • PROJECT_ID: מזהה הפרויקט ב- Google Cloud . לדוגמה: apigee-example-org.
    • LOG_ID: מזהה היומן ב-Cloud Logging. לדוגמה: apigee-logs.

רזולוציה

אם הערך ברכיב <LogName> לא נכון, צריך לעדכן אותו לערך הנכון.

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

הסיבה: חסרים תפקידים או הרשאות לחשבון השירות של זמן הריצה

אבחון

מוודאים שסביבת זמן הריצה יכולה להתחזות לחשבון השירות של ה-proxy.

מריצים את הפקודה הבאה של gcloud כדי לוודא שלחשבון השירות של זמן הריצה יש את התפקיד iam.serviceAccountTokenCreator בחשבון השירות של ה-proxy:

gcloud iam service-accounts get-iam-policy PROXY_SA_NAME@PROJECT_ID.iam.gserviceaccount.com

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

  • PROXY_SA_NAME: השם של חשבון השירות של ה-proxy. לדוגמה, envsa-79.
  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud . לדוגמה: apigee-example-org.

מוחזרת תשובה שדומה לדוגמה הבאה:

- members:
  - serviceAccount:RUNTIME_SA_NAME@PROJECT_ID.iam.gserviceaccount.com
  role: roles/iam.serviceAccountTokenCreator

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

RUNTIME_SA_NAME: המזהה של חשבון השירות של זמן הריצה. לדוגמה, apigee-runtime.

לדוגמה:

gcloud iam service-accounts get-iam-policy envsa-79@apigee-example-org.iam.gserviceaccount.com
  bindings:
  - members:
    - user:222larabrown@gmail.com
    role: roles/iam.serviceAccountAdmin
  - members:
    - serviceAccount:apigee-runtime@apigee-example-org.iam.gserviceaccount.com
    role: roles/iam.serviceAccountTokenCreator
  - members:
    - user:222larabrown@gmail.com
    role: roles/iam.serviceAccountUser
  etag: BwX-shcrL3o=
  version: 1

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

רזולוציה

כדי להקצות לחשבון השירות של זמן הריצה את התפקיד iam.serviceAccountTokenCreator לחשבון השירות של שירות ה-proxy, מריצים את הפקודה הבאה של gcloud:

gcloud iam service-accounts add-iam-policy-binding \
PROXY_SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
--member=serviceAccount:RUNTIME_SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
--role=roles/iam.serviceAccountTokenCreator

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

  • PROXY_SA_NAME: השם של חשבון השירות של ה-proxy. לדוגמה, envsa-79.
  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud . לדוגמה, apigee-example-org.
  • RUNTIME_SA_NAME: המזהה של חשבון השירות של זמן הריצה. לדוגמה, apigee-runtime.

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

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

אבחון

אם לא רואים חלק מהיומנים ב-Cloud Logging אחרי שמוודאים שהסיבות האחרות שמתוארות במסמך הזה לא רלוונטיות, יכול להיות שהגודל של חלק מרישומי היומן שנשלחים מ-Apigee חורג מ-256KB, שהיא המגבלה הקשיחה לגודל של רישום ביומן ב-Cloud Logging. מידע נוסף זמין במאמר בנושא רישום מגבלות השימוש.

רזולוציה

זוהי מגבלה שלא ניתן להגדיר ב-Cloud Logging, והפתרון היחיד שזמין כרגע הוא לשמור על גודל רשומת היומן שנשלחת מ-Apigee מתחת ל-256KB. אם אתם רושמים מטען ייעודי (payload) שיש לו פוטנציאל לחרוג מהמגבלה הזו, אל תרשמו את המטען הייעודי הזה, או שתבינו שחלק מהעסקאות לא יירשמו כשהמגבלה תושג.

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

הסיבה: חריגה ממכסת בקשות הכתיבה לדקה ל-Cloud Logging API

אבחון

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

יכול להיות שהסיבה לאובדן ההודעות היא שמיציתם את מכסת ההודעות בפרויקט. ב-Cloud Logging API יש מגבלת קצב של 120,000 בקשות כתיבה לדקה. חריגה מהמכסה הזו עלולה לגרום להודעות לא להגיע ליעד.מידע נוסף זמין במאמר איך רואים ומנהלים את המכסות.

אפשר להגדיל את המכסות האלה בתוך Google Cloud console . הלקוח יכול לעשות זאת בעצמו על ידי ביצוע ההוראות לשינוי המכסות.

רזולוציה

כדי להגדיל את המכסה, פועלים לפי השלבים הבאים:

  1. בדף Quotas מסמנים את תיבת הסימון לצד Cloud Logging API ולוחצים על Edit quotas. אם מופיעה השגיאה Edit is not allowed for this quota, אפשר לפנות אל Google Cloud Customer Care כדי לבקש שינויים במכסה. שימו לב גם שצריך להפעיל את החיוב בפרויקט בענן ב-Google Cloud כדי לסמן את תיבות הסימון.
  2. בחלונית Quota changes, בוחרים את השירות כדי להרחיב את התצוגה, ואז ממלאים את השדות New limit ו-Request description. לוחצים על הבא.
  3. ממלאים את הטופס בחלונית פרטי יצירת קשר ולוחצים על שליחת בקשה.

מידע נוסף זמין במאמר מכסות ומגבלות .

צריך לאסוף נתוני אבחון

אם הבעיה נמשכת גם אחרי שמבצעים את ההוראות שלמעלה, צריך לאסוף את נתוני האבחון הבאים ואז לפנות אל שירות Customer Care של Google Cloud:

  • ארגון Apigee.
  • הסביבה וה-proxy ל-API שבהם נתקלתם בבעיה.
  • סשן ניפוי באגים שהורד (הוא יכלול את כל המידע שלמעלה).
  • השם הספציפי של כלל המדיניות ב-proxy ל-API ששולח יומנים אל Cloud Logging.
  • ב-Apigee Hybrid: הקובץ overrides.yaml.