Table of Contents
מדוע חישובים פרואקטיביים לקווי CI /CD
שילוב מתמשך ו Deployment (CI /CD) צינורות ליצור עמוד השדרה של משלוח תוכנה מודרני.הם לאוטומט הכל משילוב קוד לבדיקות, בנייה, פריסה לתוך הייצור.כאשר צינור פורץ, זה יכול לחסום את כל צוות הפיתוח, עיכוב שחרורים, ו - אם לא פתור - ניתוק קוד פגומים לתוך הייצור.
Prometheus הוא ניטור קוד פתוח מוביל ואזהרה ערכת כלי, המיועד לאמינות והיקףיות.הרכיב האזהרה שלו, מזהירה, מטפל בעבודה המורכבת של ניהול התראות - קבוצות הודעות קשורות, דיכוי לשכפלים, ומחק אותם לאנשים הנכונים או מערכות הפיכה. על ידי Prometheus metrics מהמכשירים שלך /CD עם התראות חכמות, מקבל חשיפה מוקדמת, פריסה, צנרת בריאותית, , כישלונות.
הבנה של Prometheus Alertmanager
Prometheus התראהmanager הוא לא מערכת עמידה - זה עובד בשיתוף עם שרת Prometheus. השרת לאסוף מדדים והערכה כללים אזהרות המוגדרים בתצורה.כאשר מצב הכלל הוא פגש, התראה הוא פוטר ונשלח ל-אזהרהדנדר. אזהרה Dumanager לאחר מכן לוקח, החל routing, מעכב, וניתוק לפני שליחת הודעות דרך מגוון של ערוצים, דואר אלקטרוני, Slacki, ו-line, , , , , , , , , , , , , , , , , , ⁇ , , , , , , , , , , ⁇ , , , , , , , , , ⁇ ⁇ ⁇ , , ולאחר מכן , ולאחר מכן .
המונחים: alertmanager
- (ב) ויקרא י"א: "בְּהִיא נָא נָא נָא נָא נָא נָא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא
- (הלוגיקה:0-grouping:FLT:1 וחוקים שניתן להעלות אזהרות דומות להודעות בודדות.לדוגמה, קבוצה כל אלה בונה כישלונות על ידי שם צינורות וסביבה.
- עץ הפלט:0 (Routing Tree: 1) עץ מקלט שמחליט היכן ערנות על בסיס התאמת תוויות.אזהרות יכולות לעקוב אחר מספר סניפים עם תצורה שונה.
- (ב) [15] , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- (ב) ,0) ,Time-based muring: FLT:1 השתמש בזמני מנוחה כדי לדכא התראות בלוח הזמנים (למשל, פריסות שגרתיות או עבודות לילה).
כיצד מזהירים לזרום דרך המערכת
- Prometheus מגרד מדדים מייצואנים או נקודות קצה (למשל, ג'נקינס, GitLab CI metrics, Kubernetes pod מעמד).
- בהתבסס על חוקי התראה המוגדרים ב-Prometheus config, התנאים מעוררים התראה (למשל, בניית אחוזי כשל > 5% תוך 10 דקות).
- התראה מקבל את התראה האש, חל על קבוצות המתנה מרווח הגדרות, זונות התראות, ומסלול אותן.
- הודעות נשלחות להגדרה של מקלטים.תגובה עלולה לגרום לפעולות אוטומטיות (למשל, Webhook כדי לחדש עבודה תקועה).
הבנת זרימת זה חיונית עבור כוונון התראה כדי להימנע עייפות ערנית תוך הבטחת אירועים קריטיים לעולם לא פספסו.
מדוע להשתמש ב-CDC באופן ספציפי למעקב אחר CI/CD?
צינורות CI /CD לייצר נפח גבוה של מדדים ואירועים.ללא התראה חכמה, צוותים לטבוע הודעות רועשות - כל מבחן כושל, פריסה איטית, או רשת לסירוגין blips מעורר הודעה.
- (ב) ,0) הפחתה של רעש: 1 , קבוצות מתמזגות אזהרות מאותו צינור או סיבה, כך הודעה אחת מכסה כישלונות קשורים רבים.
- (ב) ⁇ :0) ,[דרוש מקור]: [ה] [ה]] [ה]]] , [ה], ההתערות ההההתערות ההתערות ההההתערות ה של ה ה ה ה ה ה ה ה ה ה ה של ה ה ה ה ה ה ה ה ה ה ה ה ה ה ה ה ה ה ה ה ה ה ה ה של ה של ה ה ה ה ה ה ה ה ה ה ה ה ה ה ה ה ה ה ה ה ה ה
- (ב) ,0) ,הההההההההההההההההההההההההההההההההההההההההההסברה: "הדברים" (ה) מונעים אזהרות חוזרות ונשנות מאותה מצב, אשר שכיחה כאשר המדדים מסולקים כל 15 שניות.
- חלונות תחזוקה:0 (FLT:103) אזהרות שתיקה במהלך פריסות מתוכננות או שדרוגי תשתיות כדי להימנע מאזהרות שווא.
ניטור פרואקטיבי עם התראה על התראה אומר שאתה יכול לזהות מגמות ההשפלה של צינורות (למשל, הגדלת זמן הבנייה) לפני שהם גורמים לכישלון מוחלט.
הגדרת Prometheus ו-אזהרה עבור CI /CD Pipeline
יישום בסיס התראה מוצק דורש תצורה של הן Prometheus והן התראה.למטה הוא מדריך צעד אחר צעד עם שיקולים בעולם האמיתי.
שלב 1: Deploy Prometheus ו-אזהרה
אם כבר לא, להתקין את Prometheus ו-אזהרה.גישות נפוצות כוללות שימוש ב-Docker, Kubernetes Helm ⁇ , או חבילות Native. עבור סביבת מבחן פשוטה, אתה יכול להשתמש ב- docker-compose:
version: '3'
services:
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
alertmanager:
image: prom/alertmanager:latest
volumes:
- ./alertmanager.yml:/etc/alertmanager/alertmanager.yml
ports:
- "9093:9093"
(ב) עיין ב[[1924]] ב[[1924]], [[1924]]]], [[1924]]
שלב 2: Define CI/CD-Specific Metrics
Prometheus צריך מדדים מכלי CI /CD שלך. אינטגרציה משותפת:
- (FLT:0)Jenkins:FLT:1 השתמש בתוסף Prometheus metrics.Expos משך עבודה, לבנות תוצאות, ולהגדיל את התוספים.
- (ב) [15] ,0)GitLab CIIR:FLT:1 השתמש במדדים המובנים של GitLab או לייצוא GitLab עבור מטריקים רץ.
- (ב) ⁇ :0) פעולות: FLT:1 Push metrics מותאם אישית באמצעות הנחיית Prometheus עבור זרימת עבודה.
- (ב) ⁇ :0) ,Kubernetes: 1FLT:1 השתמש ב-kube-state-metrics כדי לפקח על צינורות צינורות והשלמת עבודה.
לדוגמה, כדי לפקח על ג'נקינס לבנות כשלים, לחשוף מדד כמו FLT 3: עם ערכים 0 להצלחה, 1 לכישלון.
שלב 3: יצירת חוקי התראה ב Prometheus
חוקי התראה הם קבצי YML המוטעים ב-Prometheus. להלן הוא דוגמה לקובץ ה-FLT:4 עבור צינור CI /CD:
groups:
- name: CI/CD Alerts
rules:
- alert: BuildFailureHigh
expr: rate(jenkins_job_last_result{result="failure"}[5m]) > 0.1
for: 2m
labels:
severity: critical
annotations:
summary: "High build failure rate in pipeline {{ $labels.job }}"
description: "Build failure rate > 10% over 5 minutes for job {{ $labels.job }} in environment {{ $labels.env }}"
- alert: DeploymentDurationAnomaly
expr: histogram_quantile(0.95, rate(deployment_duration_seconds_bucket[10m])) > 300
for: 5m
labels:
severity: warning
annotations:
summary: "Deployment duration anomaly for service {{ $labels.service }}"
description: "95th percentile deployment duration exceeds 5 minutes"
שלב 4: קריין רינג ו Notifications
צור ההרחבה (FLT:6) המגדירה כיצד ערנות מעובדות.
route:
group_by: ['alertname', 'job', 'env']
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
receiver: 'default'
routes:
- match:
severity: critical
receiver: 'pagerduty-critical'
continue: true
- match:
severity: warning
receiver: 'slack-warnings'
receivers:
- name: 'pagerduty-critical'
pagerduty_configs:
- service_key: <your-pagerduty-key>
- name: 'slack-warnings'
slack_configs:
- api_url: https://hooks.slack.com/services/...
channel: '#ci-cd-alerts'
send_resolved: true
הגדרות מפתח:
- (ב) [15] הקבוצה by:FLT:1 Group מזהירה על ידי עבודה וסביבה כדי להימנע מהודעות סלאריות עבור כל בניין כושל.
- (בקיצור:0) הקבוצה wait/interval:FreaLT:1 Controls אצווה עיכוב, וכמה פעמים הודעות נשלחות לקשיים שוטפים.
- (ב) ⁇ interval: 1 מונע עייפות ערנית על ידי לא לחזור על אותה התראה במשך שעות אלא אם המצב נמשך.
עבור מדריך מקיף, ראה את התצורה של FLT:0 (אלגנטימנטרי) תיעוד תצורה של תצורה 1FLT.
שלב 5: אינטגרט עם אוטומציה של אירועים
ניטור פרואקטיבי הוא רק יעיל אם התראות מובילות לפעולה. השתמש ב-webhooks ב-אזהרה כדי לעורר תגובות אוטומטיות:
- שלח Webhook לכלי כמו Rundeck או Ansible כדי לנסות מחדש פריסה כושלת.
- באופן אוטומטי לחזור אל הבניין הטוב הידוע האחרון כאשר פריסת שתן גבוהה מזהיר שריפות.
- צור כרטיס Jira או תקרית PagerDuty מהאזהרות קריטיות.
קבוצות רבות משתמשות גם ב- 0 (Grafana OnCallcioFLT:1) (או דומה) לניהול הסלמה ותכניות על גבי אזהרה.
תכונות מתקדמות של Proactive CI /CD Monitoring
לאחר שביצועים בסיסיים מוגדרים, למנף תכונות מתקדמות כדי לנקז את המעקב שלך.
חוקי Inhibition
אזהרות פרטיות נמוכות יותר כאשר ערנות גבוהה יותר היא יורה.לדוגמה, אם צומת Kubernetes יורד (אזהרות קריטיות), אתה לא צריך התראות על כל צינור שאינו יכול לקבוע פודים (אזהרות מלחמה) הוסף ל-FLT:8:
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['namespace', 'cluster']
זה מקטין רעש במהלך הכישלונות.
סיילינג ו-Mute Timers
לוח זמנים של שמירה על חלונות עם צירים מלוטשים.לדוגמה, אם אתה מפרסמת כל יום שלישי בשעה 2 AM, מדכא התראות הקשורות לפריס במהלך החלון:
mute_time_intervals:
- name: tuesday_deploy
weekdays: ['Tuesday']
time_intervals:
- times: ['02:00', '04:00']
הדבק ב-[[1924]], [[1924]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]
אזהרות Webhooks עבור פעולות מכס
מעבר ל-Slack ו- PagerDuty, השתמש ב- Webhooks כדי להשתלב עם כלי פנימי.לדוגמה, מקלט Webhook יכול להתקשר ל- API כדי להפעיל צינור תקוע:
receivers:
- name: 'webhook-auto-fix'
webhook_configs:
- url: 'https://internal-api.example.com/pipeline/restart'
send_resolved: true
מפתח כל CI / CD פילין צריך לעקוב
כדי להגדיר כללים איראנים יעילים, עליך לדעת מה משמעות הדבר. מסגרת המחקר וההערכה של DORA (DevOps Research and Assessment) מזהה ארבעה מדדים מרכזיים:
- (ב) ,0) תדירות ההנעה: 1 (ב) כמה פעמים אתה מפיץ לייצור.
- [01:0] זמן לשינויים: זמן 1FLT 1 של ביצוע פריסה.
- (ב) [ה]הזמן להחלמה (MTTR): זמן התגלות 1:1] כדי להתאושש מכישלונות.
- שיעור הכשלים של ה-FLT:0 (שינוי: 0) שינוי שיעור הכשלונות: 1 אחוז הפריסה גורם לכשלונות.
Prometheus יכול לעקוב אחר אלה באמצעות יצואנים או צינורות לוטוס-to-metrics.דוגמה כוננות הכלל MTTR:
- alert: MTTRTooHigh
expr: avg by (service) (deployment_recovery_time_seconds) > 3600
for: 10m
labels:
severity: warning
annotations:
summary: "MTTR for {{ $labels.service }} exceeds 1 hour"
שיטות טובות ביותר עבור התראה על CI /CD Pipelines
Over-alerting הוא מכשול נפוץ.עקוב אחר ההנחיות האלה כדי לשמור על האזהרה שלך יעילה.
המונחים: Threshold
סף בסיס על נתונים היסטוריים, לא ניחושים.אנליז אירועים קודמים כדי לקבוע מה מהווה התראה אמיתית לעומת תנודות רגילה. השתמש בסף דינמי (באמצעות כללי הקלטת) להתאמה.
שימוש במספר רמות
מינוף מפה לפעולות תגובה:
- (ב) ⁇ :0) ⁇ : ⁇ 1 (הפילין) חסום לחלוטין או ביטול הייצור.
- (ב) [15] , ⁇ :0) , הידרדרות ביצועים, עלייה בשיעור הכשל, שימוש במשאב ליד הגבלת זמן.
- (ב) ,0) ,9 ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
חוקי אזהרה עם נתונים אמיתיים
השתמש בכלים של Prometheus בניסוי מובנה או הפקודה של FLT:14 כדי לאמת כללים לפני פריסה.
מסמך התראה
שמור על wiki או חוברת הפעלה המסבירה את מטרת כל התראה, מה לעשות כאשר מופעל, וכיצד להשתיק אם צריך.זה מאיץ את תגובת האירוע.
ביקורת וסירוב
הגדר סקירה רבעונית של כל חוקי האזהרה. Removestale Rules, להתאים את הסף, ולהוסיף חדשים עבור צינורות שינוי.פשטות של קריין עושה את זה קל יותר.
Integrating התראה עם Popular CI /CD Platforms
ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס ג'נקינס
התקן את ה-FLT:0 (Prometheus metrics plugins plugins) כדי לחשוף את העבודה בונה ספירות, משך הזמן ותוצאות.אזהרה על גדלים תורים גדל או מקומות עבודה תקועים במצב "מעודכן".
GitLab CI
GitLab חושפת את נקודת הסיום של רצים. Monitor runner זמינות וזמני ביצוע צינורות.עבור צינורות בקשה למיזוג, השתמש בממדדים מותאמים אישית באמצעות המסלול.
GitHub Actions
מאחר ש- GitHub Actions אינו חושף את מדדי הפרותאוס, לדחוף מדדים מזרימת עבודה רץ באמצעות הדחף.אזהרה על זרימת העבודה מתבטלת כישלונות או שיעורי זמן.
# In a workflow step
- name: push metrics
run: |
echo "pipeline_status{workflow=\"deploy\",result=\"${{ job.status }}\"} 1" | curl --data-binary @- http://pushgateway:9091/metrics/job/github_actions/instance/${{ github.run_id }}
Kubernetes Native Pipelines (Tekton, ארגו וורזציות עבודה)
השתמש ב-FLT:17 כדי לפקח על צינורות צינורות והגדרות מכס (CRDs) התראה על תקלות פיטוריון רץ או משימות ריצה זמן.
מלכודות נפוצות וכיצד להימנע מהם
גם עם הגדרה חזקה, הצוותים נתקלים באתגרים.כאן איך לנווט אותם:
- (FLT:0) עייפות אלפרט: 1) סף רגישים יתר או יותר מדי אזהרות ניתוק נמוך מדי: העלאת סף, התראות מצטברות עם קיבוץ, ולהשתמש בהסתה במהלך מחזורים ידועים.
- (FLT:0) אזהרות קריטיות: FLT:1 לא מוגדר כללים עבור מצבי כשלון מסוימים (למשל, בניית לקויות בנייה שקטה עקב בדיקות ממושכות).
- (ב) ⁇ :0) ⁇ : אזהרה אחת נשלחה לערוצים מרובים.פתרון: השתמש בעיכוב בזהירות - עיין באזהרות קריטיות ל- PagerDuty, אזהרות ל-Slack, ומידע לארכיון דואר אלקטרוני.
- (ב) סחף:0) שינוי תצורה של אזהרה (FLT:103) ללא ביקורת: גרסה לשלוט ב-FLT 18 ולהשתמש ב- CI/CD כדי לפרוס שינויים באישור.
עקבו אחרי עצמו
Prometheus ו-אזהרהmanager יכולים לפקח אחד על השני.הפרמטרים של אקספוזה ולהגדיר התראות על כישלונות מזהירים (למשל, הודעות נכשלות, שתיקה מחלחלות) הכלל:
- alert: AlertmanagerNotificationFailing
expr: rate(alertmanager_notifications_failed_total[10m]) > 0.01
for: 5m
labels:
severity: critical
annotations:
summary: "Alertmanager notifications are failing"
ודא כילאה ניטור שלך הוא מסוגל למנוע כתמים עיוורים.
מסקנה
באמצעות Prometheus התראה על ניטור CI /CD פעיל משנה את יכולת הצנרת שלך מפסבילה לפעולה. על ידי urconfig-orienteded היטב של כללי התראה, קבוצות חכמות, וניתוק חזק, אתה מקבל את היכולת לזהות בעיות לפני שהם להסלים - בין אם זה איטי לבנות, פריסה, או תשתית כשל מרתיעה, המערכת גמישה מספיק כדי לשלב את זה באופן מדויק כדי להפחית את הזמן שלך, כדי להפחית את זה יהיה מסוגל לפתח את הזמן שלך, כדי להפחית את זה בטוח, ללא צורך באופן מדויק.