אתם יכולים להשתמש בשאילתות SQL לדוגמה ב-Observability Analytics כדי לנתח רשומות ביומן, לחלץ שדות מטען ייעודי (payload) ולצבור נתוני יומנים בשירותים שלכם.
אתם מריצים את השאילתות האלה מהדף Observability Analytics במסוף Google Cloud בקטגוריות של יומנים ששודרגו לשימוש ב-Observability Analytics. דוגמאות נוספות זמינות במאגרים של logging-analytics-samples ו-security-analytics ב-GitHub. בקטע השלבים הבאים מוסבר על התחביר של SQL ועל הניתוב והאחסון של רשומות ביומן.
תמיכה בשפת SQL
השאילתות שמשמשות בדף Observability Analytics תומכות בפונקציות של GoogleSQL, עם כמה חריגים.
אי אפשר להשתמש בפקודות ה-SQL הבאות בשאילתות SQL שנוצרות באמצעות הדף Observability Analytics:
- פקודות DDL ו-DML
- פונקציות בהגדרת המשתמש (UDF) ב-JavaScript
- פונקציות של BigQuery ML
- משתני SQL
הפעולות הבאות נתמכות רק כששולחים שאילתה למערך נתונים מקושר ב-BigQuery באמצעות הדפים BigQuery Studio ו-Looker Studio, או באמצעות כלי שורת הפקודה של BigQuery:
- פונקציות בהגדרת המשתמש (UDF) ב-JavaScript
- פונקציות של BigQuery ML
- משתני SQL
שיטות מומלצות
כדי להגדיר את טווח התאריכים של השאילתה, מומלץ להשתמש בבורר טווח התאריכים. לדוגמה, כדי לראות את הנתונים של השבוע האחרון, בוחרים באפשרות Last 7 days בבורר טווח התאריכים. אפשר גם להשתמש בבורר טווח התאריכים כדי לציין את שעת ההתחלה והסיום, לציין את השעה שרוצים להציג ולשנות את אזורי הזמן.
אם כוללים שדה 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:
-
נכנסים לדף Logs Storage במסוף Google Cloud :
אם אתם משתמשים בשורת החיפוש כדי למצוא את הדף הזה, בחרו בתוצאה עם כותרת המשנה Logging.
- בכל מאגר של יומנים שיש בו תצוגת יומנים שרוצים לשלוח אליה שאילתה, מוודאים שבעמודה Observability Analytics available מופיע הערך Open. אם מופיע הכפתור Upgrade, לוחצים עליו ומשלימים את תיבת הדו-שיח.
הגדרת תפקידים והרשאות ב-IAM
בקטע הזה מתוארים התפקידים או ההרשאות של IAM שנדרשים כדי להשתמש ב-Observability Analytics:
-
כדי לקבל את ההרשאות שנדרשות לשימוש ב-Observability Analytics ולשאילתות בתצוגות של יומנים, בקשו מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:
-
כדי לשלוח שאילתות לדליים של היומנים
_Requiredו-_Default: צפייה ביומנים (roles/logging.viewer) -
כדי לשלוח שאילתות לכל תצוגות היומנים בפרויקט: גישה לתצוגות של יומנים (
roles/logging.viewAccessor)
כדי להגביל חשבון משתמש לתצוגת יומנים ספציפית, אתם יכולים להוסיף תנאי IAM להקצאת התפקיד "גישה לתצוגת יומנים" ברמת הפרויקט, או להוסיף קישור IAM לקובץ המדיניות של תצוגת היומנים. מידע נוסף זמין במאמר שליטה בגישה לתצוגת יומנים.
אלה אותן הרשאות שנדרשות כדי להציג רשומות ביומן בדף Logs Explorer. במאמר תפקידים ב-Cloud Logging מפורטים תפקידים נוספים שנדרשים כדי לשלוח שאילתות לתצוגות של קטגוריות בהגדרת המשתמש, או כדי לשלוח שאילתות לתצוגה
_AllLogsשל קטגוריית היומנים_Default. -
כדי לשלוח שאילתות לדליים של היומנים
-
כדי לקבל את ההרשאות שנדרשות לשליחת שאילתות לתצוגות ניתוח נתונים, בקשו מהאדמין להקצות לכם בפרויקט את התפקיד משתמש ב-Observability Analytics (
roles/observability.analyticsUser) ב-IAM.
איך להשתמש בשאילתות שבדף הזה
-
נכנסים לדף manage_search Observability Analytics במסוף Google Cloud :
כניסה לדף Observability Analytics
אם אתם משתמשים בשורת החיפוש כדי למצוא את הדף הזה, בחרו בתוצאה עם כותרת המשנה Logging.
בחלונית Query, לוחצים על code SQL, ואז מעתיקים ומדביקים שאילתה בחלונית של שאילתת ה-SQL.
לפני שמעתיקים שאילתה, מחליפים את השדות הבאים בסעיף
FROM:- PROJECT_ID: מזהה הפרויקט.
- LOCATION: המיקום של תצוגת היומן או של תצוגת ניתוח הנתונים.
- BUCKET_ID: השם או המזהה של קטגוריית היומנים.
- LOG_VIEW_ID: המזהה של תצוגת היומן, שמוגבל ל-100 תווים ויכול לכלול רק אותיות, ספרות, קווים תחתונים ומקפים.
הדוגמה הבאה מראה את הפורמט של משפט ה-
FROMבתצוגת יומן:FROM `PROJECT_ID.LOCATION.BUCKET_ID.LOG_VIEW_ID`
דוגמאות היומנים בדף הזה שולחות שאילתות לתצוגת יומן. כדי לשלוח שאילתה לתצוגת ניתוח נתונים, משתמשים בפורמט הנתיב הבא:
`analytics_view.PROJECT_ID.LOCATION.ANALYTICS_VIEW_ID`. בביטוי הקודם,PROJECT_IDהוא מזהה הפרויקט, ו-LOCATIONו-ANALYTICS_VIEW_IDהם המיקום והשם של תצוגת ניתוח הנתונים.
כדי להשתמש בשאילתות שמוצגות במסמך הזה בדף BigQuery Studio או בכלי שורת הפקודה של BigQuery, צריך לערוך את הסעיף 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). כדי לסנן רשומות ביומן לפי סוג המטען הייעודי, משתמשים באחד מהפסוקיות הבאות:
מטענים ייעודיים (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 exists. 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. הסעיף השני בודק אם שדה הסטטוס קיים. נניח שתצוגת יומן מכילה שתי רשומות ביומן. ברשומה אחת ביומן, השדה 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 ובפונקציות Datetime.
קיבוץ רשומות ביומן לפי משאב
השאילתה הבאה מראה איך לקבץ רשומות ביומן לפי סוג המשאב, ואז לספור את מספר הרשומות בכל קבוצה:
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, המערכת מצפינה את הנתונים הזמניים שנוצרו על ידי פעולת ה-JOIN באמצעות מפתח Cloud KMS המשותף או מפתח Cloud KMS שמוגדר כברירת המחדל של האב הקדמון.
לדוגמה, נניח שיש לכם שתי תצוגות באותו מיקום. אחרי זה אפשר לצרף את התצוגות האלה אם מתקיים אחד מהתנאים הבאים:
- משאבי האחסון לא משתמשים ב-CMEK.
- משאב אחסון אחד משתמש ב-CMEK והשני לא.
- 2 משאבי האחסון משתמשים ב-CMEK ובאותו מפתח Cloud KMS.
שני משאבי האחסון משתמשים ב-CMEK, אבל במפתחות שונים. עם זאת, למשאבים יש ישות אב משותפת שמציינת מפתח ברירת מחדל של Cloud KMS שנמצא באותו מיקום כמו משאבי האחסון.
לדוגמה, נניח שהיררכיית המשאבים של קטגוריית יומנים וקטגוריית תצפיתיות כוללת את אותו ארגון. אתם יכולים לאחד תצוגות בקטגוריות האלה אם הגדרתם לארגון את הגדרות ברירת המחדל של המשאבים ב-Cloud Logging ואת הקטגוריות של יכולת התצפית עם אותו מפתח ברירת מחדל של Cloud KMS למיקום האחסון.
איחוד שתי תצוגות של יומנים לפי מזהה המעקב
כדי לשלב מידע משתי טבלאות, משתמשים באחד מהאופרטורים של join:
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.
המאמרים הבאים
במאמרים הבאים מוסבר איך לנתב ולאחסן רשומות ביומן:
- יצירת קטגוריה של יומנים
- שדרוג קטגוריה לשימוש ב-Observability Analytics
- קישור של קטגוריית יומנים למערך נתונים ב-BigQuery
- הגדרה וניהול של אובייקטים מסוג sink
למידע נוסף על SQL, ראו את מאמרי העזרה הבאים: