במאמר הזה מוסבר איך Google Cloud Observability קובע את השדות של LogEntry מתוך רשומת יומן OTLP, כשהרשומה הזו נשלחת אל Google Cloud באמצעות Telemetry API.
הייצואנים Google Cloud של Cloud Logging ממירים נתוני יומנים בפורמט OTLP לאובייקטים של LogEntry. לאחר מכן הם שולחים את הנתונים האלה לפרויקט שלכם ב- Google Cloud באמצעות Cloud Logging API. עם זאת, כללי ברירת המחדל שבהם משתמשים Google Cloud Observability וה-exporters כדי ליצור רשומות ביומן שונים. מידע נוסף זמין במאמר בנושא הגדרת 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 זמין ב-OpenTelemetry logs.proto.
איך מוגדרים השדות של LogEntry
מערכת Google Cloud Observability משתמשת בכללים הבאים כדי לקבוע את הערכים של השדות LogEntry:
השדה LogEntry(שמות מהפניה ל-HTTP) |
איך המערכת קובעת את ערך השדה |
|---|---|
logName |
המערכת משתמשת בערך של השדה
שמות היומנים צריכים להיות בפורמט שמתאים לכתובות URL, אחרת הם מקודדים בפורמט URL במהלך ההטמעה. |
resource |
המערכת משתמשת במידע שמוגדר בשדה resource או מסיקה את המשאב. פרטים נוספים זמינים במאמר בנושא מיפוי מאפייני OTLP לסוג משאב. |
timestamp |
המערכת משתמשת ברשימה הבאה של שדות ברשומת יומן OpenTelemetry, לפי סדר עדיפויות, כדי לקבוע את
תקופת השמירה של קטגוריה ביומן שבה הנתונים מאוחסנים קובעת את חותמת הזמן הכי ישנה שאפשר להטמיע. מידע נוסף זמין במאמר בנושא מכסות ב-Cloud Logging. |
receiveTimestamp |
השעה שמוגדרת היא השעה שבה המידע על LogEntry נקלט. |
severity |
המערכת ממפה את רמת החומרה של OpenTelemetry ברשומה ביומן לרמת חומרה ב-Cloud Logging. פרטים נוספים מופיעים במאמר בנושא השדה 'חומרה'. |
httpRequest |
המערכת ממפה את המאפיינים |
labels |
המערכת מגדירה את השדה הזה באמצעות ערכי המאפיינים של רשומת היומן. מידע נוסף זמין במאמר בנושא שדה התוויות. |
trace |
המערכת מגדירה את השדה הזה לערך מהשדה traceId ברשומה של היומן. הערך חייב להיות מחרוזת הקסדצימלית חוקית באורך 32 תווים, אחרת הרשומה תידחה. |
spanId |
המערכת מגדירה את השדה הזה לערך מהשדה spanId ברשומה של היומן. הערך חייב להיות מחרוזת הקסדצימלית תקינה באורך 16 תווים, אחרת הרשומה תידחה. |
traceSampled |
המערכת מגדירה את השדה הזה על סמך הביט הכי פחות משמעותי מהשדה flags ברשומה של היומן. אם הביט הכי פחות משמעותי שווה ל-1, השדה הזה מוגדר ל-true. אחרת, הוא לא מוגדר. |
sourceLocation |
המערכת מגדירה את השדה הזה לערכים ממאפייני הקוד של רשומת היומן. מידע נוסף זמין במאמר בנושא השדה SourceLocation. |
split |
לא מוגדר. |
apphubapphubDestinationapphubSource |
לא מוגדר. |
otel |
בשדות בנתוני יומן OTLP שאין להם שדה מקביל ב-LogEntry, המערכת ממירה את סוגי הנתונים ואז מוסיפה את הנתונים המומרים לשדה otel. מידע נוסף זמין במאמר בנושא שדה Otel. |
operation |
המערכת ממפה את המאפיינים |
| 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 |
bool |
cacheHit |
httpRequest.cacheHit |
bool |
cacheValidatedWithOriginServer |
httpRequest.cacheValidatedWithOriginServer |
bool |
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 |
bool |
gcp.http_request {cacheHit}http_request {cacheHit}
|
httpRequest.cacheHit |
bool |
gcp.http_request {http_request {
|
httpRequest.cacheValidatedWithOriginServer |
bool |
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 |
bool |
last |
last |
bool |
שדה Otel
בשדות בנתוני יומן OTLP שאין להם שדה מקביל ב-
LogEntry, המערכת ממירה את סוגי הנתונים ואז מוסיפה
את הנתונים המומרים לשדה otel. לדוגמה, בשדה otel מאוחסנים מאפיינים מהשדות resource, scope ו-entity.
המערכת משתמשת בכללים הבאים כדי להמיר את סוגי הנתונים של OpenTelemetry לסוגי protobuf Value:
| סוג OpenTelemetry | סוג protobuf |
|---|---|
string |
string |
boolean |
bool |
integer |
double |
float |
double |
Array |
ListValues |
KeyValueList |
Struct |
כדי להימנע משגיאות של דיוק כפול, צריך להעביר מספרים שלמים כמחרוזות.
שדה מטען ייעודי (payload)
סוג הנתונים של השדה OTLP logRecord.body קובע את המבנה של מטען הייעודי (payload) LogEntry:
string: המערכת מעתיקה את המחרוזת לשדהLogEntry.textPayload.
Array: המערכת יוצרת מחרוזת של רכיבי המערך תוך שמירה על שורות חדשות. אחר כך המערכת מעתיקה את המחרוזת לשדהLogEntry.textPayload.
KeyValueList: המערכת ממירה את הזוגות האלה ל-JSON ואז מאכלסת את השדהLogEntry.jsonPayload, עם ההגבלות הבאות:- כשרישום OTLP מכיל מפתחות מאפיינים כפולים, המערכת שומרת את המפתח הראשון ומשליכה מאפיינים עם מפתחות כפולים.
- אם עומק ההיררכיה של זוג JSON גדול מחמש, המערכת חותכת את התוכן לעומק של חמש.
שדה מידת החומרה
בקטע הזה מוסבר איך Google Cloud Observability ממפה את שדות החומרה של OpenTelemetry לרמות החומרה של Cloud Logging.
ב-OpenTelemetry מוגדרים מספר חוּמרה וטקסט חוּמרה. המספרים שמגדירים את רמת החומרה מופיעים בתוך התג logs.proto.
Google Cloud Observability קובע את רמת החומרה של הרישום ביומן מתוך מספר רמת החומרה של OpenTelemetry, אם הוא מוגדר. אחרת, נעשה שימוש בטקסט של רמת החומרה. אם אף אחת מההגדרות לא מוגדרת, רמת החומרה של הרישום מוגדרת ל-DEFAULT.
| מספר חומרת הבעיה ב-OpenTelemetry Enum (value) |
טקסט חומרת הבעיה ב-OpenTelemetry (הבדיקות לא תלויות-רישיות) |
רמת החומרה ב-Cloud Logging Enum (value) |
|---|---|---|
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 ממפה את הקוד של 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. מגבלה. |
| העומק המקסימלי של קינון מאפיינים | 5 | מאפיינים שחורגים מהמגבלה הזו מקוצרים כשממירים את רשומת היומן של OTLP ל-LogEntry. |
| מספר הבייטים המקסימלי של נתוני יומן שמועברים לדקה | 2.4 GB באזורים הבאים: 300 MB לכל שאר האזורים. |
מכסה. |
התנהגות
אם מוגדרים גם מספר החומרה וגם טקסט החומרה של OpenTelemetry, המערכת משתמשת במספר החומרה כדי לקבוע את רמת החומרה של Cloud Logging. אם רשומת OTLP לא מכילה פרטי חומרה, רמת החומרה ב-Cloud Logging מוגדרת ל-
DEFAULT.כששיא OTLP מכיל מפתחות מאפיינים כפולים, המערכת שומרת את המפתח הראשון ומשליכה את המאפיינים עם המפתחות הכפולים.
המערכת ממירה מאפיינים שמצורפים לרשומה ביומן למחרוזת. דוגמה מופיעה בקטע שדה התוויות.
שמות היומנים צריכים להיות בפורמט שמתאים לכתובות URL, אחרת הם יקודדו בקידוד URL במהלך ההטמעה. מידע על הגדרת שמות היומנים זמין במאמר בנושא הגדרת שדות
LogEntry.
הגדרת Google Cloud Observability לשימוש במיפויים של כלי הייצוא
Google Cloud Observability וה Google Cloud exporter ל-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: מעבדים.
-