איך הפכנו את סלאק למערכת התראות עסקיות מבוססות דאטה?

אורלי הופרט

VP Data At Travelier (formerly Bookaway Group)

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

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

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

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

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

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

את הכלי בנינו בעזרת ה stack הטכנולוגי הקיים שלנו (Airflow, Python, BigQuery) ולהלן הפרמטרים שהגדרנו:

  • קלות שימוש הגדרה וניהול של התראות בצורה קלה ב google sheet בעזרת ידע ב SQL בלבד ללא צורך בתמיכה של מפתחים
  • רלוונטיות
  • התראות לסביבת התקשורת הטבעית של היוזרים שלנו (AKA Slack) עם אפשרות להגדיר ערוץ ספציפי ביצירת ההתראה כך שיוזרים יירשמו רק להתראות הרלוונטיות להם
  • כל המידע בסלאק בלי צורך להוריד קבצים או לעבור בלינק לדשבורד
  • גמישות
  • אין הגבלה על סוגי ההתראות, כל התראה שניתן לתרגם לשאילתא ניתנת למימוש, מערכי סף בהם שאילתא ללא תוצאות לא תשלח כהתראה ועד אנומליות בדאטה ובדיקות נכונות נתונים.

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

אז איך זה עובד?

לתיאור הארכיטקטורה אעבור לאנגלית למען הימנעות מתרגום קלוקל .

The system reads data received from the user through a google sheets file, uploads it to BigQuery, runs logic, outputs alerts to Slack and monitors it on a BI report.

Screen Shot 2023 07 24 at 14.30.59
  • Google sheets file: Contains the alert configuration metadata, accessible by users to add/modify tests.
  • BigQuery external table: BigQuery replication of the google sheets configuration file
  • AirFlow DAG - the DAG generates 3 tasks:Queries the BQ external table, looks for tests that should be triggered on the next interval and pushes it to a table in BigQuery.Triggers a Python script which executes the tests logic as received by the user and sends alert to Slack if necessary.Save run statistics data to an audit table in BigQuery
  • Reportsto monitor alerts and track usage

אז איך זה נראה?

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

Screen Shot 2023 07 24 at 14.32.44

עוד כמה טיפים:

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

לסיכום

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

הזדמנויות ובעיות חדשות שמתעוררות הופכות במהרה להתראות מניבות.

הצלחנו להוריד את הזמן לאיתור שינוי מממוצע של 28 שעות ל 35 דקות. מספק לראות את התקשורת המיידית בין בעלי העניין בסלאק על התראה שנשלחת והמהירות של הטיפול.

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

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

ועכשיו נרד לפרטים:

שדות הקונפיגורציה בקובץ הגדרת ההתראות:

Values

Description

Column Name

test indicator

test_id

slack user name to allow personal tagging

test_owner_name

slack user id

test_owner_id

SQL test code - the output (if exists) will be pushed to slack

query

{0,1}

Indicator for incremental type alerts

increment_test

{day,hour}

Frequency interval value for alerts scheduling

frequency_interval

integer

Units of time for frequency interval

frequency_units_of_time

TIMESTAMP_ADD(TIMESTAMP, INTERVAL history_time_value day, day)

The time parameter value for increment alerts

history_time_value

TIMESTAMP_ADD(TIMESTAMP, INTERVAL 1 history_units_of_time)

The time units value for increment alerts

history_units_of_time

alert active status

test_status

Optional, customize slack message

slack_message

בניית טבלת stage לריצה בזמן אמת:

שליפה מטבלת ה meatadata של ההתראות ויצירת טבלת הטסטים להרצה בהתאם לנקודת זמן הריצה

Screen Shot 2023 07 24 at 14.35.34
Screen Shot 2023 07 24 at 14.42.36

פייתון סקריפט להרצת הטסטים:

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

לשם כך ניצור מחלקה בשם DataAlertsHandler:

Screen Shot 2023 07 24 at 14.44.10

במחלקה זו הפונקציה run_data_alertsתנהל את הפעולות השונות לצורך טעינת קונפיגורציות ההתראות, הרצתן ושליחת התראה במידת הצורך:

Screen Shot 2023 07 24 at 14.44.10 1

ראשית נטען את הקונפיגורציה המתאימה באמצעות הפונקציה load_test_configuration:

Screen Shot 2023 07 24 at 14.46.57
Screen Shot 2023 07 24 at 14.52.21

כחלק מהטעינת הקונפיגורציה, נפנה ל DWH שלנו בbigQuery לשם משיכת הקונפיגורציה באמצעות

Screen Shot 2023 07 24 at 14.53.41

נריץ את הבדיקות ובמידה ואותרה במהלך הרצת הבדיקה אנומליה, נוציא התראה מתאימה דרך ערוץ הסלאק הרלוונטי באמצעות קריאה לפונקציה הבאה:

Screen Shot 2023 07 24 at 14.54.41
Screen Shot 2023 07 24 at 14.55.08

לבסוף נכתוב לטבלת audit את תוצאות ההרצה (גם במידה ולא אותרו אנומליות):

Screen Shot 2023 07 24 at 14.55.51

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