תצורת ניתוב של Prometheus Alertmanager תחת מפתח

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

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

הבעיה של מערכות התראות רועשות

מהנדסים נתקלים לעיתים קרובות במצב: באשכול של 100 צמתים, צומת אחד נופל, ובתוך דקה מגיעות 500 הודעות על כל שירות. הצוות מפסיק להגיב — "הכל רעש." אירועים אמיתיים נעלמים מעיניים. הגדרת Alertmanager נכונה פותרת זאת: הודעה אחת משמעותית לכל אירוע. לצוות שלנו של מהנדסי DevOps מוסמכים יש ניסיון מעשי של 5+ שנים בניטור DevOps והגדרת Prometheus, עם למעלה מ-50 פרויקטים מוצלחים. אנו מבטיחים להפחית את רעש ההתראות ב-80% ולקצר את ה-MTTR פי 3 בהשוואה להגדרות טיפוסיות — זה פי 3 מהר יותר מממוצע השוק. ביצועים אלו מושגים באמצעות ניתוב חכם וכללי inhibition. עד 90% מההתראות בתשתית טיפוסית הן כפילויות או אינן דורשות פעולה. צרו קשר לבדיקת ההגדרה הנוכחית שלכם — ננתח אותה ונציע אופטימיזציות.

כיצד פועלת הגדרת הניתוב

הגדרת prometheus alertmanager זו מייעלת את הניתוב. Alertmanager מקבל התראות מ-Prometheus, מקבץ אותן לפי מפתחות תוויות, ממתין ל-group_wait כדי לצבור קבוצה, ואז שולח. עבור התראות עוקבות באותה קבוצה, חל group_interval. עבור התראות שלא נפתרו, repeat_interval מפעיל שליחה חוזרת. לוגיקת ניתוב ההתראות מוגדרת בעץ ניתוב ב-alertmanager.yml:

global:
  resolve_timeout: 5m
  slack_api_url: "${SLACK_WEBHOOK_URL}"
route:
  receiver: default-slack
  group_by: ['alertname', 'cluster', 'service']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 3h
  routes:
    - match:
        severity: critical
      receiver: pagerduty-oncall
      group_wait: 0s
      repeat_interval: 30m
      continue: true
    - match:
        severity: critical
        team: database
      receiver: dba-pagerduty
      routes:
        - match:
            alertname: PostgreSQLReplicationLag
          receiver: dba-telegram
    - match_re:
        severity: warning|info
      receiver: slack-warnings
      group_wait: 2m
      group_interval: 10m
receivers:
  - name: default-slack
    slack_configs:
      - channel: '#alerts-all'
        title: '{{ template "slack.title" . }}'
        text: '{{ template "slack.text" . }}'
  - name: pagerduty-oncall
    pagerduty_configs:
      - service_key: "${PAGERDUTY_SERVICE_KEY}"
  - name: dba-pagerduty
    pagerduty_configs:
      - service_key: "${PAGERDUTY_DBA_KEY}"
        severity: critical
  - name: dba-telegram
    webhook_configs:
      - url: "http://telegram-bot:8080/alert"
inhibit_rules:
  - source_match:
      alertname: NodeDown
    target_match_re:
      alertname: ".*"
    equal: ['instance']
  - source_match:
      alertname: KubernetesNodeNotReady
    target_match:
      severity: warning
    equal: ['node']

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

פרמטר לקריטי לאזהרה
group_wait 0s 2m
group_interval 5m 10m
repeat_interval 30m 3h

מדוע כללי Inhibition קריטיים לאשכולות גדולים

כאשר מארח אינו זמין, Prometheus מייצר התראות עבור כל שירות על אותו מארח. ללא inhibition, מקבלים עשרות הודעות על בעיה אחת. עם inhibition, כמו בדוגמה לעיל, הרעש מופחת בסדר גודל. כללי inhibition מוגדרים כראוי מפחיתים הודעות פי 10–50 בהשוואה להגדרה ברירת מחדל. לפי תיעוד Prometheus Alertmanager, כללי inhibition הם חובה עבור אשכולות גדולים מ-50 צמתים. זה חוסך עד $10,000 בשנה על ידי הפחתת זמן השבתה.

הגדרת HA Alertmanager: למה זה חשוב

Alertmanager יחיד הוא נקודת כשל יחידה עבור הודעות. הגדרת HA עם שלושה מופעים המשתמשים בפרוטוקול gossip מסנכרנת מצב. הסיכון להחמצת הודעות יורד לפחות מ-0.1% בהשוואה למופע יחיד. אנו מבטיחים שיעור מסירת הודעות של 99.9% עם הגדרת ה-HA שלנו. הרצה עם פרמטרים global: resolve_timeout: 5m slack_api_url: "${SLACK_WEBHOOK_URL}" route: receiver: default-slack group_by: ['alertname', 'cluster', 'service'] group_wait: 30s group_interval: 5m repeat_interval: 3h routes: - match: severity: critical receiver: pagerduty-oncall group_wait: 0s repeat_interval: 30m continue: true - match: severity: critical team: database receiver: dba-pagerduty routes: - match: alertname: PostgreSQLReplicationLag receiver: dba-telegram - match_re: severity: warning|info receiver: slack-warnings group_wait: 2m group_interval: 10m receivers: - name: default-slack slack_configs: - channel: '#alerts-all' title: '{{ template "slack.title" . }}' text: '{{ template "slack.text" . }}' - name: pagerduty-oncall pagerduty_configs: - service_key: "${PAGERDUTY_SERVICE_KEY}" - name: dba-pagerduty pagerduty_configs: - service_key: "${PAGERDUTY_DBA_KEY}" severity: critical - name: dba-telegram webhook_configs: - url: "http://telegram-bot:8080/alert" inhibit_rules: - source_match: alertname: NodeDown target_match_re: alertname: ".*" equal: ['instance'] - source_match: alertname: KubernetesNodeNotReady target_match: severity: warning equal: ['node'] . Prometheus שולח התראות לכל שלושת המופעים:

alerting: alertmanagers: - static_configs: - targets: - alertmanager-1:9093 - alertmanager-2:9093 - alertmanager-3:9093 

אשכול ה-Alertmanager מבצע דה-דופליקציה: התראות זהות משלושה מקלטים מביאות להודעה אחת.

פרמטר Alertmanager יחיד אשכול HA (3 צמתים)
סבילות לתקלות אין גבוהה (עד 2 תקלות)
סיכון להחמצת הודעה גבוה פחות מ-0.1%
זמן הגדרה יום אחד 2-3 ימים

פרמטרי קיבוץ והשפעתם על עיכוב הודעות

continue: true קובע כמה שניות לצבור התראות לפני שליחת הקבוצה הראשונה. עבור קריטי, מוגדר ל-0s להודעה מיידית (עיכוב <שנייה אחת). --cluster.peer=alertmanager-1:9094 --cluster.peer=alertmanager-2:9094 --cluster.peer=alertmanager-3:9094 הוא המרווח בין שליחות כאשר מגיעות התראות חדשות באותה קבוצה (5 דקות לקריטי). alerting: alertmanagers: - static_configs: - targets: - alertmanager-1:9093 - alertmanager-2:9093 - alertmanager-3:9093 הוא התדירות לשליחה חוזרת של התראות שלא נפתרו (30 דקות לקריטי, 3 שעות לאזהרה). הגדרת תזמונים אלו משפיעה ישירות על מהירות התגובה: העיכוב יכול לנוע בין 0 ל-10 דקות בהתאם לעדיפות.

מידע נוסף על קיבוץקיבוץ לפי תוויות alertname, cluster, service מאפשר שילוב התראות קשורות להודעה אחת. זה מפחית עומס קוגניטיבי על המפעיל: במקום מבול של הודעות, הודעה אחת מפרטת את כל ההתראות הפעילות. התזמונים group_wait ו-group_interval מאזנים בין מהירות ההודעה לשלמותה.

מקרי שימוש לכללי Inhibition

כללי inhibition הם חובה אם התשתית שלכם כוללת יותר מ-50 צמתים או אם אתם משתמשים ב-auto-scaling (מופעי spot, Karpenter). ללא inhibition, כאשר צומת נופל, הצוות יקבל עשרות התראות עבור כל שירות, מה שהופך את הניטור לחסר תועלת. בפועל, כללי inhibition משמשים גם לדיכוי התראות אזהרה כאשר קיימות התראות קריטיות, כך שהמפעיל מתמקד בבעיה העיקרית. ההשקעה בהגדרה משתלמת על ידי הפחתת זמן השבתה בתוך החודש הראשון.

תבניות הודעות: Go Templates לעומת סטטיות

Alertmanager משתמש בתבניות Go. אנו מאחסנים תבניות עבור Slack בקובץ נפרד group_wait. זה מספק פי שניים יותר הקשר מהודעות סטטיות. הקישור group_interval מצביע על גרף Prometheus עם השאילתה המדויקת, וחוסך דקות במהלך אבחון.

{{ define "slack.title" -}} [{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] {{ .CommonLabels.alertname }} {{ if .CommonLabels.cluster }}| {{ .CommonLabels.cluster }}{{ end }} {{- end }}
{{ define "slack.text" -}} {{ range .Alerts -}} *Alert:* {{ .Annotations.summary }} *Details:* {{ range .Labels.SortedPairs }} • *{{ .Name }}:* {{ .Value }} {{ end }} *Source:* <{{ .GeneratorURL }}|Graph> {{ end -}} {{- end }}

תהליך ההגדרה: שלבים ותוצרים

  1. בדיקת מצב נוכחי: מה מוגדר, כמה התראות נשלחות ביום, כמה מהן דורשות פעולה, כמה הן רעש. לעיתים קרובות 80% מההתראות הן רעש שאיש לא קורא.
  2. עיצוב: תוכנית רמות חומרה, רשימת צוותים וערוצי ההודעות שלהם, כללי inhibition ספציפיים לתשתית, מדיניות הסלמה.
  3. יישום: הגדרת Alertmanager, תבניות הודעות, בדיקות ניתוב עם repeat_interval.
  4. בדיקות: templates/slack.tmpl — אימות ניתוב ללא שליחת הודעות אמיתיות.
  5. תיעוד והדרכה: מסירת תוכנית הניתוב, מדריך מפעילים, הדרכת הצוות.

מה כלול בעבודה:

  • בדיקת התראות נוכחיות והגדרת Prometheus
  • עיצוב ויישום עץ הניתוב
  • הגדרת כללי inhibition
  • אשכול HA Alertmanager (אופציונלי)
  • תבניות הודעות עבור Slack, PagerDuty, Telegram
  • תיעוד וייעוץ לצוות

לוח זמנים: הגדרה בסיסית מיום אחד (החל מ-$500), הגדרה מלאה עם HA בין 2 ל-3 ימים (החל מ-$1,500). חיסכון שנתי מהפחתת רעש ההתראות יכול לעלות על $10,000. המחיר מחושב באופן אישי לאחר בדיקה.

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