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

במסמך הזה יש דוגמאות לשאילתות על רשומות ביומן שאוחסנו במאגרי יומנים ששודרגו לשימוש ב'ניתוח יומנים'. אפשר להריץ שאילתות SQL על מאגרי הנתונים האלה מהדף Log 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

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

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

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

התמיכה בפריטים הבאים זמינה רק כשמריצים שאילתה על מערך נתונים מקושר באמצעות הדפים 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)

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

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

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

הגדרת מאגרי יומנים

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

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

    כניסה אל Logs Storage

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

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

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

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

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

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

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

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

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

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

    מעבר אל Log Analytics

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

  2. בחלונית Query, לוחצים על  SQL, ואז מעתיקים ומדביקים שאילתת 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 הם המיקום והשם של תצוגת הניתוח.

כדי להשתמש בשאילתות שמוצגות במסמך הזה בדף BigQuery Studio או כדי להשתמש בכלי שורת הפקודה של BigQuery, צריך לערוך את סעיף FROM ולהזין את הנתיב למערך הנתונים המקושר. לדוגמה, כדי לשלוח שאילתה לתצוגה _AllLogs במערך הנתונים המקושר שנקרא 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) של Proto

    -- 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

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

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

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

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

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

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

מאמרי עזרה בנושא SQL: