אוסף Metrics: Prometheus, Grafana
אוסף Metrics: Prometheus, Grafana
1) מטרה ומסגרת
משימת לולאת המדדים היא לאסוף ולאחסן באופן אמין סדרות זמן, לתת PromQL מהיר עבור RCA, התראות SLO ולוחות מחוונים מובנים. זוג בסיסי: Prometheus (groupe # store = שאילתה) ו-Grafana (הדמיה, התראות, שחרור אנוטציות). לאחסון ארוך ושאילתה גלובלית - תאנוס/קורטקס/מימיר.
2) מודל נתונים וסמנטיקה
סדרה = שם מטרי + קבוצה של תוויות (מפתח = ערך).
סוגים: נגד, מד, היסטוגרמה, סיכום (בתדירות גבוהה יותר היסטוגרמה).
- אדום (API): ”קצב”, ”טעויות”, ”משך” (היסטוגרמות).
- שימוש (EXY): שימוש, רוויה, שגיאות (CPU/RAM/Disk/Net).
- שם: ”namespace _ subsystem _ metric _ unit” (לדוגמה, ”http _ server _ positions _ total”, ”db _ conferences _ curner”).
אנטי-קרדינליות: למזער ערכים שונים (ללא user_id request_id בתווית).
3) חשיפה וגילוי שירות
יצואנים: , kube-state-metrics, Castory, DB/Queues ( , .
שירותים מקומיים: ספריות לקוחות (Go/Java/Node/Python).
תגלית שירות: קוברנטס, EC2/ASG, קונסול, קבצים סטטיים.
yaml global:
scrape_interval: 15s evaluation_interval: 15s scrape_configs:
- job_name: 'kubernetes-nodes'
kubernetes_sd_configs: [{ role: node }]
relabel_configs:
- action: labelmap regex: __meta_kubernetes_node_label_(.+)
- job_name: 'apps'
kubernetes_sd_configs: [{ role: pod }]
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
action: keep regex: "true"
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
target_label: __metrics_path__
regex: (.+)
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_port]
target_label: __address__
regex: (.+)
replacement: $1
הערות של תרמילים:
yaml prometheus. io/scrape: "true"
prometheus. io/path: /metrics prometheus. io/port: "8080"
4) היסטוגרמות ואחוריות
השתמש בדליים מפורשים עבור ה-SLOs שלך:- Web/API: ”[ 10 ms, 25,50,100,200,400,800,1600 ]”
- תשלומים/תשלומים: הוסף זנב ל-5-10.
promql histogram_quantile(0. 95,
sum by (le) (rate(http_request_duration_seconds_bucket[5m]))
)
עם מופת (אם אפשר):
promql histogram_quantile(0. 95,
sum by (le, route) (rate(traces_spanmetrics_duration_bucket{route="/withdraw"}[5m]))
)
5) כללי הקלטה
הפחתת בקשות כבדות, תקן SI.
yaml groups:
- name: api_sli interval: 30s rules:
- record: job:http:success_ratio:rate5m expr: sum(rate(http_requests_total{status!~"5.."}[5m])) / sum(rate(http_requests_total[5m]))
- record: job:http:duration_p95:5m expr: histogram_quantile(0. 95, sum by (le) (rate(http_request_duration_seconds_bucket[5m])))
6) SLO והתראות (שריפת חלון מרובה)
SLO 99. 9% Requests/30d מוצלחים.
yaml groups:
- name: slo_burn rules:
- alert: ErrorBudgetBurnHighShort expr: (1 - job:http:success_ratio:rate5m) > (1 - 0. 999) 14 for: 5m labels: { severity: critical }
annotations: { summary: "Fast burn >14x for 5m" }
- alert: ErrorBudgetBurnHighLong expr: (1 - job:http:success_ratio:rate5m) > (1 - 0. 999) 6 for: 1h labels: { severity: critical }
annotations: { summary: "Long burn >6x for 1h" }
Alertmanager (מפושט):
yaml route:
receiver: pager group_by: ["service"]
receivers:
- name: pager slack_configs:
- channel: "#oncall"
send_resolved: true
7) תווית-היגיינה וכלכלה
שמות התוויות יציבים ומתקנים: ”שירות”, ”env”, ”אזור”, ”מסלול”, ”קוד”, ”גירסה”.
הגבל את החשבון: Metrics עם ”מסלול” חייב להשתמש בתבנית http. מסלול '(לא הכתובת המלאה).
דגימה לוגית - באיתור; במדדים - אין user_id.
שחרר מאפיינים ('שירות. גרסה ') שימושית להשוואת גרסאות ישנות/חדשות.
8) גדלים ו ־ HA
פרומתאוס - אנכית ועל ידי שריטה-מטרה:- שתי התראות של פרומתאוס (A/B) מגרדות את אותן מטרות (HA....
- תאנוס: סידקר לכל פרומתאוס, סטור + שאילתה לשאילתות גלובליות ואחסון ארוך טווח (S3/GCS).
- חלופה: Cortex/Mimir (כתיבה מרחוק, ריבוי שכבות, קנה מידה אופקי).
yaml remote_write:
- url: https://mimir. example. com/api/v1/push basic_auth: { username: tenantA, password: $MIMIR_TOKEN }
שימור TSDB מקומי:
yaml
--storage. tsdb. retention. time=15d
--storage. tsdb. max-block-duration=2h
9) גראפנה: לוחות מחוונים, התראות, הערות
לוחות מחוונים סטנדרטיים:1. תשקיף פלטפורמה (SLO/RED, תקצוב שגיאה).
2. API על ידי Route (RPS/5xx/p95, השוואה ”גרסה”).
3. K8s Cluster/Nodes (מישור בקרה, רוויה).
4. DB/Cache/תורים (lag/locks/hit ratio/backlog).
5. Per-Release (לפני/אחרי, לשחרר הערות מ-CI).
Grafana Alerting: מפעיל על PromQL, סיבוב בכוננות, אילם-times ”לשחרר חלונות”.
אנוטציות: CI מוסיף אירוע שחרור עם ”להתחייב”, תמונה. תג, התייחסות לצינור.
10) קוברנטס: מה למדוד
מישור בקרה: ”apiserver _ request _ total”, etcd leader/fsync, latency לוחות זמנים.
עומסי עבודה: הפעלות מחדש, 'container _ cpu _ cfs _ expottled _ seconds _ total', OOM, Pending/Evicted, הפרות PDB.
רשת: טיפות, קונטראק, שגיאות ”kube-proxy”.
מכסות/גבולות: בקשות נגד גבולות, HPA/VPA, רווית צומת.
11) DB/Caps/תורים: אותות מפתח
PostGreSQL/MySQL: ”חיבורים”, ”מנעולים”, ”deatlocks _ total”, ”xact _ direct/rollback”, dig שכפול.
רדיס: יחס פגיעה, 'פינוי', latency 'instanious _ ops _ per _ sec.
Kafka/RabbitMQ: עיכוב צרכני, לא מאובטח, ISR, שימוש בדיסק.
promql
Queue backlog sum by (topic) (kafka_consumergroup_lag)> 1000
Postgres replication lag max(pg_replication_lag_seconds) > 2
12) בטיחות וריבוי דירות
RBAC לפרומתאוס/Grafana, datasource-presishens.
שרשרת TLS/mTLS בחדירה/בין רכיבים.
בידוד דייר: הפרדת פרומתאוס או תווית דייר בקורטקס/מימיר; סדרות ומגבלות בקשה.
סודות בהתראות/הודעות - אסורים (להשתמש בזיהוי כרטיס, לא PII).
13) אינטגרציה עם שחרורים וגלגולים אוטומטיים
SLO Rollouts (ארגו Rollouts) או CI-Gate.
כאשר מופעלות התראות כוויות - הפוגה/רולבק קנרית; ברישום/אנוטציה - קישור לשחרור.
השוואה של גרסה יציבה וקנרית באמצעות התווית ”גירסה”.
14) שגיאות אופייניות (אנטי דפוסים)
קרדינליות בלתי מבוקרת של תוויות (user_id, url. מלא, מפתחות דינמיים).
מערבבים פרוד ובמה באותו אשכול בלי הלבל.
רק מד ללא RED/USE; בלי היסטוגרמות p95/p99.
התראות על חומרה בלי להתחייב לרעש SLO.
היעדר כללי הקלטה * בקשות ”כבדות” בתקריות הפקה.
אין הערות שחרור = קשה להשוות שינויים והשפלה.
15) רשימת יישומים (0-45 ימים)
0-10 ימים
יצואני Node/Kube-state/CAdvisor; '/מדדים 'בשירותים.
לוחות מחוונים בסיסיים של RED/USE; דליי היסטוגרמה סטנדרטיים.
כולל הערות שחרור מהמודיע.
11-25 ימים
כללי הקלטה עבור SLI; התראות כוויות רב חלונות.
HA Prometheus (שריטה כפולה), גיבוי של תצורות GitOps.
התראה: מסלולים/מצב שקט/סיבוב בכוננות.
26-45 ימים
כתיבה מרחוק בתאנוס/קורטקס/מימיר, אחסון לטווח ארוך.
אופטימיזציה של הקרדינליות, גבולות הסדרה, בקשות.
SLO-Gating משחרר ואינטגרציה אוטומטית.
16) מדדי בגרות
כיסוי אדום/שימוש עבור שירותי מפתח 95%.
זמן ממוצע לביצוע ”כבד” PromQL <2 S (p95) בשל כללי ההקלטה.
היחס בין התראות שימושיות/רועשות הוא> 3:1.
קרדינליות תחת שליטה: <צרור פעיל 10 מ 'לאשכול, אין קוצים.
100% מהשחרורים לא מבוטלים בגרפנה ומדדים מתואמים לפני/אחרי.
17) קטעים שימושיים
יציבות נגד השוואה לקנרית לפי גירסה
promql histogram_quantile(0. 95,
sum by (le, version) (rate(http_request_duration_seconds_bucket{version=~"stable canary"}[5m]))
)
5xx שגיאות על ידי כביש
promql topk(5,
sum by (route) (rate(http_requests_total{status=~"5.."}[5m]))
)
רווית מעבד מיכל
promql rate(container_cpu_cfs_throttled_seconds_total[5m]) > 0. 1
יחסי מטריצה למסלולים (מופת מופעל)
promql sum (rate (http_request_duration_seconds_bucket[5m])) by (le) # clickable to the track
18) מסקנה
פרומתאוס + גראפנה הוא הסטנדרט דה פקטו למדדים. סמנטיקה ודיסציפלינה מנצחים: RED/USE, תוויות מסודרות, היסטוגרמות עבור SLO, כללי הקלטה והתראות SLO. הוספת HA ואחסון לטווח ארוך, שחרור אנוטציות ואינטגרציה עם גלגולים אוטומטיים - ויש לך לולאה מטרית מהירה, מדשדשת וחסכונית שעוזרת לך לקבל החלטות במכירות.