פתרון בעיות בשפת השאילתות של יומן הרישום

במסמך הזה מוסבר על בעיות נפוצות שאתם עשויים להיתקל בהן במהלך השימוש בשפת השאילתות של Logging.

בעיות בתחביר

אם נתקלתם בבעיות בביטויים של השאילתות, כדאי לבדוק את הדברים הבאים:

  • השאילתה שלך עומדת בכללי התחביר, עם סוגריים וגרשיים תואמים.

  • שמות השדות ברשומה ביומן מאויתים בצורה נכונה.

  • פעולות בוליאניות מופיעות באותיות רישיות (AND, ‏ OR, ‏ NOT).

  • חשוב לוודא שאתם משתמשים ב-NULL_VALUE כדי לייצג ערכי JSON null.

  • יש להוסיף סוגריים לביטויים בוליאניים כמגבלות גלובליות או כצד ימין של השוואות, לשם הבהרה. לדוגמה, שתי השאילתות הבאות נראות זהות, אבל הן לא:

    insertId = "ABC-1" OR "ABC-2"  -- ERROR!?
    insertId = ("ABC-1" OR "ABC-2")
    
  • טקסט שלא מוקף במירכאות לא יכול להכיל תווים מיוחדים. אם אתם לא בטוחים, הוסיפו מרכאות כפולות. לדוגמה, בהשוואה הבאה, ההשוואה הראשונה לא חוקית בגלל אופרטור המחרוזת המשובץ (:). ההשוואה חייבת להיכתב עם מרכאות:

    insertId = abc:def  -- ILLEGAL!
    insertId = "abc:def"
    
  • ב-Google Cloud CLI צריך להוסיף מרכאות כפולות לשאילתה. כדי להשתמש במירכאות לביטול המשמעות של תווים מיוחדים באמצעות הפקודה gcloud logging, צריך להוסיף גרשיים מסביב לשאילתה כולה:

    gcloud logging read 'resource.type=gce_instance AND jsonPayload.message="Stopped Unattended Upgrades Shutdown."'
    gcloud logging read 'timestamp>="2020-06-17T21:00:00Z"'
    

  • כשמסננים לפי שדה שמשויך לסוג ההודעה Any, המערכת עוברת אוטומטית על השדה value. לכן, אין לכלול את value בשאילתה.

    לדוגמה, השדה Status בהודעה AuditLog מכיל שדה details מסוג google.protobuf.Any. כדי לשלוח שאילתה לשדה details, משמיטים את השדה value כשמציינים את המסנן:

    • מומלץ

      protoPayload.status.details.conditionNotMet.userVisibleMessage =~ "Specified reservation.*"
      
    • לא מומלץ

      protoPayload.status.details.value.conditionNotMet.userVisibleMessage =~ "Specified reservation.*"