שאילתות SQL לדוגמה

במסמך הזה מופיעות דוגמאות לשאילתות על רשומות ביומן שמאוחסנות במאגרי יומנים ששודרגו לשימוש ב-Observability Analytics. אפשר להריץ שאילתות SQL בדליים האלה מהדף Observability Analytics במסוף Google Cloud . דוגמאות נוספות זמינות במאגרי GitHub‏ logging-analytics-samples ו-security-analytics.

במסמך הזה לא מתואר SQL או איך לנתב ולאחסן רשומות ביומן. בקטע מה השלב הבא יש מידע על הנושאים האלה.

הדוגמאות בדף הזה מתייחסות לשאילתות של צפיות ביומן. כדי לשלוח שאילתה לתצוגת נתונים של Analytics, משתמשים בפורמט הנתיב הבא: `analytics_view.PROJECT_ID.LOCATION.ANALYTICS_VIEW_ID`. בביטוי הקודם, PROJECT_ID הוא מזהה הפרויקט, ו-LOCATION ו-ANALYTICS_VIEW_ID הם המיקום והשם של תצוגת הניתוח.

תמיכה בשפת SQL

השאילתות שמשמשות בדף Observability Analytics תומכות בפונקציות של GoogleSQL, עם כמה חריגים.

הפקודות הבאות של SQL לא נתמכות בשאילתות SQL שמונפקות באמצעות הדף Observability Analytics:

  • פקודות DDL ו-DML
  • פונקציות בהגדרת המשתמש ב-JavaScript
  • פונקציות של BigQuery ML
  • משתני SQL

התמיכה בפריטים הבאים זמינה רק כשמריצים שאילתות על מערך נתונים מקושר של BigQuery באמצעות הדפים BigQuery Studio ו-Looker Studio, או באמצעות כלי שורת הפקודה של BigQuery:

  • פונקציות בהגדרת המשתמש ב-JavaScript
  • פונקציות של BigQuery ML
  • משתני SQL

שיטות מומלצות

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

אם כוללים שדה timestamp בסעיף WHERE, ההגדרה של בורר טווח הזמן לא משמשת. בדוגמה הבאה אפשר לראות איך מסננים לפי חותמת זמן:

-- Matches log entries whose timestamp is within the most recent 1 hour.
WHERE timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR)

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

לפני שמתחילים

בקטע הזה מתוארים השלבים שצריך להשלים כדי להשתמש ב-Observability Analytics.

הגדרת קטגוריות ביומן

מוודאים ששדרגתם את מאגרי היומנים כדי להשתמש ב-Observability Analytics:

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

    כניסה אל Logs Storage

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

  2. לכל קטגוריה ביומן שיש לה תצוגת יומנים שרוצים לשלוח אליה שאילתה, מוודאים שבעמודה Observability Analytics available מופיע הערך Open. אם הכפתור שדרוג מוצג, לוחצים עליו וממלאים את תיבת הדו-שיח.

הגדרת תפקידים והרשאות ב-IAM

בקטע הזה מתוארים התפקידים או ההרשאות של IAM שנדרשים לשימוש ב-Observability Analytics:

  • כדי לקבל את ההרשאות שדרושות לשימוש ב-Observability Analytics ולשאילתות של תצוגות יומן, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:

    כדי להגביל חשבון משתמש לתצוגת יומן ספציפית, אפשר להוסיף תנאי IAM להקצאת התפקיד Logs View Accessor שבוצעה ברמת הפרויקט, או להוסיף קישור IAM לקובץ המדיניות של תצוגת היומן. מידע נוסף זמין במאמר בנושא שליטה בגישה לתצוגת יומן.

    אלה אותן הרשאות שנדרשות כדי לצפות ברשומות ביומן בדף Logs Explorer. מידע על תפקידים נוספים שנדרשים כדי לשלוח שאילתות לתצוגות של קטגוריות שהוגדרו על ידי המשתמש או כדי לשלוח שאילתות לתצוגה _AllLogs של קטגוריה ביומן _Default זמין במאמר בנושא תפקידים ב-Cloud Logging.

  • כדי לקבל את ההרשאות שנדרשות לשליחת שאילתות לתצוגות ניתוח נתונים, צריך לבקש מהאדמין להקצות לכם את תפקיד ה-IAM‏ Observability Analytics User (roles/observability.analyticsUser) בפרויקט.

איך משתמשים בשאילתות שבדף הזה

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

    עוברים אל Observability Analytics

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

  2. בחלונית Query, לוחצים על  SQL, ואז מעתיקים ומדביקים שאילתה בחלונית של שאילתת ה-SQL.

    לפני שמעתיקים שאילתה, מחליפים את השדות הבאים בסעיף FROM

    • PROJECT_ID: מזהה הפרויקט.
    • LOCATION: המיקום של תצוגת היומן או תצוגת ניתוח הנתונים.
    • BUCKET_ID: השם או המזהה של קטגוריה ביומן.
    • LOG_VIEW_ID: המזהה של תצוגת היומן, שמוגבל ל-100 תווים ויכול לכלול רק אותיות, ספרות, קווים תחתונים ומקפים.

    הדוגמה הבאה מציגה את הפורמט של פסוקית FROM עבור תצוגת יומן:

    FROM `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`

    דוגמאות היומנים בדף הזה הן שאילתות של תצוגת יומן. כדי לשלוח שאילתה לתצוגת Analytics, צריך להשתמש בפורמט הנתיב הבא: `analytics_view.PROJECT_ID.LOCATION.ANALYTICS_VIEW_ID`. בביטוי הקודם, PROJECT_ID הוא מזהה הפרויקט, ו-LOCATION ו-ANALYTICS_VIEW_ID הם המיקום והשם של התצוגה המפורטת ב-Analytics.

כדי להשתמש בשאילתות שמוצגות במסמך הזה בדף BigQuery Studio או כדי להשתמש בכלי שורת הפקודה bq, צריך לערוך את סעיף FROM ולהזין את הנתיב למערך הנתונים המקושר של BigQuery. לדוגמה, כדי לשלוח שאילתה לתצוגה _AllLogs במערך הנתונים המקושר ב-BigQuery שנקרא mydataset, שנמצא בפרויקט myproject, הנתיב הוא myproject.mydataset._AllLogs.

תרחישים נפוצים לדוגמה

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

הצגת רשומות ביומן בקטגוריית ברירת המחדל של היומן

כדי להריץ שאילתה על קטגוריית _Default, מריצים את השאילתה הבאה:

SELECT
  timestamp, severity, resource.type, log_name, text_payload, proto_payload, json_payload
FROM
  `PROJECT_ID.LOCATION._Default._AllLogs`
-- Limit to 1000 entries
LIMIT 1000

חילוץ ערך שדה באמצעות ביטוי רגולרי

כדי לחלץ ערך ממחרוזת באמצעות ביטוי רגולרי, משתמשים בפונקציה REGEXP_EXTRACT:

SELECT
  -- Display the timestamp, and the part of the name that begins with test.
  timestamp, REGEXP_EXTRACT(JSON_VALUE(json_payload.jobName), r".*(test.*)$") AS name,
FROM
  `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
WHERE
  -- Get the value of jobName, which is a subfield in a JSON structure.
  JSON_VALUE(json_payload.jobName) IS NOT NULL
ORDER BY timestamp DESC
LIMIT 20

מידע נוסף זמין במאמרי העזרה בנושא REGEXP_EXTRACT.

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

סינון רשומות ביומן

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

סינון רשומות ביומן לפי סוג מטען ייעודי (payload)

רשומות ביומן יכולות להכיל מטען ייעודי (Payload) מאחד משלושת הסוגים הבאים. כדי לסנן רשומות ביומן לפי סוג המטען הייעודי (payload), משתמשים באחד מהסעיפים הבאים:

  • מטענים ייעודיים (payloads) של טקסט

    -- Matches log entries that have a text payload.
    WHERE text_payload IS NOT NULL
    
  • מטענים ייעודיים (payloads) של JSON

    -- Matches log entries that have a JSON payload.
    WHERE json_payload IS NOT NULL
    
  • מטענים ייעודיים (payloads) של פרוטו

    -- Matches log entries that have a proto payload.
    -- Because proto_payload has a data type of RECORD, this statement tests
    -- whether a mandatory subfield exits.
    WHERE proto_payload.type IS NOT NULL
    

בתוצאות השאילתה, השדות json_payload ו-proto_payload מוצגים בפורמט JSON, שאפשר לנווט בו.

סינון נתוני היומן לפי חותמת זמן

כדי לסנן את הרשומות ביומן לפי חותמת הזמן שלהן, מומלץ להשתמש בבורר טווח הזמן. אבל אפשר גם לציין את timestamp בפסוקית WHERE:

-- Matches log entries whose timestamp is within the most recent hour
WHERE timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR)

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

סינון לפי משאב

כדי לסנן את נתוני היומן לפי משאב, מוסיפים הצהרה resource.type לסעיף WHERE:

-- Matches log entries whose resource type is gce_instance
WHERE resource.type = "gce_instance"

סינון לפי חומרה

כדי לסנן את נתוני היומן לפי רמת חומרה, מוסיפים הצהרה של severity לסעיף WHERE:

-- Matches log entries whose severity is INFO or ERROR
WHERE severity IS NOT NULL AND severity IN ('INFO', 'ERROR')

אפשר גם לסנן את רשומות היומן לפי severity_number, שהוא מספר שלם. לדוגמה, התנאי הבא תואם לכל רשומות היומן שרמת החומרה שלהן היא לפחות NOTICE:

-- Matches log entries whose severity level is at least NOTICE
WHERE severity_number IS NOT NULL AND severity_number > 200

מידע על הערכים המספריים מופיע במאמר בנושא LogSeverity.

סינון לפי שם היומן

כדי לסנן את נתוני היומן לפי שם יומן, מוסיפים הצהרת log_name או log_id לסעיף WHERE:

  • שם היומן מציין את נתיב המשאב:

    -- Matches log entries that have the following log ID.
    WHERE log_name="projects/cloud-logs-test-project/logs/cloudaudit.googleapis.com%2Factivity"
    
  • המזהה של היומן לא כולל את נתיב המשאב:

    -- Matches log entries that have the following log id.
    WHERE log_id = "cloudaudit.googleapis.com/data_access"
    

סינון רשומות ביומן לפי תווית משאב

תוויות המשאבים מאוחסנות כמבנה JSON. כדי לסנן לפי הערך של שדה במבנה JSON, משתמשים בפונקציה JSON_VALUE:

SELECT
  timestamp, JSON_VALUE(resource.labels.zone) AS zone, json_payload, resource, labels
FROM
  `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
WHERE
  -- Matches log entries whose resource type is gce_instance and whose zone is
  -- us-central1-f. Because resource has data type JSON, you must use JSON_VALUE
  -- to get the value for subfields, like zone.
  resource.type = "gce_instance" AND
  JSON_VALUE(resource.labels.zone) = "us-central1-f"
ORDER BY timestamp ASC

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

{
   type: "gce_instance"
   labels: {
      instance_id: "1234512345123451"
      project_id: "my-project"
      zone: "us-central1-f"
   }
}

מידע על כל הפונקציות שיכולות לאחזר ולשנות נתונים בפורמט JSON מופיע במאמר פונקציות JSON.

סינון לפי בקשת HTTP

כדי לשלוח שאילתה רק לרשומות ביומן שיש להן שדה בקשת HTTP, משתמשים בפסוקית הבאה:

-- Matches log entries that have a HTTP request_method field.
-- Don't compare http_request to NULL. This field has a data type of RECORD.
WHERE http_request.request_method IS NOT NULL

אפשר גם להשתמש בהצהרה IN:

-- Matches log entries whose HTTP request_method is GET or POST.
WHERE http_request.request_method IN ('GET', 'POST')

סינון לפי סטטוס HTTP

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

-- Matches log entries that have an http_request.status field.
WHERE http_request.status IS NOT NULL

סינון לפי שדה בתוך סוג נתונים של JSON

כדי לשלוח שאילתה רק לגבי רשומות ביומן שבהן שדה משנה של שדה עם סוג נתונים JSON מכיל ערך ספציפי, צריך לחלץ את הערך באמצעות הפונקציה JSON_VALUE:

-- Compare the value of the status field to NULL.
WHERE JSON_VALUE(json_payload.status) IS NOT NULL

הסעיף הקודם שונה מעט מהסעיף הבא:

-- Compare the status field to NULL.
WHERE json_payload.status IS NOT NULL

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

{
    status: {
        measureTime: "1661517845"
    }
}

בנתוני היומן האחרים, השדה json_payload בנוי בצורה שונה:

{
    @type: "type.googleapis.com/google.cloud.scheduler.logging.AttemptFinished"
    jobName: "projects/my-project/locations/us-central1/jobs/test1"
    relativeUrl: "/food=cake"
    status: "NOT_FOUND"
    targetType: "APP_ENGINE_HTTP"
}

הפסקה WHERE json_payload.status IS NOT NULL תואמת לשתי הרשומות ביומן. עם זאת, הפסוקית WHERE JSON_VALUE(json_payload.status) IS NOT NULL מתאימה רק לרשומה השנייה ביומן.

קיבוץ וצבירה של רשומות ביומן

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

כל ביטוי SELECT צריך להיכלל בשדות הקבוצה או להיות מצטבר.

קיבוץ של רשומות ביומן לפי חותמת זמן

כדי לקבץ נתונים לפי חותמת זמן, משתמשים בפונקציה TIMESTAMP_TRUNC, שמקצרת חותמת זמן לרמת פירוט שצוינה, כמו HOUR:

SELECT
  -- Truncate the timestamp by hour.
  TIMESTAMP_TRUNC(timestamp, HOUR) AS hour,
  JSON_VALUE(json_payload.status) AS status,
  -- Count the number log entries in each group.
  COUNT(*) AS count
FROM
  `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
WHERE
  -- Matches log entries that have a status field whose value isn't NULL.
  json_payload IS NOT NULL AND JSON_VALUE(json_payload.status) IS NOT NULL
GROUP BY
  -- Group by hour and status
  hour,status
ORDER BY hour ASC

מידע נוסף זמין בTIMESTAMP_TRUNCמאמרי העזרה ובקטע פונקציות של תאריך ושעה.

קיבוץ של רשומות ביומן לפי משאב

השאילתה הבאה מראה איך לקבץ רשומות ביומן לפי סוג המשאב, ואז לספור את מספר הרשומות ביומן בכל קבוצה:

SELECT
   -- Count the number of log entries for each resource type
   resource.type, COUNT(*) AS count
FROM
  `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
GROUP BY resource.type
LIMIT 100

קיבוץ של רשומות ביומן לפי חומרה

השאילתה הבאה מראה איך לקבץ רשומות ביומן לפי רמת החומרה, ואז לספור את מספר הרשומות ביומן בכל קבוצה:

SELECT
  -- Count the number of log entries for each severity.
  severity, COUNT(*) AS count
FROM
  `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
WHERE
  severity IS NOT NULL
GROUP BY severity
ORDER BY severity
LIMIT 100

קיבוץ של רשומות ביומן לפי log_id

השאילתה הבאה מראה איך לקבץ רשומות ביומן לפי מזהה היומן, ואז לספור את מספר הרשומות ביומן בכל קבוצה:

SELECT
  -- Count the number of log entries for each log ID.
  log_id, COUNT(*) AS count
FROM
  `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
GROUP BY log_id
ORDER BY count DESC
LIMIT 100

חישוב זמן האחזור הממוצע של בקשות HTTP לכל כתובת URL

השאילתה הבאה ממחישה איך לקבץ רשומות ביומן לפי כתובת ה-URL של בקשת ה-HTTP והמיקום, ואז לספור את מספר הרשומות ביומן בכל קבוצה:

SELECT
  -- Compute the average latency for each group. Because the labels field has a
  -- data type of JSON, use JSON_VALUE to get the value of checker_location.
  JSON_VALUE(labels.checker_location) AS location,
  AVG(http_request.latency.seconds) AS secs, http_request.request_url
FROM
  `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
WHERE
  -- Matches log entries when the request_method field is GET.
  http_request IS NOT NULL AND http_request.request_method IN ('GET')
GROUP BY
  -- Group by request URL and location
  http_request.request_url, location
ORDER BY location
LIMIT 100

חישוב ממוצע הבייטים שנשלחו לבדיקה של רשת משנה

השאילתה הבאה מראה איך לקבץ רשומות ביומן לפי המיקום שצוין בתוויות המשאבים, ואז לחשב את מספר הרשומות ביומן בכל קבוצה:

SELECT
  -- Compute the average number of bytes sent per location. Because labels has
  -- a data type of JSON, use JSON_VALUE to get the value of the location field.
  -- bytes_sent is a string. Must cast to a FLOAT64 before computing average.
  JSON_VALUE(resource.labels.location) AS location,
  AVG(CAST(JSON_VALUE(json_payload.bytes_sent) AS FLOAT64)) AS bytes
FROM
  `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
WHERE
  resource.type = "gce_subnetwork" AND json_payload IS NOT NULL
GROUP BY
  -- Group by location
  location
LIMIT 100

מידע נוסף זמין במאמרים בנושא פונקציות JSON ופונקציות המרה.

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

כדי להחזיר את מחרוזת המשנה שתואמת לביטוי רגולרי, משתמשים בפונקציה REGEXP_EXTRACT:

SELECT
  -- Extract the value that begins with test.
  -- Count the number of log entries for each name.
  REGEXP_EXTRACT(JSON_VALUE(json_payload.jobName), r".*(test.*)$") AS name,
  COUNT(*) AS count
FROM
  `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
WHERE
  json_payload.jobName IS NOT NULL
GROUP BY name
ORDER BY count
LIMIT 20

דוגמאות נוספות זמינות במאמרי העזרה בנושא REGEXP_EXTRACT.

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

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

  • חיפושים שמבוססים על מחרוזת משנה: מציינים את מיקום החיפוש, מחרוזת מילולית, ואז משתמשים בפונקציה CONTAINS_SUBSTR. המערכת מבצעת בדיקה לא תלוית-רישיות כדי לקבוע אם המחרוזת המילולית קיימת בביטוי. הפונקציה CONTAINS_SUBSTR מחזירה TRUE אם ליטרל המחרוזת קיים, ומחזירה FALSE אם לא. ערך החיפוש חייב להיות ערך מילולי STRING, אבל לא הערך המילולי NULL.

השאילתה הבאה משאירה רק את השורות שבהן יש שדה שתואם בדיוק לערך '35.193.12.15':

SELECT
  timestamp, log_id, proto_payload, severity, resource.type, resource, labels
FROM
  `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID` AS t
WHERE
  -- Search data access audit logs for the IP address that matches 35.193.12.15.
  -- The use of backticks prevents the string from being tokenized.
  proto_payload IS NOT NULL AND
  log_id = "cloudaudit.googleapis.com/data_access" AND
  SEARCH(t,"`35.193.12.15`")
ORDER BY timestamp ASC
LIMIT 20

אם לא משתמשים בגרשיים הפוכים במחרוזת השאילתה, המחרוזת מפולחת על סמך הכללים שמוגדרים בתיעוד של SEARCH. לדוגמה, כשמריצים את ההצהרה הבאה, מחרוזת השאילתה מפולחת לארבעה טוקנים: ‎"35", "193", "12"‎ ו-‎ "15":

  SEARCH(t,"35.193.12.15")

ההצהרה הקודמת SEARCH מתאימה לשורה אם שדה יחיד תואם לכל ארבעת הטוקנים. סדר הטוקנים לא משנה.

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

  SEARCH(t,"`cloudaudit.googleapis.com/data_access`")

ההצהרה הקודמת מחפשת בכל שדה של רשומות היומן בתצוגת היומן, בעוד שההצהרה המקורית מחפשת רק בשדה log_id של רשומות היומן.

כדי לבצע כמה חיפושים בכמה שדות, צריך להפריד בין המחרוזות ברווח. לדוגמה, ההצהרה הבאה תתאים לשורות שבהן שדה מכיל את הערכים Hello World,‏ happy ו-days:

  SEARCH(t,"`Hello World` happy days")

לבסוף, אפשר לחפש שדות ספציפיים במקום לחפש בטבלה שלמה. לדוגמה, ההצהרה הבאה מחפשת רק בעמודות שנקראות text_payload ו-json_payload:

   SEARCH((text_payload, json_payload) ,"`35.222.132.245`")

מידע על אופן העיבוד של הפרמטרים של הפונקציה SEARCH זמין בדף ההפניה של BigQuery בנושא פונקציות חיפוש.

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

SELECT
  timestamp, log_id, proto_payload, severity, resource.type, resource, labels
FROM
  `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID` AS t
WHERE
  -- Search data access audit logs for the IP address that matches 35.193.12.15.
  -- CONTAINS_SUBSTR performs a contains-test.
  proto_payload IS NOT NULL AND
  log_id = "cloudaudit.googleapis.com/data_access" AND
  CONTAINS_SUBSTR(t,"35.193.12.15")
ORDER BY timestamp ASC
LIMIT 20

הרצת שאילתות על כמה תצוגות

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

ההגבלות הבאות חלות על הצטרפות לתצוגות:

  1. המיקומים של התצוגות עומדים באחד מהתנאים הבאים:

    • לכל התצוגות יש את אותו המיקום.
    • כל התצוגות נמצאות במיקום global או us.
  2. כשמשאבי אחסון משתמשים במפתחות הצפנה בניהול הלקוח (CMEK), אחד מהתנאים הבאים מתקיים:

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

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

לדוגמה, נניח שיש לכם שתי תצוגות שנמצאות באותו מיקום. אחר כך תוכלו להצטרף לתצוגות האלה אם מתקיים אחד מהתנאים הבאים:

  • משאבי האחסון לא משתמשים ב-CMEK.
  • משאב אחסון אחד משתמש ב-CMEK והשני לא.
  • שני משאבי האחסון משתמשים ב-CMEK ובאותו מפתח Cloud KMS.
  • שני משאבי האחסון משתמשים ב-CMEK, אבל במפתחות שונים. עם זאת, המשאבים חולקים ישות אב שמציינת מפתח ברירת מחדל של Cloud KMS שנמצא באותו מיקום כמו משאבי האחסון.

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

הצטרפות לשתי תצוגות של יומנים לפי מזהה המעקב

כדי לשלב מידע משתי טבלאות, משתמשים באחד מאופרטורי הצירוף:

SELECT
  -- Do an inner join on two tables by using the span ID and trace ID.
  -- Don't join only by span ID, as this field isn't globally unique.
  -- From the first view, show the timestamp, severity, and JSON payload.
  -- From the second view, show the JSON payload.
  a.timestamp, a.severity, a.json_payload, b.json_payload, a.span_id, a.trace
FROM  `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_1` a
JOIN  `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_2` b
ON
  a.span_id = b.span_id AND
  a.trace = b.trace
LIMIT 100

שאילתה של שני תצוגות יומן עם הצהרת איחוד

כדי לשלב את התוצאות של שני משפטי SELECT או יותר ולמחוק שורות כפולות, משתמשים באופרטור UNION. כדי לשמור על שורות כפולות, משתמשים באופרטור UNION ALL:

SELECT
  timestamp, log_name, severity, json_payload, resource, labels
-- Create a union of two log views
FROM(
  SELECT * FROM `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_1`
  UNION ALL
  SELECT * FROM `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_2`
)
-- Sort the union by timestamp.
ORDER BY timestamp ASC
LIMIT 100

הסרת רשומות כפולות ביומן

ב-Observability Analytics, רשומות כפולות ביומן לא מוסרות לפני הפעלת שאילתה. ההתנהגות הזו שונה מההתנהגות כשמבצעים שאילתה על רשומות ביומן באמצעות הכלי Logs Explorer, שבו רשומות כפולות מוסרות על ידי השוואה בין שמות היומנים, חותמות הזמן ושדות מזהה ההוספה.

אפשר להשתמש באימות ברמת השורה כדי להסיר רשומות כפולות ביומן.

מידע נוסף זמין במאמר פתרון בעיות: יש רשומות כפולות ביומן בתוצאות של Observability Analytics.

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

מידע על ניתוב ואחסון של רשומות ביומן זמין במאמרים הבאים:

למאמרי עזרה בנושא SQL, אפשר לעיין במסמכים הבאים: