במסמך הזה יש דוגמאות לשאילתות על רשומות ביומן שאוחסנו במאגרי יומנים ששודרגו לשימוש ב'ניתוח יומנים'.
אפשר להריץ שאילתות 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:
-
נכנסים לדף Logs Storage במסוף Google Cloud :
אם משתמשים בסרגל החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא Logging.
- לכל קטגוריה ביומן שיש לה תצוגת יומנים שרוצים לשלוח אליה שאילתה, מוודאים שבעמודה Log Analytics available מופיעה האפשרות Open. אם הכפתור שדרוג מוצג, לוחצים עליו וממלאים את תיבת הדו-שיח.
הגדרת תפקידים והרשאות ב-IAM
בקטע הזה מתוארים התפקידים או ההרשאות של IAM שנדרשים לשימוש ב-Log Analytics:
-
כדי לקבל את ההרשאות שדרושות לשימוש בכלי לניתוח יומנים ולשאילתות של תצוגות יומנים, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:
-
כדי להריץ שאילתה על דלי היומנים
_Requiredו-_Default: מציג היומנים (roles/logging.viewer) -
כדי לשלוח שאילתה לכל תצוגות היומן בפרויקט:
בעל הרשאת גישה לתצוגת יומנים (
roles/logging.viewAccessor)
כדי להגביל חשבון משתמש לתצוגת יומן ספציפית, אפשר להוסיף תנאי IAM להענקת התפקיד Logs View Accessor (גישה לתצוגת יומנים) ברמת הפרויקט, או להוסיף קישור IAM לקובץ המדיניות של תצוגת היומן. מידע נוסף זמין במאמר בנושא שליטה בגישה לתצוגת יומן.
אלה אותן הרשאות שנדרשות כדי לצפות ברשומות ביומן בדף Logs Explorer. מידע על תפקידים נוספים שנדרשים כדי לשלוח שאילתות לתצוגות של מאגרי מידע שהוגדרו על ידי המשתמש או כדי לשלוח שאילתות לתצוגה
_AllLogsשל קטגוריה ביומן_Defaultזמין במאמר בנושא תפקידים ב-Cloud Logging. -
כדי להריץ שאילתה על דלי היומנים
-
כדי לקבל את ההרשאות שנדרשות להפעלת שאילתות בתצוגות ניתוח נתונים, צריך לבקש מהאדמין להקצות לכם את תפקיד ה-IAM Observability Analytics User (
roles/observability.analyticsUser) בפרויקט.
איך משתמשים בשאילתות שבדף הזה
-
נכנסים לדף manage_search Log Analytics במסוף Google Cloud :
אם משתמשים בסרגל החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא Logging.
בחלונית Query, לוחצים על code 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 בטבלאות או במערכי נתונים שונים במגוון דרכים, ואז לבחור את העמודות מהנתונים המשולבים.
ההגבלות הבאות חלות על הצטרפות לתצוגות:
-
המיקומים של התצוגות עומדים באחד מהתנאים הבאים:
- לכל התצוגות יש את אותו המיקום.
- כל התצוגות נמצאות במיקום
globalאוus.
-
כשמשאבי אחסון משתמשים במפתחות הצפנה בניהול הלקוח (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, שבו רשומות כפולות מוסרות על ידי השוואה בין שמות היומנים, חותמות הזמן ושדות מזהה ההוספה.
אפשר להשתמש באימות ברמת השורה כדי להסיר רשומות כפולות ביומן.
מידע נוסף זמין במאמר פתרון בעיות: יש רשומות כפולות בתוצאות של ניתוח יומנים.
המאמרים הבאים
מידע על ניתוב ואחסון של רשומות ביומן זמין במאמרים הבאים:
- יצירת קטגוריה ליומני רישום
- שדרוג מאגר לשימוש ב-Log Analytics
- קישור קטגוריה ביומן למערך נתונים ב-BigQuery
- הגדרה וניהול של אובייקטים מסוג sink
מאמרי עזרה בנושא SQL: