ערימת תצפית
1) מדוע אתה זקוק לערימת תצפית
RCA מהיר והפחית MTTR: מתסמין לגורם בדקות.
ניהול SLO: מדידת שגיאות/latency, התראה על ידי תקציב שגוי.
בקרת שחרור: חישובי קנרית, אוטומטי-rollback על ידי מדדים.
נתיבי גישה, חריגות, אחיזה משפטית.
שקיפות FinOps: עלות אחסון/בקשות, עלות לכל SLO.
מתודולוגיות: אותות זהב (LATENCY/תנועה/שגיאות/רוויה), RED, השתמש.
2) ארכיטקטורת ערימה בסיסית
רכיבים לפי שכבה
אוסף/סוכנים: Exports, Promtail/Floent Bit, Otel SDK/Auto-Instror, Blackbox-Growes.
Frometheus remote_write # Mimir/Thanos, מפיץ/מבריחים לוקי, טמפו/יגר.
חנויות: אובייקט S3/GCS/MinIO (קר ארוך), SSD (שורות חמות).
שאילתות/הדמיה: Grafana (לוחות, SLO widgets), Kibana (אם ELK).
ניהול: התראות אלרטמנג 'ר/גרפאנה, קטלוג שירות, RBAC, מנהל סודי.
תבניות פריסה
מנוהל (Grafana Cloud/Cloud Services) - מהיר ויקר יותר בכרכים.
אירח את עצמו בשליטה מלאה K8s, זקוק לניתוח ו FinOps.
3) תקני נתונים: ”תוכנית תצפית” מאוחדת
3. 1 Metrics (פרומתאוס/OpenMetrics)
תוויות נדרשות: ”env”, ”region”, ”cluster”, ”name space”, ”service”, ”version”, ”derenant' (אם רב-דייר),” endpoint'.
שם: ”snake _ case”, sufixes ”_ total”, ”_ seconds”, ”_ bytes”.
תרשימי בר: ”דליים קבועים” (SLO-מכוון).
קרדינליות: אל תכלול את ”user _ id',” quest _ id' בתוויות.
3. 2 יומנים
פורמט: JSON; שדות דרושים 'ts',' רמה ',' שירות ',' env ',' trace _ id', 'span _ id',' msg '.
מסווה על הסוכן (פאן, אסימונים, דואר אלקטרוני, וכו ').
תוויות לוקי: רק קרדינליות נמוכה (”אפליקציה”, ”שם”, ”רמה”, ”דייר”).
3. 3 רצועות
אוטל סמנטיקה: 'שירות. שם, פריסה. סביבה ", 'db. מערכת ',' http. "
דגימה: שבילי היעד של p99 הם ”תמיד _ און ”/דגימת זנב, השאר הוא” הורה/יחס ”.
הטמעת זיהוי: flick 'trace _ id/span _ id' לתוך לוגים ומדדים (תוויות/שדות).
4) מתאם M-L-T (Metrics/Logs/Traces)
מהגרף ההתראה (metric) + רישומים מסוננים על ידי "trace _ id' = עקבות ספציפיים.
מתוך התוחלת האיטית (slow span), בקשה למדדים של גיבוב מסוים במרווח התוחלת היא x.
כפתורי Drilldown בלוחות: ”to logs' ו-” to races ”עם החלפה משתנה (” $ env ”,” $ service ”,” $ trace _ id').
5) אספן OpenTelemetry: Reference Pipeline
yaml receivers:
otlp:
protocols: { http: {}, grpc: {} }
prometheus:
config:
scrape_configs:
- job_name: kube-nodes static_configs: [{ targets: ['kubelet:9100'] }]
processors:
batch: {}
memory_limiter: { check_interval: 1s, limit_mib: 512 }
attributes:
actions:
- key: deployment. environment value: ${ENV}
action: insert tail_sampling:
decision_wait: 5s policies:
- name: errors type: status_code status_code: { status_codes: [ERROR] }
- name: important-routes type: string_attribute string_attribute: { key: http. target, values: ["/payments","/login"] }
- name: probabilistic type: probabilistic probabilistic: { sampling_percentage: 10 }
exporters:
otlphttp/mimir: { endpoint: "https://mimir/api/v1/push" }
otlphttp/tempo: { endpoint: "https://tempo/api/traces" }
loki:
endpoint: https://loki/loki/api/v1/push labels:
attributes:
env: "deployment. environment"
service: "service. name"
service:
pipelines:
metrics: { receivers: [prometheus, otlp], processors: [memory_limiter, batch], exporters: [otlphttp/mimir] }
logs: { receivers: [otlp], processors: [batch], exporters: [loki] }
traces: { receivers: [otlp], processors: [memory_limiter, attributes, tail_sampling, batch], exporters: [otlphttp/tempo] }
6) התראה: SLO ורב כוויות
הרעיון: התראה אינה ברמה של ”מעבד> 80%”, אלא על צריכת תקציב שגיאה.
תבניות PromQL:promql
5-minute error rate err_ratio_5m =
sum(rate(http_requests_total{status=~"5.."}[5m])) /
sum(rate(http_requests_total[5m]))
Quick burn (1m window)
(err_ratio_1m / (1 - SLO)) > 14. 4
Slow burn (30m)
(err_ratio_30m / (1 - SLO)) > 2
Latency (היסטוגרמות):
promql latency_p95 =
histogram_quantile(0. 95, sum by (le) (rate(http_request_duration_seconds_bucket[5m])))
7) לוחות מחוונים: מבנה תיקייה
00_Overview - פלטפורמה: SLO, p95, 5xx%, קיבולת, תקריות פעילות.
10_Services - על ידי שירותים: RPS, p95/p99, שגיאות, משחרר (אנוטציות).
20_Infra - K8s/nodes/story/network, etcd, בקרים.
30_DB/Queues - PostgreSQL/Redis/Kafka/RabbitMQ.
40_Edge/DNS/CDN/WAF - כניסה, אל-בי, חוקי WAF.
50_Synthetic-כיפוף ותסריטים חסרי ראש.
60_Cost/FinOps - אחסון, חקירה, חם/קר, תחזית.
כל פנל: תיאור, יחידות, בעלים, לינק, קידוח.
8) יומנים: סדנת LogQL
logql
API errors
{app="api", level="error"} = "Exception"
Nginx 5xx in 5 minutes
{app="nginx"} json status=~"5.." count_over_time([5m])
Extract Fields
{app="payments"} json code!="" unwrap duration avg()
9) רצועות: TrackQL וטריקים
מצא את התוחלת האיטית ביותר:
{ service. name = "api" } duration > 500ms
כריך SQL איטי בשאילתה איטית:
{ name = "HTTP GET /order" } child. span. name = "SELECT" & child. duration > 50ms
10) סינתטיים ועודפים
יצואנית Blackbox-Exporter: HTTP/TLS/DNS מתוך 3 אזורים/ASN.
ללא ראש: התחברות/הפקדה תסריטים מתוכננים.
התראות מניין: מופעלות אם אזור 2 רואה כישלון.
עמוד מצב: עדכונים אוטומטיים + הערות ידניות.
11) אחסון ושימור
מטריצות: ימים חמים 7-30 (שורות מהירות), כללי ירידה/הקלטה, אחסון עצמים קרים (חודשים).
יומנים: חם 3-7 ימים, ואז S3/GCS עם אינדקס (Loki chank store/ELK ILM).
עקבות: 3-7 ימים ”תמיד _ און” + אחסון ארוך טווח עבור דגימות (דגימת זנב/דחוי).
- רולובר בגודל ובזמן; תקציב לבקשות (מכסות/גבולות).
- מדיניות נפרדת עבור פרוד/במה ונתוני אבטחה.
12) רגישות מרובה
הפרדה בין ”דייר ”/” שם ”/מרחבים, תבניות אינדקס והחלטות.
תגי משאבים לחיוב: ”דייר”, ”שירות”, ”צוות”.
ייבא לוחות מחוונים/התראות במרחבים של צוותים ספציפיים.
13) בטיחות וציות
TLS/mTLS מסוכנים לגבות, HMAC לבריאות פרטית.
RBAC לקריאה/כתיבה, ביקורת כל הבקשות וההתראות.
מהדורת PII בקצה; איסור על סודות ביומנים; DSAR/Hold משפטי.
בידוד: אשכולות נפרדים/מרחבי נימוס לתחומים רגישים.
14) FinOps: עלות יכולת התצפית
אנו מפחיתים את הקרדינליות של התוויות וההיגיון בבליעה (ולא בבקשות).
דגימת מסלול + המטרה תמיד-על לנתיבים קריטיים.
מנמיך/מקליט כללים להתקבצות כבדה.
ארכיון גישה נדירה לחפץ קר.
"אחסון _ cost _ gb _ day", "query _ cost _ hour", "cost _ per _ rps'," cost _ per _ 9 ".
15) CI/CD ומבחני תצפית
קישור מדדים/יומנים ב-CI: איסור על ”פיצוץ” של קרדינליות, אימות של היסטוגרמות/יחידות.
מבחני חוזה תצפית: נדרשים שדות מדדים/לוג, "trace _ id' בתוכנות ביניים.
הקנריים: הערות של פרסומים על גרפים, SLO-אוטומטי-rollback.
16) דוגמאות: שאילתות מהירות
נקודות סוף עליונות על ידי שגיאה:promql topk(10, sum by (route) (rate(http_requests_total{status=~"5.."}[5m])))
חנק מעבד:
promql sum by (namespace, pod) (rate(container_cpu_cfs_throttled_seconds_total[5m])) > 0
קפקא לג:
promql max by (topic, group) (kafka_consumergroup_lag)
מתוך יומנים למסלולים (Loki = Tempo): pass 'trace _ id' as קישור לטמפו UI/dashboard.
17) איכות ערימה: רשימה
[ ] סכימות מטריות/לוג/עקבות ויחידות מוסכמות.
[ ] trace _ id' ברישומים ומדדים, קידוח מלוחות.
[ ] התראות SLO רב-צריבה ללא נפנוף (quorum/multi-window).
[ ] למטה, מכסות בקשה, מגבלות שלב/טווח.
[ ] שיעורי שימור ואחסון מתועדים ומיושמים.
[ ] RBAC/Audit/PII.
[ ] לוחות מחוונים: בעלים, ספרי ריצה, 2-3 מסכים, תגובה מהירה.
[ ] FinOps-Dashboard (כרכים, עלות, דוברים עליונים).
18) תוכנית יישום (3 איטרציות)
1. MVP (2 שבועות): Prometheus # Mimir, Loki, Tempo; אוטל אספן; לוחות מחוונים בסיסיים והתראות SLO; דוגמיות מהקופסה השחורה.
2. סקאלה (3-4 שבועות): דגימת זנב, ירידה במחיצה, בליעה רב-תחומית, RBAC/Spaces, FinOps-Dashboard.
3. Pro (4 + שבועות): rollback אוטומטית על SLO, סינתטיקה ללא ראש של נתיבי מפתח, Ligal Hold, SLO portance ודיווח.
19) אנטי דפוסים
”גרפיקה יפה ללא SLO” - אין פעולה = אין תועלת.
תוויות קרדינליות גבוהות (”user _ id',” request _ id') - פיצוץ של זיכרון ועלות.
יומנים ללא JSON וללא "trace _ id' - אין קורלציה.
התראות משאבים במקום סימפטומים - רעש וכוננות שחוק.
חוסר במדיניות שימור - עלייה במחיר בלתי מבוקר.
20) מיני ־ FAQ
מה לבחור, לוקי או אייל?
ELK לחיפוש/היבטים מורכבים; לוקי זול יותר ומהיר יותר לתרחישים דמויי גריפ. בני-כלאיים משמשים לעתים קרובות.
כולם צריכים עקבות?
כן, לפחות על נתיבי מפתח (התחברות, קופה, תשלומים) עם דגימת זנב - זה מאיץ באופן דרמטי RCA.
איך להתחיל מאפס?
Otel Collector = Mimir/Loki/Tempo # דוגמאות SLO בסיסיות ו ־ Blackbox # ואז לוחות מחוונים והתראות כוויות.
סך הכל
מחסנית התצפית אינה מערכת של כלים שונים, אלא מערכת עקבית: תקני נתונים אחידים * M-L-T קורלציה * התראת SLO וסינתטיים * בטיחות ו-FinOps. ללכוד שרטוטים, לתייג משמעת ושימור, לחבר את Otel, להוסיף Drilldown ו-אוטומטי Rollback - ואתה מקבל אמינות ניהול במחיר מובן.