במסמך הזה מוסבר על בעיות נפוצות שאתם עשויים להיתקל בהן במהלך השימוש בשפת השאילתות של 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.*"