אתם יכולים להעביר אפליקציות Java, Go, Python ו-Node.js עם אינסטרומנטציה ידנית ממייצא של Google Cloud trace למייצא OpenTelemetry OTLP בתהליך. הייצוא של OTLP שולח נתוני מעקב ישירות ל-Telemetry (OTLP) API בפרויקט ב- Google Cloud באמצעות פרוטוקולי ייצוא נתמכים (gRPC או http/protobuf).
ההגדרה הזו מייצאת רק נתוני מעקב, והיא חלה רק על מייצאים בתהליך. אם האפליקציה משתמשת באספן של OpenTelemetry, קראו את המאמרים דוגמאות לאינסטרומנטציה שמבוססת על אספן ואספן OpenTelemetry שנוצר על ידי Google.
למה כדאי לעבור
ערכות ה-SDK של OpenTelemetry יוצרות נתוני יומנים, מדדים ומעקב בפורמט שתואם בדרך כלל לקובצי ה-proto שמוגדרים על ידי פרוטוקול OpenTelemetry. עם זאת, יכול להיות שהשדות יומרו מסוג נתונים ספציפי ל-OpenTelemetry לסוג נתונים של JSON לפני האחסון.
כשאפליקציה מייצאת את הנתונים האלה לפרויקט ב- Google Cloud באמצעות מייצא של Google Cloud , המייצא מבצע את הפעולות הבאות:
- המרת הנתונים שנאספו מפורמט OTLP לפורמט קנייני שמוגדר על ידי Cloud Logging API, Cloud Monitoring API או Cloud Trace API.
- שולח את הנתונים שעברו טרנספורמציה ל-API המתאים, ואז הם מאוחסנים בפרויקט ב- Google Cloud .
לגבי נתוני מעקב, מומלץ להעביר את האפליקציה לשימוש ב-Telemetry (OTLP) API כדי לייצא נתונים, כי הייצוא הזה לא דורש המרת נתונים. טרנספורמציה של נתונים עלולה לגרום לאובדן של חלק מהנתונים. לדוגמה, יכול להיות שבפורמט הקנייני יש מגבלות נמוכות יותר לשדות מסוימים, או שחלק מהשדות של OTLP לא ממופים לשדה בפורמט הקנייני.
דוגמיות זמינות
האפליקציות לדוגמה שמוזכרות בדף הזה זמינות ב-GitHub. רוב האפליקציות מוגדרות לייצא נתוני מעקב באמצעות gRPC, כלומר הן שולחות נתונים בקידוד protobuf בפורמט של gRPC דרך חיבורי HTTP/2. יש גם קוד לדוגמה לאפליקציות שמוגדרות לייצא נתוני מעקב כנתונים בקידוד protobuf דרך חיבורי HTTP:
-
האפליקציה לדוגמה מוגדרת לייצא נתוני מעקב כנתונים בקידוד protobuf דרך חיבורי HTTP. אם אתם מעדיפים להשתמש ב-gRPC, תוכלו להשתמש במכשור שבדוגמה הזו. עם זאת, צריך לשנות את מאפייני המערכת שבהם משתמש מודול ההגדרה האוטומטית. באפליקציה לדוגמה מצוין המייצא
http/protobuf. כדי להשתמש ב-gRPC, צריך לשנות את ההגדרה הזו ל-grpc.מומלץ להשתמש במודול OpenTelemetry SDK Autoconfigure כדי להגדיר את ה-SDK באפליקציות Java, כמו האפליקציה לדוגמה.
אפליקציית Go שמשתמשת ב-gRPC ואפליקציית Go שמשתמשת ב-HTTP
יש שני מאגרי Go. במאגר אחד, האפליקציה לדוגמה משתמשת ב-gRPC. הדוגמה במאגר השני משתמשת בנתונים בקידוד protobuf דרך חיבורי HTTP.
-
המאגר הזה מכיל שתי דוגמאות, אחת ל-gRPC ואחת שמשתמשת בנתונים בקידוד protobuf דרך חיבורי HTTP.
-
המאגר הזה מכיל שתי דוגמאות, אחת ל-gRPC ואחת שמשתמשת בנתונים בקידוד protobuf דרך חיבורי HTTP.
לפני שמתחילים
לפני שמעבירים את האפליקציה לשליחת נתוני מעקב לנקודת הקצה של OTLP, צריך להפעיל את Telemetry API ולוודא שקיבלתם את התפקידים הנדרשים בניהול זהויות והרשאות גישה (IAM). יכול להיות שתצטרכו גם להקצות תפקידי IAM לחשבון שירות.
הפעלת החיוב וה-Telemetry API
- נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Telemetry, Cloud Logging, Cloud Monitoring, and Cloud Trace APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Telemetry, Cloud Logging, Cloud Monitoring, and Cloud Trace APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.
הגדרת ההרשאות
-
כדי לוודא שלחשבון השירות שהאפליקציה משתמשת בו יש את ההרשאות הנדרשות לכתיבת נתוני יומנים, מדדים ומעקב, בקשו מהאדמין להקצות לחשבון השירות את תפקידי ה-IAM הבאים:
- כתיבה ביומן (
roles/logging.logWriter) בפרויקט - כתיבת מדדי מעקב (
roles/monitoring.metricWriter) בפרויקט - כתיבת נתוני מעקב של Cloud Telemetry (
roles/telemetry.tracesWriter) בפרויקט - Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer) בפרויקט המכסות
איך מגדירים פרויקט לצורכי מכסה
למידע נוסף על Application Default Credentials (ADC), קראו את המאמרים הסבר על Application Default Credentials והגדרת Application Default Credentials (ADC) לסביבת פיתוח מקומית.
- כתיבה ביומן (
-
כדי לקבל את ההרשאות שדרושות לצפייה בנתוני היומנים, המדדים והמעקב, בקשו מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:
- צפייה ביומנים (
roles/logging.viewer) - צפייה במעקב (
roles/monitoring.viewer) - Cloud Trace User (
roles/cloudtrace.user)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
- צפייה ביומנים (
מדריך להעברת נתונים (מיגרציה) לצורך הטמעה ידנית
בקטע הזה מוסבר איך לשנות את האפליקציה כדי לשלוח את נתוני המעקב לפרויקט ב- Google Cloud באמצעות Telemetry API.
הוספת יחסי תלות
השלב הראשון הוא להוסיף לאפליקציה יחסי תלות של מייצא המעקב של OTLP ב-OpenTelemetry. בוחרים את גרסאות התלות שמתאימות לאפליקציה ולמערכת ה-build.
Java
באפליקציית Java, מוסיפים את יחסי התלות הבאים לסקריפט build.gradle:
המשך
בקטע הזה מוסבר אילו שינויים צריך לבצע ביחסי התלות כשמשתמשים ב-gRPC לייצוא. אם אתם משתמשים בנתונים בקידוד protobuf בחיבורי HTTP לצורך ייצוא, צריך לכלול את החבילה otlptracehttp כתלות. למידע נוסף, קראו את המאמר אפליקציית Go שמשתמשת ב-HTTP.
באפליקציית Go שמשתמשת ב-gRPC לייצוא, מעדכנים את הקובץ go.mod כך שיכלול את התלות הבאה:
Python
בקטע הזה מוסבר אילו שינויים צריך לבצע ביחסי התלות כשמשתמשים ב-gRPC לייצוא. אם אתם משתמשים בנתונים בקידוד protobuf דרך חיבורי HTTP לצורך ייצוא, אתם צריכים לכלול את החבילה opentelemetry-exporter-otlp-proto-http כדרישה. מידע נוסף זמין במאגר Python.
באפליקציית Python שמשתמשת ב-gRPC לייצוא, צריך להתקין את יחסי התלות הבאים או לעדכן את הקובץ requirements.txt:
Node.js
בקטע הזה מוסבר אילו שינויים צריך לבצע ביחסי התלות כשמשתמשים ב-gRPC לייצוא. אם אתם משתמשים בנתונים בקידוד protobuf דרך חיבורי HTTP לייצוא, צריך לכלול את החבילה @opentelemetry/exporter-trace-otlp-proto כתלות. מידע נוסף זמין במאמר אפליקציית Node.js.
באפליקציית Node.js שמייצאת נתוני מעקב באמצעות gRPC, מוסיפים את יחסי התלות הבאים:
"@opentelemetry/exporter-trace-otlp-grpc": "0.221.0",
"@grpc/grpc-js": "1.14.4"
החלפת השימוש במייצאים של Google Cloud במייצאים של OTLP
מעדכנים את קוד האפליקציה כך שערכת ה-SDK של OpenTelemetry תוגדר להשתמש במייצאים של OpenTelemetry OTLP במקום במייצא של Google Cloud trace. השינויים הנדרשים הם ספציפיים לשפה.
Java
באפליקציית Java, מבצעים את הפעולות הבאות:
מוסיפים את הצהרות הייבוא הבאות:
מעדכנים את קוד האפליקציה כך שישתמש במודול OpenTelemetry SDK Autoconfigure כדי להגדיר את ה-SDK:
מגדירים את מאפייני המערכת שבהם מודול ההגדרה האוטומטית משתמש בזמן הריצה. המודול הזה משתמש במאפיינים האלה כדי להפעיל את ה-SDK. אפשר גם להשתמש במשתני סביבה במקום במאפייני מערכת. מידע נוסף זמין במאמר משתני סביבה ומאפייני מערכת.
באפליקציה לדוגמה, מאפייני המערכת מוגדרים בסקריפט
build.gradle:בנוסף, מעבירים את ההגדרות כארגומנטים של JVM:
אם אתם מעדיפים לייצא נתוני מעקב באמצעות gRPC, הגדירו את פרוטוקול OTLP ל-
grpcבמקום ל-http/protobuf.
המשך
בקטע הזה מוסבר אילו שינויים צריך לבצע כשמשתמשים ב-gRPC לייצוא. אם אתם משתמשים בנתונים בקידוד protobuf דרך חיבורי HTTP לייצוא, אתם צריכים לייבא את החבילה otlptracehttp וגם להגדיר את הייצוא עם האפשרויות המתאימות. מידע נוסף זמין במאמר אפליקציית Go שמשתמשת ב-HTTP.
באפליקציית Go שמשתמשת ב-gRPC לייצוא, מוסיפים את הצהרות הייבוא הבאות:
בנוסף, מעדכנים את קוד האתחול כדי להגדיר את TraceProvider עם המייצא של gRPC:
Python
בקטע הזה מוסבר אילו שינויים צריך לבצע כשמשתמשים ב-gRPC לייצוא. אם אתם משתמשים בנתונים בקידוד protobuf דרך חיבורי HTTP לצורך ייצוא, אתם צריכים לייבא מהחבילה opentelemetry.exporter.otlp.proto.http וגם להגדיר את הייצוא עם האפשרויות המתאימות. מידע נוסף זמין במאגר Python.
באפליקציית Python שמשתמשת ב-gRPC לייצוא, מוסיפים את הייבוא הבא:
בנוסף, מעדכנים את קוד האתחול כדי להגדיר את TraceProvider עם המייצא של gRPC:
Node.js
בקטע הזה מוסבר אילו שינויים צריך לבצע כשמשתמשים ב-gRPC לייצוא. אם אתם משתמשים בנתונים בקידוד protobuf דרך חיבורי HTTP לייצוא, אתם צריכים לייבא את החבילה @opentelemetry/exporter-trace-otlp-proto.
מידע נוסף זמין במאמר אפליקציית Node.js.
באפליקציית Node.js שמשתמשת ב-gRPC לייצוא, מוסיפים את הייבוא הבא:
בנוסף, מעדכנים את קוד האתחול כדי להגדיר את TraceProvider עם המייצא של gRPC:
הגדרת אימות
אחרי השינויים הקודמים בהגדרות של OpenTelemetry SDK, האפליקציה מוגדרת לייצא נתוני מעקב באמצעות מייצאים של OpenTelemetry OTLP, באמצעות gRPC או HTTP. בשלב הבא, צריך להגדיר את המייצאים כך שישלחו את נתוני המעקב לפרויקט ב- Google Cloud .
כדי להגדיר אימות, מבצעים את הפעולות הבאות:
- הגדרת כותרות אימות לקריאות הייצוא.
- מגדירים את מאפייני המשאבים הנדרשים של OpenTelemetry ואת כותרות ה-OTLP.
- מגדירים את נקודת הקצה של הייצוא.
בקטע הזה מפורט כל אחד מהשלבים האלה.
הגדרת כותרות אימות לקריאות הייצוא
כדי להגדיר את המייצא עם Application Default Credentials (ADC) של Google Cloud, צריך להוסיף ספריית Google Auth ספציפית לשפה.
Java
באפליקציית Java שמשתמשת במודול OpenTelemetry SDK Autoconfigure, מומלץ להשתמש גם בתוסף Google Cloud Authentication.
המשך
באפליקציית Go שמשתמשת ב-gRPC לייצוא, מעדכנים את הקובץ go.mod כך שיכלול את התלות הבאה:
באפליקציית Go שמשתמשת ב-HTTP לייצוא, מעדכנים את הקובץ go.mod כך שיכלול את התלות הבאה:
Python
באפליקציית Python, מוסיפים את יחסי התלות הבאים לקובץ requirements.txt:
Node.js
באפליקציית Node.js, מוסיפים את יחסי התלות הבאים:
"google-auth-library": "10.5.0"
בשלב הבא, מעדכנים את קוד האפליקציה שיוצר את מייצא הטווחים של OTLP, כך שהוא יוסיף לכותרות את אסימוני ההרשאה שאוחזרו מהספרייה. השלב הזה הוא ספציפי לשפה, אבל ההטמעה דומה בכל השפות.
Java
אם יש לכם אפליקציית Java שמשתמשת במודול OpenTelemetry SDK Autoconfigure ובתוסף Google Cloud Authentication, אתם לא צריכים לבצע שלבים מיוחדים במהלך ההפעלה של האפליקציה. המודול autoconfigure מבצע באופן אוטומטי את השלבים הנדרשים להגדרת ADC.
המשך
בקטע הזה מוסבר אילו שינויים צריך לבצע כשמשתמשים ב-gRPC לייצוא. אם אתם משתמשים בנתונים בקידוד protobuf בחיבורי HTTP לצורך ייצוא, אתם צריכים לייבא את החבילה otlptracehttp ולהגדיר את המייצא כאובייקט otlptracehttp. מידע נוסף זמין במאמר אפליקציית Go שמשתמשת ב-HTTP.
באפליקציית Go שמשתמשת ב-gRPC לייצוא, מוסיפים את הצהרות הייבוא הבאות:
בנוסף, צריך לעדכן את קוד האתחול כדי להגדיר את ADC לפני שיוצרים מופע של מייצא ה-gRPC:
Python
בקטע הזה מוסבר אילו שינויים צריך לבצע כשמשתמשים ב-gRPC לייצוא. אם אתם משתמשים בנתונים בקידוד protobuf דרך חיבורי HTTP לצורך ייצוא, השתמשו בפרטי הכניסה שמוגדרים כברירת מחדל. צריך גם להעביר את פרטי הכניסה האלה כשיוצרים מופע של BatchSpanProcessor. מידע נוסף זמין במאגר Python.
באפליקציית Python שמשתמשת ב-gRPC לייצוא, מוסיפים את הייבוא הבא:
בנוסף, צריך לעדכן את קוד האתחול כדי להגדיר את ADC לפני שיוצרים מופע של מייצא ה-gRPC:
Node.js
בקטע הזה מוסבר אילו שינויים צריך לבצע כשמשתמשים ב-gRPC לייצוא. אם אתם משתמשים בנתונים בקידוד protobuf דרך חיבורי HTTP לצורך ייצוא, השינויים שאתם צריכים לבצע שונים קצת מאלה שמתוארים כאן.
מידע נוסף זמין בקובץ app-http-proto-export.ts שכלול באפליקציית Node.js.
באפליקציית Node.js שמשתמשת ב-gRPC לייצוא, מוסיפים את הייבוא הבא:
בנוסף, צריך לעדכן את קוד האתחול כדי להגדיר את ADC לפני שיוצרים מופע של מייצא ה-gRPC:
הגדרת מאפייני המשאבים הנדרשים של OpenTelemetry
מוסיפים למשתנה הסביבה OTEL_RESOURCE_ATTRIBUTES את צמד המפתח/ערך שמציין את הפרויקט. בשדה המפתח, מזינים gcp.project_id.
בשדה הערך, משתמשים במזהה של הפרויקט ב- Google Cloud .
דוגמה:
export OTEL_RESOURCE_ATTRIBUTES="gcp.project_id=PROJECT_ID"
אם אתם משתמשים ב-Java ומגדירים את האפליקציה כך שתשתמש בתוסף האימות של Google Cloud, כמו באפליקציית Java לדוגמה, אתם לא צריכים להגדיר את מזהה הפרויקט כחלק ממאפייני המשאבים של OpenTelemetry. עם זאת, הגדרת המאפיין הזה לא תגרום נזק.
למידע נוסף על משתני סביבה של OpenTelemetry, ראו הגדרת SDK כללית.
הגדרת מזהה הפרויקט לצורכי מכסה
הפרויקט לצורך חיוב במכסה הוא הפרויקט ב- Google Cloud שבו מתבצע מעקב אחרי השימוש בבקשות API. מכיוון ש-Telemetry API הוא API מבוסס-לקוח, אופן האימות קובע אם הפרויקט לצורך חיוב במכסה מזוהה באופן אוטומטי. לדוגמה, לא צריך לציין את הפרויקט לחיוב על מכסות כשמשתמשים בחשבון שירות לאימות. עם זאת, צריך לציין את הפרויקט לחיוב על מכסות כשמשתמשים בפרטי הכניסה של המשתמש לצורך אימות.
אפשר להגדיר פרויקט לצורכי חיוב באמצעות משתנה סביבה. כדי לקבוע איזה משתנה סביבה להגדיר לשפת התכנות שלכם, קראו את המאמר הגדרת פרויקט המכסות באמצעות משתנה סביבה.
לדוגמה, ב-Go אפשר להגדיר את פרויקט המכסות באופן הבא:
export GOOGLE_CLOUD_QUOTA_PROJECT="QUOTA_PROJECT_ID"
למידע על פתרון שגיאות אימות, ראו פרטי הכניסה של משתמשים לא פועלים.
הגדרת נקודת הקצה של הייצוא
מגדירים את הערך של משתנה הסביבה OTEL_EXPORTER_OTLP_ENDPOINT לנקודת הקצה של OTLP בשביל Google Cloud.
דוגמה:
export OTEL_EXPORTER_OTLP_ENDPOINT=https://telemetry.googleapis.com
אם אתם משתמשים ב-Java ובמודול ההגדרה האוטומטית, אתם יכולים להגדיר את נקודת הקצה של הייצוא באמצעות מאפייני המערכת, כמו באפליקציית Java לדוגמה. לא צריך להגדיר את משתנה הסביבה של הייצוא בשביל ההגדרה הזו.
למידע נוסף על משתני סביבה של OpenTelemetry, ראו הגדרת SDK כללית.