הקדמה
התראות והודעות הם חלק קריטי בזרימת העבודה שלך בפרויקט. כאשר אתה עובד עם אשף Kubernetes, לעיתים תצטרך לקבל התראה מיידית על בעיה קריטית בקשר.
Alertmanager הוא חלק מ־kube-prom-stack
מותקן בקשר שלך ב־ערימת Prometheus. זה מאפשר לך לקבל התראות ממקורות שונים כמו Prometheus. כללים נוצרים בצד של Prometheus, שבתור יכולים להפעיל התראות. זהו אחריותו של Alertmanager לתפוס את ההתראות האלה, לקבץ אותן (איגוד), להחיל תחזוקות נוספות ולהמסר אותן לנמענים המוגדרים. הודעות התראה יכולות להיות מעוצבות נוסף לכלול פרטים נוספים אם נדרש. ניתן להשתמש ב־Slack, Gmail, וכו 'כדי לשלוח התראות בזמן אמת.
בסעיף זה, תלמד כיצד לבדוק את ההתראות הקיימות, ליצור חדשות, ולהגדיר את Alertmanager כך שישלח התראות באמצעות Slack באמצעות אותו קובץ מניפסט המשמש להגדרת Prometheus.
תוכן עניינים
- דרישות מראש
- שלב 1 – בדיקת התראות כלולות
- שלב 2 – יצירת התראה חדשה
- שלב 3 – הגדרת Alertmanager לשליחת התראות ל-Slack
- שלב 4 – איתור באג בהתראה מתפעלת
- מסקנות
דרישות מראש
כדי להשלים את המדריך הזה, יש לך צורך ב:
- ערך מעקב Prometheus מותקן באשכול שלך כפי שנסבר ב-אשכול Prometheus.
- ערך מעקב Loki מותקן באשכול שלך כפי שנסבר ב-אשכול Loki.
- יישום הדוגמה Emojivoto פורסם באשכול. נא לעקוב אחרי השלבים מהמאגר הראשי. תצטרך ליצור התראות עבור יישום זה.
- זכויות מנהל על מערכת Slack. מאוחר יותר, תצטרך ליצור אפליקציה עם webhook נכנס שישמש לשליחת התראות מ-Alertmanager.
שלב 1 – בדיקת התראות כלולות
kube-prom-stack
כבר יש מעל מאה כללים שפעילים. כדי לגשת ללוח המחוונים של Prometheus, נא לבצע תחילה פורוארד של פורט למחשב המקומי שלך.
פתח דפדפן אינטרנט ב-localhost:9091 וגש לפריט התפריט התראות. עליך לראות מספר התראות מוגדרות מראש וזה צריך להיראות כמו בתמונה הבאה:
לחץ על אחת מההתראות כדי להרחיב אותה. תוכל לראות מידע על הביטוי שהיא שואלת, התוויות שהוגדרו והערות שחשובות מנקודת מבנה. Prometheus תומך בתבניות בהערות ובתוויות של התראות. למידע נוסף, ראה את ה-תיעוד הרשמי.
שלב 2 – יצירת התראה חדשה
כדי ליצור התראה חדשה, עליך להוסיף הגדרה חדשה בקטע additionalPrometheusRule
של קובץ הערכות Helm kube-prom-stack
. תיצור התראה לדוגמה שתופעל אם למרחב השמות emojivoto
אין מספר צפוי של התקנים. המספר הצפוי של ה-pods עבור היישום emojivoto
הוא 4.
ראשית, פתח את קובץ הערכות ה-Helm 04-setup-observability/assets/manifests/prom-stack-values.yaml
המסופק במאגר Starter Kit, באמצעות עורך טקסט לבחירתך (רצוי עם תמיכת ב-YAML lint). לאחר מכן, בטל את ההערה בקטע additionalPrometheusRules
.
לבסוף, החל הגדרות באמצעות helm
:
כדי לוודא שההתראה נוצרה בהצלחה, נווט לקונסולת Prometheus, לחץ על פריט התפריט התראות וזהה את ההתראה EmojivotioInstanceDown
. היא צריכה להופיע בתחתית הרשימה.
שלב 3 – הגדרת Alertmanager לשליחת הודעות ל-Slack
כדי להשלים סעיף זה, יש לך צורך בהרשאות מנהליות על מערכת Slack. זה יאפשר לך ליצור את ה- incoming webhook שתצטרך בשלבים הבאים. עליך גם ליצור ערוץ בו תרצה לקבל התראות מ- Alertmanager.
תגדיר את Alertmanager לסרוק את כל ההתראות שהתקבלו ולהדפיס את התקצירים והתיאורים שלהם בשורות חדשות.
- פתח דפדפן אינטרנט ונווט אל
https://api.slack.com/apps
. לחץ על הכפתור Create New App. - בחלון Create an app, בחר באפשרות From scratch. לאחר מכן, תן לאפליקציה שלך שם ובחר את מערכת העבודה המתאימה.
- בדף Basic Information, לחץ על האפשרות Incoming Webhooks, הפעל אותה, ולחץ על הכפתור Add New Webhook to Workspace בתחתית העמוד.
- בעמוד הבא, השתמש ברשימת הנפתחת Search for a channel… כדי לבחור את הערוץ הרצוי שבו תרצה לשלוח התראות. כשהכול מוכן, לחץ על הכפתור Allow.
- העתק את ערך כתובת ה- Webhook URL שמוצג על העמוד. תצטרך אותו בסעיף הבא.
בשלב הבא, תספר ל- Alertmanager איך לשלוח התראות ל-Slack. פתח את הקובץ 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml
המסופק במאגר ה-Starter Kit בעזרת עורך טקסט לבחירתך. הסר את ההערות מסביב לבלוק alertmanager.config
. וודא כי אתה מעדכן את הערכים של slack_api_url
ו-channel
על ידי החלפת הפלטפורמות <>
בהתאמה.
בתצורה הנ"ל,
slack_api_url
: כתובת URL ל- webhook של Slack שנוצר בשלב 4receivers.[].slack_configs
: מגדיר את ערוץ ה-Slack המשמש לשליחת התראות, כותרת ההתראה וההודעה המובנית. ניתן גם לעצב את ההודעה לפי דרישותיך.title
ו־text
: מגלה את התראות ההתראה ומדפיס את הסיכום והתיאור באמצעות מערכת התבניות של Prometheus.send_resolved
: בוליאני המציין אם Alertmanager צריך לשלוח התראה כאשר התראה לא מפעילה עוד.
פרמטרי ה־matcher
ו־continue
עדיין מסומנים כהערה מכיוון שתפסיק להעריך זאת מאוחר יותר במדריך. כרגע, זה צריך להישאר כהערה.
לבסוף, שדרג את kube-prometheus-stack
, באמצעות helm
:
בנקודה זו, אתה אמור לקבל התראות מ-Slack עבור כל התראות ההתראה.
באשכול הבא, אתה הולך לבדוק אם התראת EmojivotoInstanceDown
שנוספה לאחר מכן עובדת ושולחת התראה ל-Slack על ידי הקטנת מספר השיבצים עבור פריסת /emoji
של מרחב השמות emojivoto
.
מהצורך שלך, הרץ את הפקודה הבאה בטרמינל כדי להביא את מספר השיבצים עבור פריסת /emoji
ל־0:
פתחו דפדפן אינטרנט על localhost:9091 וגשו לתפריט התראות. חפשו את ההתראה EmojivotoInstanceDown שנוצרה קודם. מצב ההתראה צריך להיות Firing לאחר כדקה אחת של צמיחה למטה של הפרומה.
A message notification will be sent to Slack to the channel you configured earlier if everything goes well. You should see the “The Number of pods from the namespace emojivoto
is lower than the expected 4.” alert in the Slack message as configured in the annotations.description
config of the additionalPrometheusRulesMap
block.
כרגע, כל ההתראות הפעילות יישלחו לערוץ ה-Slack. זה עשוי לגרום לעייפות התראה. כדי לעיין בהתראה שנשלחת, ניתן להגביל את Alertmanager כך שישלח התראות רק עבור התראות התואמות לתבנית מסוימת. נעשה זאת באמצעות הפרמטר matcher
.
פתחו את הקובץ 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml
המסופק במאגר ה-Starter Kit באמצעות עורך טקסט לבחירתכם. הסרו את ההערות מהקטע של alertmanager.config
. וודאו שהפרמטרים matcher
וְ- continue
מוסרים מההערות:
סוף סוף, שדרגו את ה-prome-stack של kube-prometheus-stack באמצעות helm:
עכשיו תקבלו התראות רק מההתראה שתואמת לשם ההתראה EmojivotoInstanceDown
. מאחר וה- continue
מוגדר ל- false, Alertmanager ישלח התראות רק מההתראה הזו ויפסיק לשלוח לאחרות.
לחיצה על שם ההתראה ב־Slack תפתח דפדפן אינטרנט לדף אינטרנט שאינו נגיש עם DNS הפנימי של קונטיינרים של Alertmanager. זה צפוי. כמה קישורים שימושיים לך לבדיקה: למידע נוסף, תוכל לבדוק שירות ה־DNS של הקונטיינר, פרמטרי התצורה לשליחת התראות, וכמה דוגמאות להתראות.
שלב 4 – איתור באג בהתראה
כאשר ההתראה מופעלת ושולחת התראה ב־Slack חשוב שתוכל לאתר את הבעיה בקלות ולמצוא את הסיבה העיקרית במהירות. כדי לעשות זאת, תוכל להשתמש ב־Grafana שכבר הותקן במדריכי ה־ערימת Prometheus וה־ערימת Loki.
צור הפניה ל־Grafana על פורט 3000
:
פתח דפדפן אינטרנט ב־localhost:3000 והתחבר באמצעות הפרטים המוגדרים כברירת מחדל admin/prom-operator
.
נווטו לחלק האזהרות. מסנן המצב, לחצו על אפשרות ההתראה. זהו ההתראת emojivoto-instance-down
המוגדרת בחלק "יצירת התראה חדשה" והרחיבו אותה. תראו את הבא:
לחצו על לחצן "ראה גרף". בדף הבא, תוכלו לראות את המונה של מספר ה-pods בשטח השמות emojivoto
כנראה כמדד. שימו לב כי Grafana מסנן תוצאות באמצעות טווח זמן של השעון האחרון כברירת מחדל. תאם את זה למרווח הזמן כאשר ההתראה מופעלת. תוכל להתאים את טווח הזמן באמצעות אפשרות ממתין למן לתוצאה יותר דקה או באמצעות טווח מהיר כגון 30 דקות אחרונות
.
מהלשונית "חקירה", בחרו במקור נתוני Loki. בכלי חיפוש הלוגים הזינו את הבא: {namespace="emojivoto"}
ולחצו על לחצן הרץ שאילתה בצד ימין למעלה של העמוד. תראו את הבא:
וודאו שאתם מכווינים את מרווח הזמן בהתאם.
מהעמוד הזה, תוכלו לסנן את תוצאות הלוג נוספות. לדוגמה, כדי לסנן את הלוגים עבור המיכל web-svc
של שטח השמות emojivoto
, תוכלו להזין את השאילתה הבאה: {namespace="emojivoto", container="web-svc"}
מידע נוסף על שימוש ב־LogQL
ניתן למצוא בשלב 3 – שימוש ב־LogQL.
ניתן גם להשתמש ב אירועי Kubernetes שיוצאו שהותקנו מראש ולסנן את האירועים הקשורים לכמויות השם emojivoto
.
הזן את השאילתה הבאה בדפדפן הלוגים: {app="event-exporter"} |= "emojivoto"
. זה יחזיר את אירועי ה-Kubernetes הקשורים לכמויות השם emojivoto
.
מסקנה
במדריך זה, למדת כיצד לבדוק התראות קיימות, ליצור חדשות, ולהגדיר את AlertManager
כך שישלח התראות ל-Slack.
למידע נוסף
- הגדרת ערך ניטור Kubernetes עם Prometheus, Grafana, ו-Alertmanager על דיגיטל אושן
- יצירת התראות באמצעות DigitalOcean Uptime
השלב הבא הוא להגדיר גיבוי ושחזור באמצעות Velero או TrilioVault באשכול DOKS שלך.