חוסר יכולת של Observability ו ניטור במערכות מבוזרות מודרניות

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

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

מעקב מול חוסר אחריות: יותר מאשר סמנטיקה

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

מה זה מעקב?

המעקב הוא הנוהג של איסוף, הדמיה, ואזהרה על מדדים ולוגים מוגדרים מראש: "האם המערכת שלי עובדת כפי שמצופה?", מעקב מבוסס בדרך כלל על מצבי כישלונ ידועים.לדוגמה, ייתכן שתקבע לוח מחוונים המציגים ניצול CPU, בקשה לעקביות, ושיעורי השגיאה על פני המיקרו-שירות שלך, יחד עם התראות כי כאשר הם מפרשים זה מעקב אחר זה קורה:

מה זה Observability?

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

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

העמודים של הקרן: Metrics, Logs ו- Tracess

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

שם מקור: The Quantitative Review

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

(ב) באדריכלות מבוזרת, בחירה זהירה של מדדים היא חיונית להתמקד ב"ארבעת אותות זהב" כפי שממליץ על ידי ספר SRE של גוגל:0latencyFLT:1 (זמן לשרת בקשה), כפל:2trafficFLT 3: (הביקוש למערכת), LT:4 LT50% (בקשות) ו-Faturation) עבור שירות מלא (Lertial) אם אתה יכול לבדוק את השירות המלא (Lertation)

מקור: The Source of Context

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

שיטות הטובות ביותר עבור כניסה כוללות: באמצעות פורמטים מובנה (למשל, JSON) עבור קלת מכונה parsing; כולל מזהה ייחודי של עקבות בכל כניסה; כניסה ברמות המתאימות (ERROR, WARN, INFO, DEBUG); והימנעות מהנתונים הרגישים כמו FLT:0Elasticsearch, Logashst, ו-Kana (EL)Fura (L) LTG) הם פופולריים עבור מעבדות Loggana או מרכזי עבור Loggized.

תוצאות: בעקבות מסע הבקשה

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

OpenTelemetry התפתחה כסטנדרט התעשייה עבור איסוף כלי רכב ועיבוד.הרבה רצף של מסילות כמו Jaeger, Zipkin, או Grafana Tempo יכול לאחסן ולשאילתת עקבות בנפח גבוה. Traces הם בעלי ערך במיוחד עבור microservices, פונקציות השרתים, וכל אדריכלות עם תקשורת בין שירות על רשתות.

אתגרים ייחודיים של מערכות Distributed

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

רשת Latency and Partial כשלים

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

חוסר נקודת שליטה אחת

מערכות מבוזרות אין ערימה אחת של זמן ריצה כדי לבדוק.המדינה מתפשטת על פני מסדי נתונים, צ'יפים, תורי הודעה ושירותים לרוץ במיכלים שונים, VMs, או אפילו עננים. מהנדס לא יכול לצרף מבוקש למערכת כולה. Observability מספק את הנוף המאוחד הדרוש כדי לשחזר את מה שקרה בכל הרכיבים.comized , משולבת עם תג עקבי (למשל, שם שירות), כדי להפוך את הסביבה.

התקפה מוגברת על פני השטח עבור כישלונות מקיפים

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

תשתיות נבואה

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

שיטות טובות ביותר עבור מערכות דיסטריוטות

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

מוקדם ועמום

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

אימוץ כלי רכב וסטנדרטים בלתי חוקיים

(הופנה מהדף ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇

עיצוב התראה משמעותית

עייפות אזהרה היא איום אמיתי.הימנעות מהאזהרה על כל סטייה קטנה במקום, להתמקד באזהרות על הסימפטומים הדורשים התערבות אנושית, כגון שיעורי שגיאה מוגברת, p99 פרצות לב, או משיכה ליד יכולת. השתמש באזהרות מרובות תנאים המשלבים אותות משירותים שונים כדי להפחית את החיובים השקריים. לדוגמה, אם שיעור השגיאה עולה על 5% ומשתנה למשך 5 דקות, אך רק אם התנועה אינה יכולה להצביע על כלי נמוך (למשל, כלומר: 0.

אדריכלות: Chaos Engineering

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

להשקיע בתרבות ולנהל ספרים

כלי לבד אינו מספיק.מדריך תרבות שבה כל מפתח אחראי לבריאות של השירותים שלהם ויכול להשתמש בכלים של observability כדי debug בעיות. לספק הכשרה על קריאת עקבות, בניית שאילתות, ושימוש בפאנלים. נהלים סטנדרטיים של מסמכים (ספרי לימוד) לתרחישים משותפים - לדוגמה, "איך לחקור שקיפות גבוהה בשירות" - ולקשר אותם התראות.

השפעה עולמית: מקרה

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

לאחר יישום מופץ מסלול עם OpenTelemetry, הם גילו כי שירות זיהוי הונאה לעתים עשה שיחות HTTP איטי ל- API של משרד אשראי חיצוני. כאשר API חיצוני זה היה איטי, התגובה של שירות זיהוי הונאה לקח יותר זמן של שירות התשלום (למשל 500ms) זה גרם שירות התשלום כדי לבטל את העסקה ולהחזיר שגיאה, למרות שהתשלום בפועל היה מורשה באופן פנימי עקבות הנימוק בבירור כי הוא נשאר קשה עבור פרק זמן השבתה.

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

פלטפורמות שמירה והדרך קדימה

המערכת האקולוגית של כלי observability ממשיכה להתבגר.ספקי ענן מציעים פתרונות מנוהלים כמו AWS X-Ray, Azure Monitor ו-Google Cloud Observability. Open-source חלופות כגון ערימה של Grafana LGTM (Loki, Grafana, Tempo, Mimir) מספקים אפשרויות עוצמתיות, מדרגיות ויעילות עבור קבוצות רק, גישה פרגמטית היא לשלב את לימודי OpenFana ו-PROF (ה-Fana) עם קיבולת פשוטה ו-ProLT) ו-ProLT (ProLT) ו-ProLT) ו-ProLT) עם ההרחבה של קיבולת פשוטה.

במבט קדימה, שני מגמות מעצבות את עתיד הצייתנות.ראשון, FLT:0eBPFFLT:1 (הופנה מהדף ברקלי Packet Filter) מאפשר עקשנות עמוקה ברמת הקרנל ללא שינוי קוד יישומים, אשר הוא חזק במיוחד בסביבות Kubernetes.

מסקנה: אחריות כהשקעה אסטרטגית

באדריכלות מבוזרת, מורכבות אינה אופציונלית - היא סחר חליפין עבור קנה מידה ומהירות.הדרך היחידה לנהל את המורכבות הזו היא להפוך את ההתנהגות הפנימית של המערכת שקוף. Observability ו ניטור לספק שקיפות, להפוך את הקופסאות השחורות מפוכחות, מערכות debuggable. על ידי השקעה בשלושה עמודי התווך, יומנים, ואימוץ כלים מאוחדים וסטנדרטים; מבנה תפעולי, כדי לשפר את האפקטיביות, כדי לשפר את הרזולוציה מקצועית, כדי לשפר את התקינה של קבוצות הנדסה טובה יותר, כדי לשפר את רמת האפקטיביות, כדי לשפר את האפקטיביות, כדי לשפר את האפקטיביות של רזולוציה יעילה יותר, כדי לשפר את רזולוציה של מערכות ניהולית (MT).

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