מה זה Distributed Tracing?

מסלול מופץ הוא שיטה המשמשת לעקוב אחר בקשות ולבחון בקשות בזמן שהם נוסעים דרך מערכת מבוזרת.באדריכלות ללא שרת, בקשה למשתמש יחיד יכול לגרום פונקציות מרובות, API Gateway שיחות, שאילתות מסד נתונים ושירותים של צד שלישי. דיסטריוט מסמן מזהה ייחודי לכל בקשה ורשומות - יחידות עבודה - עבור כל פעולה לאורך כל פעולה.

מושג הליבה הוא פשוט: כל פרק נושא metadata כגון זמן התחלה, משך, מעמד, תגים אופציונליים או יומנים. מזהה עקבות הוא propagated על גבולות שירות, לעתים קרובות באמצעות ראשי HTTP או metadata הודעה, המאפשר את המסלול חזרה כדי לשחזר את הרצף המלא של אורכו של אורכו של אורכו של עתירות. OpenTelemetry, תקן עבור observability, מגדיר את המודלים ו- API עבור עקבות איסוף.

הבנת זרימת הבקשה חיונית לדה-התח, ניתוח ביצועים ותכנון יכולת.ללא הדבקה מבוזרת, מפתחים נותרים לנחש אילו תפקוד נכשל, היכן שעקב הכדאיות, או אם בעיה היא בקוד שלהם או תלות במורד הזרם.

למה להשתמש ב-APTIING ב- Serverless?

סביבות ללא שרת מציגות אתגרים ייחודיים עבור debugging.פונקציות הם קצרי-חיים, ללא מצב, ולעתים קרובות לרוץ במכלים מבודדים. כלי פיזור מסורתיים כמו נספח או זנב קובץ יומן אחד הופך לא מעשי.

  • (ב) ,0) ,סוף-סוף-סוף: חשיפה ל- End-to-end showFLT:1, מעבר לפונקציות, תורים, מסדי נתונים ו- APIs.
  • (ב) ויקרא י"ד: "ה', מ' א', מ', מ', מ', מ', ו''', ו''', ו'''', ו'''''''''', ו'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  • (FLT:0) ניתוח שורש-השורשים (FLT:1), במקום סריקות ידניות, ניתן לבדוק עקבות בודדים כדי לראות את השגיאה המדויקת ואת ההקשר שלה.
  • (ב) ,0) ,Performance בקבוק זיהוי של בקבוקוני: 1 (הפסקה 1) - נקודת מפנה אשר פונקציה או שיחות API היא הגורם לעקביות ביותר.
  • (ב) ראה אילו שירותים מתקשרים אחד עם השני וזיהוי שיחות בלתי צפויות או תקלות.

לדוגמה, לדמיין מערכת עיבוד הזמנה שנבנתה עם AWS Lambda, SQS, DynamoDB ו- API של צד שלישי תשלום.אם הזמנה נכשלת, עקבות יכולים להראות כי הכישלון התרחש במהלך שיחת התשלום ולחשוף כי API התשלום החזיר פסק זמן, תוך אימות כי האימות הקודם Lambda בוצע בהצלחה.

בנוסף, מסלול מבוזר מסייע בתכנון קיבולת ואופטימיזציה עלות.על ידי מעקב אחר בקשות בעלות גבוהה, אתה יכול להחליט אם להגדיל את ה- concurrency, תוצאות cache או אופטימיזציה קוד.

« « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « «

כל מערכת מבוזרת משתפת קבוצה משותפת של אבני בניין.הבנת אלה יעזור לך לעצב אסטרטגיה יעילה של כלי רכב.

  • (FLT:0)Trace IDIRLT:1 - מזהה ייחודי בעולם שהוקצה לשורה הראשונה של בקשה.זהה הוא מוסמך לכל שירות מטה הזרם, כך שכל התקופות הקשורות לאותו בקשה ניתן לקבץ יחד.
  • (FLT:0)SpanveFLT:1) מייצג יחידה אחת של עבודה בתוך עקבות.כל פרק יש זמן התחלה, משך, מעמד (בסדר, שגיאה), ותכונות אופציונליות (ערכת ערך מפתח זוגות) ואירועים (זמן עם הודעה).
  • (FLT:0) ,ContexteurFLT:1 - סט המזהים (זיהוי גזע, תעודת זהות, דגלי עקבות) כי יש להפיץ על פני גבולות שירות.הקשר זה מוזרק בדרך כלל לתוך ראשי HTTP (למשל, ראש "סבא" המוגדר על ידי W3C) או לתוך מטאנת מידע מעטפה.
  • (FLT:0)PropagatorFLT:1 - המנגנון שמוציא ומזרק את ההקשר מבקשות נכנסות ובקשות יוצאות. OpenTelemetry מספק מפיץ מובנה עבור HTTP, gRPC ופרוטוקולי הודעות.
  • (FLT:0)ExporterirFLT:1 - שליחתים השלימו את הסבבים לגיבוי לאחסון וניתוח.ends Common כוללים Jaeger, Zipkin, AWS X-Ray, Google Cloud Trace ו- Azure Monitor.

מסגרות רבות ללא שרת וספקי ענן מציעים סוכנים מתקדמים מנוהלים אשר מכשירים באופן אוטומטי את זמן הריצה. עם זאת, עבור לוגיקה עסקית אישית או לא HTTP טריגר (למשל, SQS, EventBridge), ייתכן שיהיה עליך ליצור באופן ידני ולנהל את הסבבים.

ביצוע דיסטריוט ב- Serverless

חקירה עם OpenTelemetry

OpenTelemetry הוא תקן קוד פתוח ביותר עבור observability.זה מספק ספריות לקוח עבור שפות תכנות פופולריות (Node.js, Python, Java, Go, .NET) ומשתלב בצורה חלקה עם החזרים אגנוסטיים בענן.

  1. התקן את חבילת ה- OpenTelemetry SDK ו- לייצוא בחבילת הפריסה של הפונקציה שלך.
  2. מיפוי ה- OpenTelemetry SDK בתחילת מנהל הפונקציה, בדרך כלל בבלוק ראשוניזציה גלובלי.
  3. צור אורך שורש עבור כל ייעוד הנכנס. עבור פונקציות HTTP-triggered, ראשי הבקשה הנכנסים מכילים קישור עקבות שיש לחלץ.
  4. עבור כל שיחת מטה הזרם (למשל, HTTP בקשה לשירות אחר, SDK קורא ל-DymoDB), ליצור פרק זמן של ילדים ולהזריק את ההקשר לטלטלטל.
  5. הפסק משתרע ברגע שהמבצע משלים שגיאות רישום, קודי סטטוס, ותכונות מותאמות אישית.
  6. היצוא משתרע על מנת לתקן מחדש מוגדר, השתמש יצואנית אצווה כדי להימנע מהשפעה על השקיפות.

OpenTelemetry תומך גם ב- Auto-intrumentation עבור ספריות נפוצות רבות (למשל, "express", "Saws-dk"), אשר יכול להפחית את העבודה ידנית.לדוגמה, ב- Node.js, באפשרותך להוסיף "@opentelemetry/intrument-https-intruation-" ל-"כל מכשיר ו-TP באופן אוטומטי.

תרגום לעברית עבור: Trace context

באדריכלות ללא שרת, לבקש זרימת קישורים לעתים קרובות חוצה פרוטוקולים שונים - HTTP, תורים סינכרוניים, אוטובוסים אירועים ופלטפורמות הזרמה. להפיץ קישור נכון בכל הגבולות האלה הוא קריטי.עבור HTTP, תקן W3C Trace context מגדיר את ראשי ה-"traceud" ו-"tracestate Headers".

ספקי ענן מציעים מנגנוני הפצה מקומיים.AWS X-Ray, למשל, באופן אוטומטי propagates לעקוב אחר הקשר עבור Lambda invocations, API Gateway ו- SDK קורא שירותים כגון DynamoDB ו-SQS אם אתה מאפשר X-Ray tracing. עם זאת, כאשר ערבוב רב-ספקי או קוד פתוח backends, ייתכן שתצטרך ליישם קידוד ידני באמצעות OpenTelemetryagators.

אסטרטגיות תזמון

לא כל בקשה צריכה להיות במעקב. יישומים גמישים ללא שרת יכולים לייצר מיליוני עקבות ביום, מה שמוביל לאחסון גבוה ועלויות. ליישם אסטרטגיה מפצה כדי לאזן את הנראות והעלות.

  • (FLT:0) samplingFreaLT:1) - להחליט בתחילת הבקשה אם לעקוב אחריו. השתמש בהסתברות (למשל 1% מכל הבקשות) או שיעור לימוזינה (למשל, 100 עקבות לדקה).
  • (FLT:0) samplingFreaLT:1 ; להקליט את כל התקופות באופן זמני ולאחר מכן לשמור באופן סלקטיבי על עקבות הקריטריונים מתאימים (למשל, שגיאות, עצלות גבוהה, מזהה משתמש ספציפי).
  • (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇

גישה נפוצה היא לשלב דגימה המבוססת על ראש עם מעבר שני לשגיאות.לדוגמה, מעקב אחר 5% מכל הבקשות ובאופן אוטומטי מעקב אחר 100% מהבקשות הנובעות מ-HTTP 5xx או טעות בתפקוד.רוב הסגת הסגירה מאפשרת לך להגדיר זאת ברמת היצוא.

כלים ופלטפורמות ל- Distributed Tracing in Serverless

פתח אתTelemetry

OpenTelemetry הוא תקן דה- Facto עבור יישומים כלי רכב.זה מספק SDKs, APIs ואספן שניתן לפרוס כשירות צד או עמידה.האספן הפתוח יכול לקבל פיסות ממקורות מרובים, לעבד אותם (למשל, אצווה, מסנן, דגימה), ולהייצא לכל החזר.

AWS X-Ray

AWS X-Ray הוא שירות מבוזר המשלב את שירותי AWS כמו Lambda, API Gateway, DynamoDB, SQS ועוד. for Lambda פונקציות, באפשרותך לאפשר X-Ray tracing עם תיבת בדיקה אחת בקונסולה או בתשתיות - כמו קוד X-Ray SDK עבור Lambda באופן אוטומטי ללכוד עקבות עבור יישומים נכנסים ו-AWSF: LTX-R.

X-Ray תומך גם בתת-קבוצות מותאמות אישית עבור שיחות לא-AWS או לוגיקה עסקית מותאמת אישית.השירות מספק מפת שירות, מעקב אחר ציר זמן ויכולות ניתוח.עם זאת, X-Ray מוגבל למערכת האקולוגית של AWS; אם יש לך ריבוי עננים או על רכיבי קדם-יסוד, פתרון פתוח יותר כמו OpenTelemetry עשוי להיות עדיפה.

Google Cloud Trace

Google Cloud Trace הוא שירות מתקדם עבור יישומים הפועלים ב-Google Cloud.It מתעד באופן אוטומטי בקשות HTTP לפונקציות של Google Cloud, Cloud Run ו- App Engine. for Cloud Functions, באפשרותך לאפשר חלוף דרך ממשק ה-Cloud Trace ולהשתמש בספריות לקוח ה- OpenTelemetry תואמים של Google Cloud.FLT:0Google Cloudce Documents 1LT:1FLT:1.

Azure Monitor

Azure Monitor מספק מסלול מבוזר באמצעות תובנות יישומים.עבור פונקציות Azure, תובנות יישומים ניתן להשתמש כסיומת, באופן אוטומטי ללכוד טלמטרי עבור HTTP טריגרים, אוטובוס שירות, ופעולות אחסון. OpenTelemetry גם תומך יצוא ל- Azure Monitor באמצעות יצואנית Openmetry.FLT:0Zonee מבוזרת מעקב מופץ tracLTFreatrated:1.

קוד פתוח מחזיר

אם אתה מעדיף את עוין עצמי או להימנע מ-Properted-in, קוד פתוח מחזיר כמו Jaeger ו- Zipkin הם אפשרויות מצוינות. הם יכולים לקבל עקבות באמצעות פרוטוקולים קנייניים OpenTelemetry או Jaeger. Jaeger מציע UI עבור מעקב וניתוח, יחד עם החזרי אחסון (Elasticsearch, Cassandra, Badger) הוא פשוט יותר ושילוב עם Bootanas עם תרחישים אחרים, עבור אחסון, עבור חנות גבוהה.

שיטות טובות יותר לאימון יעיל

  • (FLT:0)Propagate ההקשר בכל מקום ב- 1FLT) - ודא שכל שיחה יוצאת, בין אם HTTP, gRPC, הודעה תור, או אירוע, נושאת את הקשר החסר לשבור את שרשרת העמודים ומביסה את המטרה.
  • [ה] [ה]] [ה]] [ה]]] [השם] [ה] [ה]] [ה']'[ה']'[ה]']'[ה']'[ב]']'[ה']''''[ה']''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  • (FLT:0)Add עשיר תכונותFLT:1 - כולל metadata רלוונטי כגון מזהה משתמש, מזהה סדר, שיטת HTTP, קוד סטטוס או הודעת שגיאה.זה מאפשר סינון רב עוצמה וניתוח מאוחר יותר.
  • (FLT:0) אינטגרט עם כניסה ומדיקות FLT ( 1:1) - השתמש בתעודות זהות כדי לקשר עקבות ללוגים ומדיקים. כלים רבים מאפשרים לך לקפוץ מן עקבות לערכי יומן המקבילים עבור אותו מזהה בקשה.
  • (ב) [ה] [ה]] [ה]]], [ה], [ה], [ה], [ה]], [ה], [ה]]], [ה]]], צאו [התחילה] את שיעור הדגימה ככל שהתנועה גדלה.
  • (FLT:0) תהלוכה במהלך CI /CDIRLT:1) - כתוב בדיקות אינטגרציה המאמת את הקשר של עקבות הוא מועצמי כראוי, וכי טווחים נוצרים עבור מסלולים קריטיים.
  • (FLT:0)Use אימוץ דגימה מבוססת זנב לניתוח שגיאות אנליזה 1 - ודא כי כל עסקה שגיאה יש מעקב מלא, גם אם אתה משתמש דגימה מבוססת ראש עבור בקשות רגילות.

אתגרים ושיקולים

הופעות ו- Trace Overhead

קר מתחיל בפונקציות ללא שרת להוסיף שקיפות.השלמה את ה- SDK המסלול, בניית הארכה, וייצוא יכול להגדיל את זמן ההתחלה הקר.

  • ה- SDK מחוץ ל-Competr (בהיקף הגלובלי) כך שהוא פועל רק על הייעוד הראשון של מיכל חדש.
  • השתמש ב- SDKs קלים יותר או כלי דיסוציאציה של שירותי פרטיות נמוכה.
  • סוכני מעקב של ספקית נורמטיבית (למשל, AWS X-Ray daemon ניתן לאפשר ללא SDK overhead עבור שיחות AWS SDK).
  • שקול פונקציות טרום-הקרבה או באמצעות מטבע מבוזר זמני אם הוא עובר על ראש אינו מקובל על נתיבים רגישים לעקביות.

סוללות עבודה סינכרוניות

יישומים ללא שרת לעתים קרובות להסתמך על דפוסים סינכרוניים: SQS / SNS, EventBridge, Step Functions, או תורי הודעה. Tracing על פני גבולות סינכרוניים דורש טיפול מיוחד כי את הנישא לא יכול להיות רציף בזמן. השתמש במפיצים כי בזריקת הודעות לתוך כותרות וליצור פרק חדש עבור הצרכן המקשר בחזרה למפיקים.

פרטיות ורגישות נתונים

תכונות Trace עשויות להכיל נתונים רגישים (PII, אסימונים, סיסמאות) קידוד או תגובה אדומה ברמת ה- SDK או ב- OpenTelemetry איסוף.הימנע מגופים בקשת כניסה או פרמטרים של שאילתה המכילים נתונים אישיים. השתמש ב- ⁇ (למשל, hash) כאשר אתה צריך לקשור התנהגות המשתמש ללא חשיפת מזהה גולמי.

Cross-Account and Hybrid Environment

אם היישום חסר השרת שלך משתרע על מספר חשבונות AWS, Azure מנויים, או על מערכות premises, propaging קישור עקבות הופך מורכב יותר. השתמש מזהה ייחודי בעולם ולהבטיח כי קבלת שירותים להבין כיצד לחלץ ולקדם את ההקשר. OpenTelemetry של W3C-compliant â € ¢ â ¢ ¢ ¢ ¢ ¢ â ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ¢ ⁇ ¢ ⁇ ¢ ¢ ¢ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇

מסקנה

ניתוק מהמסלול הופך את הפעוט והאופטימיזציה של יישומים חסרי השרתים מתיבת black-box ניחושים משחק למדע מונע נתונים.על ידי הפעלת הפונקציות שלך עם OpenTelemetry, אימוץ כלים נורמטיביים בענן כמו AWS X-Ray, ולאחר שיטות הטובות ביותר עבור propagation, דגימה ואינטגרציה, אתה מקבל חשיפה עמוקה לכל בקשה זו מובילה לביצועים מהירים יותר, וחוויות יעילות יותר.

מאחר שהאדריכלות חסרת השרת ממשיכות לשלוט בפיתוח יישומים מודרני, שליטה על מסלול מבוזר אינה רק נחמד אל-ישבן - היא מיומנות בסיסית עבור כל מערכות גיבוש צוות.התחלות קטנות: כלי נקודת מוצא אחת קריטית, לאמת את השרידים מופיעים ב backend שבחרת, ולהרחיב בהדרגה.ההשקעה משלמת בחזרה את הפעם הראשונה שעוקבים חושפת את שורש הזמן המסתורי או במהירות פתאומית בשיעורי שגיאה.