במאמר הזה מוסבר איך Google Cloud Observability קובע את השדות של LogEntry מרשומת היומן של OTLP, כשהרשומה הזו נשלחת אל Google Cloud באמצעות Telemetry API.
Google Cloud מייצאים ל-Cloud Logging ממירים נתוני יומנים בפורמט OTLP לאובייקטים של LogEntry. לאחר מכן הם שולחים את הנתונים האלה לפרויקט ב- Google Cloud באמצעות Cloud Logging API. עם זאת, כללי ברירת המחדל שמשמשים את Google Cloud Observability ואת המייצאים ליצירת רשומות ביומן שונים. מידע נוסף מופיע במאמר הגדרת Google Cloud Observability לשימוש במיפויים של הייצוא.
המבנה הכללי של נתוני יומן בפורמט OTLP
כששולחים נתוני יומן אל Google Cloud באמצעות Telemetry API, הנתונים צריכים להיות בפורמט שתואם ל-OTLP. המבנה הכללי של הנתונים האלה נראה כך:
"resourceLogs": [
{
"resource": {
"attributes": [...]
},
"scopeLogs": [
{
"logRecords": [...]
}
]
}
]
שימו לב ש-OpenTelemetry אוסף באצ'ים של רשומות יומן נפרדות, שכל אחת מהן מיוצגת על ידי מבנה logRecord, עם מידע על המקור של רשומות היומן האלה, שמיוצג על ידי מבנה resource.
כש-Google Cloud Observability מקבל אובייקט resourceLogs, הוא יוצר LogEntry אחד לכל logRecord. בניגוד ל-OTLP, שבו מידע על המקור נשלח באצווה עם אוסף של יומנים נפרדים, כל מבנה LogEntry מכיל מידע על מקור היומן ועל היומן עצמו.
למידע נוסף על המבנה של נתוני יומן בפורמט OTLP, קראו את logs.proto של OpenTelemetry.
איך מוגדרים השדות של LogEntry
Google Cloud Observability משתמש בכללים הבאים כדי לקבוע את הערכים של השדות LogEntry:
שדה LogEntry(שמות מהפניה ל-HTTP) |
איך המערכת קובעת את ערך השדה |
|---|---|
logName |
המערכת משתמשת בערך של השדה
שמות היומנים חייבים להיות בטוחים לשימוש בכתובות URL, אחרת הם מקודדים ככתובות URL במהלך ההטמעה. |
resource |
המערכת משתמשת במידע שמוגדר בשדה resource או מסיקה את המשאב. פרטים נוספים זמינים במאמר מיפוי מאפייני OTLP לסוגי משאבים. |
timestamp |
כדי לקבוע את הערך של
תקופת השמירה של קטגוריית היומנים שבה מאוחסנים הנתונים קובעת את חותמת הזמן הישנה ביותר שאפשר להטמיע. מידע נוסף זמין במאמר מכסות ב-Cloud Logging. |
receiveTimestamp |
הגדרת השעה שבה LogEntry נטמע. |
severity |
המערכת ממפה את רמת החומרה של OpenTelemetry ברשומת היומן לרמת החומרה של Cloud Logging. לפרטים נוספים, קראו את הקטע השדה Severity. |
httpRequest |
המערכת ממפה את המאפיינים של |
labels |
המערכת מגדירה את השדה הזה באמצעות ערכי המאפיינים של רשומת היומן. מידע נוסף זמין בקטע שדה התוויות. |
trace |
המערכת מגדירה את השדה הזה לערך מהשדה traceId של רשומת היומן. הערך חייב להיות מחרוזת הקסדצימלית תקינה באורך 32 תווים, אחרת הרשומה תידחה. |
spanId |
המערכת מגדירה את השדה הזה לערך מהשדה spanId של רשומת היומן. הערך חייב להיות מחרוזת הקסדצימלית תקינה באורך 16 תווים, אחרת הרשומה תידחה. |
traceSampled |
המערכת מגדירה את השדה הזה על סמך הביט הכי פחות משמעותי מהשדה flags של רשומת היומן. אם הביט הכי פחות משמעותי שווה ל-1, השדה הזה מוגדר ל-true. אחרת, הוא נשאר לא מוגדר. |
sourceLocation |
המערכת מגדירה את השדה הזה לערכים מהמאפיינים Code של רשומת היומן. מידע נוסף זמין במאמר השדה SourceLocation. |
split |
לא מוגדר. |
apphubapphubDestinationapphubSource |
לא מוגדר. |
otel |
בשדות בנתוני היומן של OTLP שאין להם שדה מקביל ב-LogEntry, המערכת ממירה את סוגי הנתונים ומוסיפה את הנתונים שהומרו לשדה otel. למידע נוסף, ראו שדה Otel. |
operation |
המערכת ממפה את המאפיינים של |
| Payload | המערכת מגדירה את המטען הייעודי (payload) על ידי המרת הגוף של רשומת היומן לסוג מטען ייעודי מתאים. מידע נוסף זמין במאמר השדה Payload. |
השדה HttpRequest
Google Cloud Observability ממפה מאפייני OTLP שרלוונטיים לבקשות HTTP לשדות של LogEntry. בקטעים הבאים מוסבר איך המערכת ממפה מאפיינים שטוחים ומאפיינים בתצוגת עץ.
מאפיינים שטוחים
בטבלה הבאה מתואר איך Google Cloud Observability ממפה מאפיינים שטוחים שחלים על בקשות HTTP לשדות LogEntry.
לדוגמה, הערך מהמאפיין http.request.method: "GET", מוגדר כערך של השדה httpRequest.requestMethod ברשומת יומן:
צמד מפתח/ערך של OpenTelemetryLogRecord.attribute. |
הערך שמאוחסן בשדהLogEntry הבא(שמות מהפניה ב-HTTP) |
סוג הפריט שאושר |
|---|---|---|
http.request.method
|
httpRequest.requestMethod |
מחרוזת |
url.fullhttp.url
|
httpRequest.requestUrl |
מחרוזת |
http.request.body.size |
httpRequest.requestSize |
מחרוזת, מספר שלם |
http.response.status_code |
httpRequest.status |
מחרוזת, מספר שלם |
http.response.body.size |
httpRequest.responseSize |
מחרוזת, מספר שלם |
user_agent.originalhttp.user_agent
|
httpRequest.userAgent |
מחרוזת |
client.address |
remoteIp |
מחרוזת |
server.address |
serverIp |
מחרוזת |
referrer |
httpRequest.referer |
מחרוזת |
latency |
httpRequest.latency |
מחרוזת, מספר שלם |
cacheLookup |
httpRequest.cacheLookup |
בוליאני |
cacheHit |
httpRequest.cacheHit |
בוליאני |
cacheValidatedWithOriginServer |
httpRequest.cacheValidatedWithOriginServer |
בוליאני |
cacheFillBytes |
httpRequest.cacheFillBytes |
מחרוזת, מספר שלם |
network.protocol.versionprotocol
|
httpRequest.protocol |
מחרוזת |
מאפיינים בתצוגת עץ
בקטע הזה מוסבר איך Google Cloud Observability ממפה מאפייני OTLP בתצוגת עץ שרלוונטיים לבקשות HTTP לשדות ב-LogEntry. בדוגמה הבאה מוצגת רשומת יומן שמכילה שני מאפיינים, שכל אחד מהם מכיל לפחות מאפיין אחד נוסף:
log_record {
attributes: {
gcp.http_request {
"requestMethod": "GET",
"requestUrl": "some-URL",
}
http_request {
"requestMethod": "GET",
}
}
}
הפורמט של השדה gcp.http_request יכול להיות מאפיינים מובְנים בתצוגת עץ או מחרוזת JSON של מאפיינים מובְנים.
log_record {
attributes: {
gcp.http_request: "{\"requestMethod\": \"GET\", \"requestUrl\": \"some-URL\"}"
}
}
בטבלה, המאפיינים בתצוגת עץ מוצגים באמצעות סוגריים מסולסלים. לדוגמה, gcp.http_request {requestMethod} פירושו שהמאפיין gcp.http_request מכיל את המאפיין requestMethod. הערך של המאפיין הפנימי ביותר מוקצה לערך של שדה רשומת היומן:
צמד מפתח/ערך של OpenTelemetryLogRecord.attribute. |
הערך שמאוחסן בשדהLogEntry הבא(שמות מהפניה ב-HTTP) |
סוג הפריט שאושר |
|---|---|---|
gcp.http_request {requestMethod}http_request {requestMethod}
|
httpRequest.requestMethod |
מחרוזת |
gcp.http_request {requestUrl}http_request {requestUrl}
|
httpRequest.requestUrl |
מחרוזת |
gcp.http_request {requestSize}http_request {requestSize}
|
httpRequest.requestSize |
מחרוזת, מספר שלם |
gcp.http_request {status}http_request {status}
|
httpRequest.status |
מחרוזת, מספר שלם |
gcp.http_request {responseSize}http_request {responseSize}
|
httpRequest.responseSize |
מחרוזת, מספר שלם |
gcp.http_request {userAgent}http_request {userAgent}
|
httpRequest.userAgent |
מחרוזת |
gcp.http_request {remoteIp}http_request {remoteIp}
|
httpRequest.remoteIp |
מחרוזת |
gcp.http_request {serverIp}http_request {serverIp}
|
httpRequest.serverIp |
מחרוזת |
gcp.http_request {referer}http_request {referrer}
|
httpRequest.referer |
מחרוזת |
gcp.http_request {latency}http_request {latency}
|
httpRequest.latency |
מחרוזת, מספר שלם |
gcp.http_request {cacheLookup}http_request {cacheLookup}
|
httpRequest.cacheLookup |
בוליאני |
gcp.http_request {cacheHit}http_request {cacheHit}
|
httpRequest.cacheHit |
בוליאני |
gcp.http_request {http_request {
|
httpRequest.cacheValidatedWithOriginServer |
בוליאני |
gcp.http_request {cacheFillBytes}http_request {cacheFillBytes}
|
httpRequest.cacheFillBytes |
מחרוזת, מספר שלם |
gcp.http_request {protocol}http_request {protocol}
|
httpRequest.protocol |
מחרוזת |
שדה התוויות
כדי לקבוע אילו תוויות לצרף לרשומה ביומן, המערכת מבצעת את הפעולות הבאות:
הוא מסיר מרשומת היומן של OTLP את כל המאפיינים שמופו לשדות ספציפיים של
LogEntry.לדוגמה, נניח שהמאפיינים הבאים מצורפים לרשומת יומן:
attributes: { "log_array_attr: ["value1", "value2"], "log_json_attr": {"json_key": "json_value"} "log-string-attr": "string", "code.file.path": "my-file.cc", "code.function.name: "my-func", "code.line.number": 123, "gcp.http_request": { "requestMethod": "GET", "requestUrl": "my-URL", }, }אחרי שמסירים שדות שממופים לשדות ספציפיים ב-
LogEntry, נשארים השדות הבאים:attributes: { "log_array_attr: ["value1", "value2"], "log_json_attr": {"json_key": "json_value"} "log-string-attr": "string", }אם מאפיין מכיל מערך או רכיבי JSON, המערכת ממירה את הערך למחרוזת.
לדוגמה, כך
LogEntryמייצג את המאפיינים הקודמים:labels: { "log_array_attr": "[\"value1\",\"value2\"]", "log_json_attr": "{\"json_key\":\"json_value\"}", "log-string-attr": "string", }עומק ההטמעה המקסימלי של מאפיינים הוא חמש. כל תוכן שכולל רמות עמוקות יותר של הטמעה נחתך.
השדה "פעולה"
Google Cloud Observability ממפה את מאפייני ה-OTLP שרלוונטיים לפעולה לשדה operation של LogEntry. בקטעים הבאים מוסבר איך המערכת ממפה את המאפיינים בתצוגת עץ.
המאפיין gcp.operation חייב להכיל סוגים של מפתח/ערך. אין תמיכה בשמות מאפיינים שטוחים. בדוגמה הבאה מוצגת רשומת יומן שהמאפיין gcp.operation שלה מכיל ארבעה צמדי מפתח/ערך:
log_record {
attributes: {
gcp.operation {
"id": "abc123",
"producer": "my_producer",
"first": "true",
"last": "false",
}
}
}
בטבלה הבאה מוסבר איך Google Cloud Observability ממפה את gcp.operation ל-LogEntry:
צמד מפתח/ערך של OpenTelemetryLogRecord.attribute.operation. |
הערך שמאוחסן בשדה הפעולהLogEntry הבא |
סוג הפריט שאושר |
|---|---|---|
id |
id |
מחרוזת |
producer |
httpRequest.requestUrl |
מחרוזת |
first |
first |
בוליאני |
last |
last |
בוליאני |
שדה Otel
בשדות בנתוני היומן של OTLP שאין להם שדה מקביל ב-LogEntry, המערכת ממירה את סוגי הנתונים ומוסיפה את הנתונים שהומרו לשדה otel. לדוגמה, בשדה otel מאוחסנים מאפיינים מהשדות resource, scope ו-entity.
המערכת משתמשת בכללים הבאים כדי להמיר את סוגי הנתונים של OpenTelemetry לסוגי Value של protobuf:
| סוג OpenTelemetry | סוג protobuf |
|---|---|
string |
string |
boolean |
bool |
integer |
double |
float |
double |
Array |
ListValues |
KeyValueList |
Struct |
כדי להימנע משגיאות של דיוק כפול, צריך להעביר מספרים שלמים כמחרוזות.
שדה מטען ייעודי (payload)
סוג הנתונים של השדה logRecord.body ב-OTLP קובע את המבנה של המטען הייעודי (payload) של LogEntry:
string: המערכת מעתיקה את המחרוזת לשדהLogEntry.textPayload.
Array: המערכת יוצרת מחרוזת של רכיבי המערך תוך שמירה על שורות חדשות. לאחר מכן, הוא מעתיק את המחרוזת לשדהLogEntry.textPayload.
KeyValueList: המערכת ממירה את הזוגות האלה ל-JSON ואז מאכלסת את השדהLogEntry.jsonPayload, עם המגבלות הבאות:- אם רשומת OTLP מכילה מפתחות מאפיינים כפולים, המערכת שומרת את המפתח הראשון ומוחקת מאפיינים עם מפתחות כפולים.
- כשרמת ההיררכיה של צמד JSON גדולה מ-5, המערכת חותכת את התוכן לרמה 5.
שדה חומרה
בקטע הזה מוסבר איך Google Cloud Observability ממפה את שדות החומרה של OpenTelemetry לרמות החומרה של Cloud Logging.
ב-OpenTelemetry מוגדרים מספר חומרה וטקסט חומרה. logs.proto מגדיר את מספרי החומרה.
Google Cloud Observability קובע את רמת החומרה של הרישום ביומן לפי מספר החומרה של OpenTelemetry, אם הוא מוגדר. אחרת, נעשה שימוש בטקסט של רמת החומרה. אם אף אחת מהן לא מוגדרת, רמת החומרה של הרישום ביומן מוגדרת ל-DEFAULT.
| מספר חומרת OpenTelemetry טיפוס בן מנייה (ערך) |
טקסט חומרת הבעיה ב-OpenTelemetry (הבדיקות לא תלויות-רישיות) |
רמת החומרה ב-Cloud Logging טיפוס בן מנייה (ערך) |
|---|---|---|
SEVERITY_NUMBER_UNSPECIFIED (0) |
"default" לא מוגדר |
DEFAULT (0) |
SEVERITY_NUMBER_TRACE (1)SEVERITY_NUMBER_TRACE2 (2)SEVERITY_NUMBER_TRACE3 (3)SEVERITY_NUMBER_TRACE4 (4) |
"trace" "trace2" "trace3" "trace4" |
DEBUG (100) |
SEVERITY_NUMBER_DEBUG (5)SEVERITY_NUMBER_DEBUG2 (6)SEVERITY_NUMBER_DEBUG3 (7)SEVERITY_NUMBER_DEBUG4 (8) |
"debug" "debug2" "debug3" "debug4" |
DEBUG (100) |
SEVERITY_NUMBER_INFO (9)SEVERITY_NUMBER_INFO2 (10) |
"info" "info2" |
INFO (200) |
SEVERITY_NUMBER_INFO3 (11)SEVERITY_NUMBER_INFO4 (12) |
"notice" "info3" "info4" |
NOTICE (300) |
SEVERITY_NUMBER_WARN (13)SEVERITY_NUMBER_WARN2 (14)SEVERITY_NUMBER_WARN3 (15)SEVERITY_NUMBER_WARN4 (16) |
"warning" "warn" "warn2" "warn3" "warn4" |
WARNING (400) |
SEVERITY_NUMBER_ERROR (17)SEVERITY_NUMBER_ERROR2 (18)SEVERITY_NUMBER_ERROR3 (19)SEVERITY_NUMBER_ERROR4 (20) |
"error" "error2" "error3" "error4" |
ERROR (500) |
SEVERITY_NUMBER_FATAL (21)SEVERITY_NUMBER_FATAL2 (22) |
"critical" "fatal" "fatal2" |
CRITICAL (600) |
SEVERITY_NUMBER_FATAL3 (23) |
"alert" "fatal3" |
ALERT (700) |
SEVERITY_NUMBER_FATAL4 (24) |
"emergency" "fatal4" |
EMERGENCY (800) |
השדה SourceLocation
Google Cloud Observability ממפה את ערכי Code הבאים של OTLP ישירות לשדות של LogEntry. המיפוי הזה אפשרי כי המאפיינים האלה של OpenTelemetry זהים מבחינה סמנטית למושגים של Cloud Logging.
צמד מפתח/ערך של OpenTelemetryLogRecord.attribute. |
הערך שמאוחסן בשדהLogEntry הבא(שמות מהפניה ב-HTTP) |
סוג הפריט שאושר |
|---|---|---|
code.file.path: Value |
sourceLocation.file |
מחרוזת |
code.function.name: Value |
sourceLocation.function |
מחרוזת |
code.function.number: Value |
sourceLocation.line |
מחרוזת, מספר שלם |
מגבלות
בקטע הזה מתוארות המגבלות. בנוסף, מוסבר איך Google Cloud Observability מטפל בסוגים מסוימים של נתונים.
מגבלות
| תיאור | ערך | הערות |
|---|---|---|
| מספר היומנים המקסימלי לכל בקשת OTLP | 8192 | המספר המקסימלי של logRecords במבנה OTLP resourceLogs. מגבלה. |
| הגודל המקסימלי של כל בקשה | 5 MiB | מגבלה. |
הגודל המקסימלי של LogEntryשנוצר מרשומת יומן של OTLP |
256 KiB | במקרה הצורך, Cloud Logging חותך או מסיר נתונים מרשומת יומן OTLP. מגבלה. |
| האורך המקסימלי של מפתח מאפיין | 512 B | מפתחות של תוויות גדולות מדי נחתכים כשרשומת היומן של OTLP מומרת ל-LogEntry. מגבלה. |
| האורך המקסימלי של ערך מאפיין | 64 KiB | ערכי תוויות גדולים מדי כשרשומת היומן של OTLP מומרת ל-LogEntry. מגבלה. |
| עומק מקסימלי של מאפיינים מקוננים | 20 | בקשות עם מאפיינים שחורגים מהמגבלה הזו נדחות כשרשומת היומן של OTLP מומרת ל-LogEntry. |
| המספר המקסימלי של בייטים להטמעת יומנים בדקה | 2.4GB באזורים הבאים: 300MB בכל שאר האזורים. |
מכסה. |
התנהגות
אם גם מספר החומרה וגם טקסט החומרה של OpenTelemetry מוגדרים, המערכת משתמשת במספר החומרה כדי לקבוע את רמת החומרה ב-Cloud Logging. אם רשומת ה-OTLP לא מכילה מידע על חומרת האירוע, רמת החומרה ב-Cloud Logging מוגדרת כ-
DEFAULT.אם רשומת OTLP מכילה מפתחות מאפיינים כפולים, המערכת שומרת את המפתח הראשון ומוחקת את המאפיינים עם המפתחות הכפולים.
המערכת ממירה למחרוזת את המאפיינים שמצורפים לרשומת יומן. לדוגמה, ראו השדה Labels.
שמות היומנים חייבים להיות בטוחים לשימוש בכתובות URL, אחרת הם מקודדים ככתובות URL במהלך ההטמעה. במאמר איך מוגדרים שדות
LogEntryמוסבר איך מוגדרים שמות של יומנים.
הגדרת Google Cloud Observability לשימוש במיפויים של הייצואן
ב-Google Cloud Observability וב Google Cloud מייצא ל-Cloud Logging משתמשים בכללים שונים כדי ליצור אובייקטים של LogEntry מנתוני יומנים בפורמט OTLP. לדוגמה, Google Cloud Observability מאכלס את השדה otel, אבל המייצאים לא.
אם אתם רוצים ש-Google Cloud Observability ישתמש באותם כללי מיפוי כמו של המייצאים, אתם צריכים לבצע את השינויים הבאים באפליקציות ששולחות רשומות של יומני OTLP ל-Telemetry API:
מוסיפים את המאפיין
gcp.use_legacy_mappingלמשאב שנכלל בבקשה. מידע נוסף זמין במאמר הוספה או מחיקה של מאפיינים.כשמגדירים את המאפיין הזה, קורים הדברים הבאים:
- השדה
otelלא מאוכלס. מאפיינים שמתחילים ב-
gcpנמחקים, חוץ מהמאפיינים הבאים:gcp.log.namegcp.insert_id
שני המאפיינים הקודמים ממופים לשדות של
LogEntry.
כלל המיפוי הקודם גורם ל-Google Cloud Observability למחוק חלק מהתוכן. עם זאת, הגודל של האובייקטים ב-
LogEntryקטן יותר.- השדה
מוסיפים למאגר ה-OTLP HTTP מעבדים שמגדירים את תוויות היומן הבאות:
-
instrumentation_scope: מוגדר לערךinstrumentation_scope.name. -
instrumentation_version: מוגדר לערךinstrumentation_scope.version. -
service.name: מוגדר לערךresource.attributes["service.name"]. -
service.namespace: מוגדר לערךresource.attributes["service.namespace"]. -
service.instance.id: מגדירים לערךresource.attributes["service.instance.id"].
לדוגמה, ראו מעבר למייצא OTLP: מעבדים.
-