slog של Go. כדי להתנסות בכלים האלה, אתם יכולים להוריד ולהריץ את אפליקציית Go לדוגמה, שיוצרת נתוני יומנים, מדדים ומעקב ומייצאת אותם לפרויקט ב-Google Cloud .
מידע על גישת המדידה
כשמשתמשים ב-OpenTelemetry Collector, מוסיפים לאפליקציה אינסטרומנטציה באמצעות ה-SDK והמייצא הפנימי של OTLP ב-SDK. הכלים האלה לא תלויים בספק. בנוסף, תפרסו אוסף OpenTelemetry שמקבל נתוני טלמטריה מהכלי לייצוא נתונים בתהליך, ואז מייצא את נתוני הטלמטריה האלה לפרויקט ב- Google Cloud . למידע נוסף על אוספים, ראו OpenTelemetry Collector שנוצר על ידי Google.
אם הסביבה שלכם תומכת בשימוש ב-OpenTelemetry Collector, מומלץ להשתמש בו כדי לייצא את נתוני הטלמטריה. בסביבות מסוימות, צריך להשתמש בייצוא בתהליך ששולח נתונים ישירות לפרויקט ב-Google Cloud . למידע על אינסטרומנטציה בתהליך, ראו מעבר ממייצא Trace לנקודת קצה של OTLP.
למידע נוסף על אינסטרומנטציה, אפשר לקרוא את המסמכים הבאים:
מידע על ההקשר
Context ב-OpenTelemetry הוא מנגנון להעברת ערכים בהיקף של ביצוע בין ממשקי API בתוך תהליך. אחד מהשימושים החשובים של הקשר הוא להעביר את הטווח הפעיל הנוכחי, כדי שיהיה אפשר לשנות אותו או להפנות אליו כהורה של טווחים חדשים כשיוצרים אותם. לסיכום:
הקשר מתייחס למנגנון להפצת ערכים ברמת הביצוע, כולל הטווח הפעיל הנוכחי, בין ממשקי API בתוך תהליך.
Span Context הוא אובייקט שלא ניתן לשינוי בכל span, שכולל את מזהה המעקב, מזהה ה-span, דגלים ומצב המעקב.
הפצה היא המנגנון שמעביר את ההקשר בין שירותים ותהליכים.
גם context.Context של ספריית Go הרגילה מעביר ערכים מוגדרים מראש מעבר לגבולות ה-API. בדרך כלל, פונקציות handler בשרת מקבלות Context נכנס ומעבירות אותו דרך שרשרת הקריאות לכל לקוח ששולח בקשות יוצאות.
הספרייה הרגילה של Go, context.Context, משמשת להטמעה של OpenTelemetry Context ב-Go.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים פרויקט ב- Google Cloud .
התפקידים שנדרשים כדי לבחור או ליצור פרויקט
- בחירת פרויקט: כדי לבחור פרויקט לא נדרש תפקיד IAM ספציפי – אתם יכולים לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד "יצירת פרויקטים" (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים?
-
יוצרים פרויקט ב- Google Cloud :
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של הפרויקט ב- Google Cloud שאתם יוצרים. -
בוחרים את הפרויקט שיצרתם ב- Google Cloud :
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את ממשקי ה-API של Cloud Logging, Cloud Monitoring, Cloud Trace ו-Telemetry, אם הם עדיין לא מופעלים:
התפקידים שנדרשים כדי להפעיל ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם אתם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםgcloud services enable logging.googleapis.com
monitoring.googleapis.com cloudtrace.googleapis.com telemetry.googleapis.com -
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים פרויקט ב- Google Cloud .
התפקידים שנדרשים כדי לבחור או ליצור פרויקט
- בחירת פרויקט: כדי לבחור פרויקט לא נדרש תפקיד IAM ספציפי – אתם יכולים לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד "יצירת פרויקטים" (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים?
-
יוצרים פרויקט ב- Google Cloud :
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של הפרויקט ב- Google Cloud שאתם יוצרים. -
בוחרים את הפרויקט שיצרתם ב- Google Cloud :
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את ממשקי ה-API של Cloud Logging, Cloud Monitoring, Cloud Trace ו-Telemetry, אם הם עדיין לא מופעלים:
התפקידים שנדרשים כדי להפעיל ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם אתם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםgcloud services enable logging.googleapis.com
monitoring.googleapis.com cloudtrace.googleapis.com telemetry.googleapis.com -
כדי לקבל את ההרשאות שדרושות בשביל שאפליקציית הדוגמה תכתוב נתוני יומנים, מדדים ומעקב, אתם צריכים לבקש מהאדמין לתת לכם את התפקידים הבאים ב-IAM:
- כתיבה ביומן (
roles/logging.logWriter) בפרויקט - כתיבת מדדי מעקב (
roles/monitoring.metricWriter) בפרויקט - כתיבת נתוני מעקב של Cloud Telemetry (
roles/telemetry.tracesWriter) בפרויקט - Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer) בפרויקט המכסה
ההרשאות האלה מספיקות אם מריצים את הדוגמה ב-Cloud Shell, במשאבי Google Cloud או בסביבת פיתוח מקומית. איך מגדירים פרויקט לצורכי מכסה
כדי לקבל את ההרשאות שדרושות לצפייה בנתוני היומנים, המדדים והמעקב, בקשו מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:
- צפייה ביומנים (
roles/logging.viewer) - צפייה במעקב (
roles/monitoring.viewer) - Cloud Trace User (
roles/cloudtrace.user)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
- כתיבה ביומן (
הוספת כלים לאפליקציה כדי לאסוף נתוני מעקב, מדדים ויומנים
כדי להגדיר את האפליקציה לאסוף נתוני מעקב ומדדים ולכתוב יומני JSON מובְנים לפלט סטנדרטי, פועלים לפי ההוראות הבאות, כפי שמתואר בקטעים הבאים במסמך הזה:
- הגדרת הפונקציה הראשית
- הגדרת OpenTelemetry
- הגדרת רישום ביומן של נתונים מובְנים
- הוספת אינסטרומנטציה לשרת ה-HTTP
- קישור בין טווחי מעקב לבין יומנים ומדדים
- הוספת אינסטרומנטציה לצד הלקוח ב-HTTP
- כתיבת יומנים מובְנים
הגדרת הפונקציה הראשית
כדי להגדיר את האפליקציה לכתוב יומנים מובְנים ולאסוף מדדים ונתוני מעקב באמצעות OpenTelemetry, מעדכנים את הפונקציה main כדי להגדיר את חבילת הרישום ביומן המובְנה של Go, slog, ולהגדיר את OpenTelemetry.
בדוגמת הקוד הבאה מוצגת פונקציה main שקוראת לשתי פונקציות עזר, setupLogging() ו-setupOpenTelemetry(). פונקציות העזר האלה מגדירות את חבילת הרישום ביומן ואת OpenTelemetry.
כדי לראות את הדוגמה המלאה, לוחצים על הלוגו של GitHub בסרגל הכלים של הדוגמה.
אחרי שמגדירים את חבילת הרישום ביומן, כדי לקשר את היומנים לנתוני המעקב צריך להעביר את Context של Go ל-logger. מידע נוסף מופיע בקטע כתיבת יומנים מובְנים במאמר הזה.
הגדרת OpenTelemetry
כדי לאסוף ולייצא נתוני מעקב ומדדים באמצעות פרוטוקול OTLP, צריך להגדיר את המכונות הגלובליות TracerProvider ו-MeterProvider.
בדוגמת הקוד הבאה מוצגת הפונקציה setupOpenTelemetry, שנקראת מהפונקציה main:
בדוגמת הקוד הקודמת, ה-TextMapPropagator הגלובלי מוגדר להשתמש בפורמט W3C Trace Context כדי להפיץ את הקשר המעקב. ההגדרה הזו מבטיחה שלטווחים יהיה קשר הורה-צאצא נכון בתוך המעקב.
כדי לוודא שכל נתוני הטלמטריה בהמתנה נמחקים ושהחיבורים נסגרים בצורה תקינה, הפונקציה setupOpenTelemetry מחזירה פונקציה בשם shutdown שמבצעת את הפעולות האלה.
הגדרת רישום מובנה ביומן
כדי לכלול את פרטי המעקב כחלק מהיומנים בפורמט JSON שנכתבים לפלט סטנדרטי, מגדירים את חבילת הרישום המובנה ביומן של Go, slog.
בדוגמת הקוד הבאה מוצגת הפונקציה setupLogging, שנקראת מהפונקציה main:
הקוד הקודם קורא לפונקציה handlerWithSpanContext, שמחלצת מידע מהמופע של Context ומוסיפה את המידע הזה כמאפיינים ליומן. אפשר להשתמש במאפיינים האלה כדי לקשר בין יומן למעקב:
-
logging.googleapis.com/trace: שם המשאב של המעקב שמשויך לרשומת היומן. -
logging.googleapis.com/spanId: מזהה הטווח בתוך המעקב שמשויך לרשומת היומן. -
logging.googleapis.com/trace_sampled: הערך של השדה הזה חייב להיותtrueאוfalse.
למידע נוסף על השדות האלה, ראו את המבנה של LogEntry.
הוספת אינסטרומנטציה לשרת ה-HTTP
כדי להוסיף אינסטרומנטציה של מעקב ומדדים לבקשות שמטופלות על ידי שרת ה-HTTP, משתמשים ב-OpenTelemetry. בדוגמה הבאה נעשה שימוש ב-handler של otelhttp כדי להפיץ את ההקשר ולאסוף נתוני מעקב ומדדים:
בקוד הקודם, ה-handler של otelhttp משתמש במופעים הגלובליים של TracerProvider, MeterProvider ו-TextMapPropagator. הפונקציה setupOpenTelemetry מגדירה את המכונות האלה.
קישור בין טווחי מעקב לבין יומנים ומדדים
כדי לקשר בין ה-spans של השרת והלקוח ולשייך מדדים ויומנים, מעבירים את המכונה של Go Context לבקשת ה-HTTP ול-logger.
בדוגמה הבאה מוצג handler של נתיב שמחלץ את המכונה של Go Context, ואז מעביר את המכונה הזו לרושם ביומן ולפונקציה callSingle, ששולחת בקשת HTTP יוצאת:
בקוד הקודם, בקשה להפעלת פונקציה r.Context() מאחזרת את ה-Context של Go מבקשת ה-HTTP.
הוספת אינסטרומנטציה לצד הלקוח ב-HTTP
כדי להוסיף את הקשר יומן המעקב לבקשות HTTP יוצאות ולהוסיף אינסטרומנטציה של יומן מעקב ומדדים, צריך להפעיל את הפונקציה otelhttp.Get.
בדוגמה הבאה, הפונקציה callSingle מבצעת את הפעולה הזו:
בקוד הקודם, ה-handler של otelhttp משתמש במופעים הגלובליים של TracerProvider, MeterProvider ו-TextMapPropagator. הפונקציה setupOpenTelemetry מגדירה את המכונות האלה.
כתיבת יומנים מובְנים
כדי לכתוב יומנים מובְנים שמקושרים למעקב, משתמשים בחבילת הרישום המובְנה ביומן של Go, slog, ומעבירים את המכונה של Go Context לרושם ביומן.
צריך את המכונה של Go Context כשרוצים לקשר בין יומן ל-span.
לדוגמה, ההצהרה הבאה מראה איך להפעיל את השיטה InfoContext בשביל slog, וממחישה איך להוסיף את השדה subRequests למכונה של JSON:
slog.InfoContext(r.Context(), "handle /multi request", slog.Int("subRequests", subRequests))
הפעלת אפליקציה לדוגמה שמוגדרת לאסוף נתוני טלמטריה
הכלים באפליקציה לדוגמה משתמשים בפורמטים ניטרליים, כמו JSON לנתוני יומנים ו-OTLP לנתוני מדדים ומעקב. ה-Collector של OpenTelemetry שולח נתוני יומנים ומדדים לפרויקט באמצעות מייצאים של Google. הוא שולח את נתוני המעקב לפרויקט באמצעות Telemetry API, שמשתמש ב-OTLP.
הכלי ליצירת עומס באפליקציה שולח בקשות לנתיבים של האפליקציה.
הורדה ופריסה של האפליקציה
כדי להריץ את הדוגמה:
-
מפעילים את Cloud Shell במסוף Google Cloud .
בחלק התחתון של מסוף Google Cloud יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.
משכפלים את המאגר:
git clone https://github.com/GoogleCloudPlatform/golang-samplesעוברים לספרייה של OpenTelemetry:
cd golang-samples/opentelemetry/instrumentationמפתחים ומריצים את הדוגמה:
docker compose up --abort-on-container-exitאם אתם לא מריצים את האפליקציה ב-Cloud Shell, אתם צריכים להריץ אותה כשמשתנה הסביבה
GOOGLE_APPLICATION_CREDENTIALSמצביע על קובץ פרטי הכניסה. Application Default Credentials מספק קובץ של פרטי כניסה ב-$HOME/.config/gcloud/application_default_credentials.json.# Set environment variables export GOOGLE_CLOUD_PROJECT="PROJECT_ID" export GOOGLE_APPLICATION_CREDENTIALS="$HOME/.config/gcloud/application_default_credentials.json" export USERID="$(id -u)" # Run docker compose -f docker-compose.yaml -f docker-compose.creds.yaml up --abort-on-container-exit
הצגת המדדים
האינסטרומנטציה של OpenTelemetry באפליקציה לדוגמה יוצרת מדדים של Prometheus שאפשר לראות באמצעות Metrics Explorer:
Prometheus/http_server_duration_milliseconds/histogramמתעד את משך הזמן של בקשות השרת ושומר את התוצאות בהיסטוגרמה.Prometheus/http_client_duration_milliseconds/histogramמתעד את משך הזמן של בקשות הלקוח ושומר את התוצאות בהיסטוגרמה.Prometheus/http_server_response_size_bytes_total/counterמתעד את אורך התגובה של הנתיבים/multiו-/singleב-HTTP. המדידות של המדד הזה הן מצטברות, כלומר כל ערך מייצג את הסכום הכולל מאז שהתחיל איסוף הערכים.
-
במסוף Google Cloud , נכנסים לדף leaderboard Metrics explorer:
אם אתם משתמשים בשורת החיפוש כדי למצוא את הדף הזה, בחרו בתוצאה שכותרת המשנה שלה היא Monitoring.
- בסרגל הכלים של מסוף Google Cloud , בוחרים את הפרויקט ב- Google Cloud . בהגדרות של App Hub, בוחרים את הפרויקט המארח של App Hub או את הפרויקט לניהול של התיקייה לניהול אפליקציות.
- ברכיב Metric, מרחיבים את התפריט Select a metric, מזינים
http_serverבסרגל הסינון ומשתמשים בתפריטי המשנה כדי לבחור את סוג המשאב הספציפי ואת המדד:- בתפריט Active resources בוחרים באפשרות Prometheus Target.
- בתפריט Active metric categories בוחרים באפשרות Http.
- בתפריט Active metrics בוחרים מדד.
- לוחצים על אישור.
כדי להוסיף מסננים שמסירים סדרות זמנים מתוצאות השאילתה, משתמשים ברכיב Filter.
- מגדירים את אופן התצוגה של הנתונים.
כשהמדידות של מדד מסוים הן מצטברות, הכלי Metrics Explorer מנרמל באופן אוטומטי את הנתונים שנמדדו לפי תקופת ההתאמה, וכתוצאה מכך בתרשים מוצג שיעור. למידע נוסף, ראו סוגים, טיפוסים והמרות.
כשמודדים ערכים של מספרים שלמים או ערכים כפולים, כמו בשני המדדים של
counter, הכלי Metrics Explorer מסכם באופן אוטומטי את כל סדרות הזמנים. כדי לראות את הנתונים של נתיבי ה-HTTP/multiו-/single, מגדירים את התפריט הראשון של הרשומה Aggregation לערך None.מידע נוסף על הגדרת תרשים זמין במאמר איך בוחרים מדדים כשמשתמשים ב-Metrics Explorer.
הצגת המעקבים
יכול להיות שיעברו כמה דקות עד שנתוני המעקב יהיו זמינים. לדוגמה, כשנתוני מעקב מתקבלים בפרויקט, יכול להיות ש-Google Cloud Observability יצטרך ליצור מסד נתונים כדי לאחסן את הנתונים האלה. יצירת מסד הנתונים יכולה להימשך כמה דקות, ובמהלך הזמן הזה אי אפשר לראות את נתוני המעקב.
כדי להציג את נתוני המעקב:
-
במסוף Google Cloud , נכנסים לדף
Trace explorer:
אפשר גם למצוא את הדף הזה באמצעות שורת החיפוש.
- בקטע הטבלה בדף, בוחרים שורה עם שם ה-span
/multi. בתרשים הגאנט שבחלונית Trace details, בוחרים את ה-span שמסומן בתווית
/multi.נפתח חלון שבו מוצג מידע על בקשת ה-HTTP. הפרטים האלה כוללים את השיטה, קוד הסטטוס, מספר הבייטים וסוכן המשתמש של מבצע הקריאה.
כדי לראות את היומנים שמשויכים למעקב הזה, בוחרים בכרטיסייה Logs & Events.
בכרטיסייה מוצגים יומנים נפרדים. כדי לראות את הפרטים של הרשומה ביומן, מרחיבים אותה. אפשר גם ללחוץ על View Logs ולצפות ביומן באמצעות Logs Explorer.
למידע נוסף על השימוש בדף Trace Explorer, קראו את המאמר חיפוש ועיון במעקבים.
הצגת רישומי היומן
ב-Logs Explorer אתם יכולים לבדוק את היומנים, וגם לראות את המעקבים שמשויכים אליהם, אם יש כאלה.
-
נכנסים לדף Logs Explorer ב- במסוף Google Cloud :
אם אתם משתמשים בשורת החיפוש כדי למצוא את הדף הזה, בחרו בתוצאה עם כותרת המשנה Logging.
מאתרים יומן עם התיאור
handle /multi request.כדי לראות את פרטי היומן, מרחיבים את הרשומה ביומן. בשדה
jsonPayloadיש רשומה עם התוויתsubRequests. הרשומה הזו נוספה על ידי הצהרה בפונקציהhandleMulti.לוחצים על
Traces ברשומת יומן עם ההודעה "handle /multi request", ואז בוחרים באפשרות View trace details.החלונית Trace details נפתחת ומוצג בה המעקב שנבחר.
יכול להיות שנתוני היומן יהיו זמינים כמה דקות לפני שנתוני המעקב יהיו זמינים. אם נתקלתם בשגיאה כשניסיתם להציג נתוני מעקב, בין אם חיפשתם מעקב לפי מזהה ובין אם פעלתם לפי השלבים במשימה הזו, המתינו דקה או שתיים ונסו שוב.
למידע נוסף על השימוש ב-Logs Explorer, קראו את המאמר הצגת יומנים באמצעות הכלי "מציג היומנים".
המאמרים הבאים
- OpenTelemetry
- מפרט OTLP
- רישום מובנה ביומן
- פתרון בעיות בשירות המנוהל ל-Prometheus
- פתרון בעיות ב-Cloud Trace