אתה מריץ את db.serverStatus() ורואה מאות שדות JSON. ללא אקספורטר, הנתונים האלה הם משקל מת. כאשר MongoDB קורס ב-3 לפנות בוקר והלוגים מראים רק קטעים, כל שעה נוספת של השבתה עולה לעסקים מאות דולרים בערך $9–13 בחיסכון. זו הסיבה שניטור אינו אופציה — הוא מרכיב קריטי בתשתית הייצור. לצוות שלנו יש ניסיון של 8+ שנים ב-DevOps ולמעלה מ-50 פרויקטים מוצלחים של ניטור MongoDB, מסטארטאפים ועד ארגונים עם עשרות shards. אנחנו בשוק כבר 5+ שנים, ומבטיחים ניטור אמין עם מהנדסים מוסמכים. אנו משתמשים ב-percona/mongodb_exporter — האקספורטר הבוגר ביותר שהופך נתוני אבחון למדדים עם תוויות נקיות. ללא ניטור, אתה מסתכן בהחמצת קפיצות חביון, כשלי replica פתאומיים, או thrashing של מטמון WiredTiger. תקרית אחת עם התראה שגויה יכולה לעלות בשעות של השבתה. מאמר זה מכסה ניסיון מעשי, מדדים שבאמת חוסכים לך, והתראות שאנחנו תמיד מגדירים. זיהוי בעיות בזמן מפחית משמעותית את עלויות ההשבתה.
שלב 1: צור משתמש MongoDB עבור האקספורטר
צור משתמש ב-MongoDB עם הרשאות מינימליות:
use admin
db.createUser({
user: "exporter",
pwd: "secret",
roles: [
{ role: "clusterMonitor", db: "admin" },
{ role: "read", db: "local" }
]
})התיעוד הרשמי של MongoDB על תפקידים מאשר שהתפקיד use admin db.createUser({ user: "exporter", pwd: "secret", roles: [ { role: "clusterMonitor", db: "admin" }, { role: "read", db: "local" } ] }) מספק גישת קריאה בלבד ל-clusterMonitor ול-serverStatus. זהו סט ההרשאות המינימלי.
שלב 2: הגדר את mongodb_exporter ב-Docker
הגדר את docker-compose.yml:
---
services:
mongodb-exporter:
image: percona/mongodb_exporter:0.40
command:
- --mongodb.uri=mongodb://exporter:secret@mongo:27017
- --collect-all
- --compatible-mode
ports:
- "9216:9216"
הדגל replSetGetStatus מאפשר מדדים תואמים ל-services: mongodb-exporter: image: percona/mongodb_exporter:0.40 command: - --mongodb.uri=mongodb://exporter:secret@mongo:27017 - --collect-all - --compatible-mode ports: - "9216:9216" הישן — שימושי אם כבר יש לך לוחות מחוונים. --compatible-mode מפעיל את כל האספנים: diagnosticdata, replicaset, shards, topmetrics, indexstats, dbstats, collstats. ללא זה, האקספורטר אוסף רק מדדי חיבור ופעולה בסיסיים.
שלב 3: התחל ואמת מדדים
התחל את הקונטיינר וודא שפורט 9216 משרת מדדים בפורמט Prometheus. השתמש ב-dcu/mongodb_exporter כדי לבדוק. אתה אמור לראות מדדים כמו --collect-all ו-mongodb_wiredtiger_cache_pages_evicted_by_application_threads_total.
למה מטמון WiredTiger חשוב לביצועים
WiredTiger משתמש ב-50% מהזיכרון פחות 1 GB כברירת מחדל. כאשר לחץ המטמון עולה על 90%, פינוי העמודים מתגבר — mongodb_wiredtiger_cache_bytes_currently_in_cache עולה, חביון השאילתות מטפס עד 200 ms. בפרויקט אחד, ראינו שאילתת אינדקס מאטה ב-200 ms עקב פינוי מטמון בלחץ של 95%. לאחר הגדלת המטמון ל-70% מהזיכרון, הבעיה נעלמה. עקוב אחר היחס max_bytes_configured ל-mongodb_rs_members_state — התראה ב-95% למשך 10 דקות. לחץ מטמון WiredTiger הוא אחד האינדיקטורים הראשונים לבעיות ביצועים. הניטור שלנו מזהה זאת תוך פחות מ-30 שניות.
מדדים קריטיים עבור replica sets
שלושה מדדים מרכזיים: מצב חבר, lag, ופעולות. mongodb_rs_members_optime_date מציג מצב: 1 (PRIMARY), 2 (SECONDARY), 6 (RECOVERING), 8 (DOWN). כל ערך שאינו 1 או 2 הוא מצב חירום. mongodb_rs_members_optime_date מאפשר לך לחשב את עיכוב השכפול: ההפרש בין PRIMARY ל-SECONDARY בשניות. התראה ב->30 שניות למשך 5 דקות. mongodb_rs_members_state לעיתים קרובות מתעלמים ממנו, אבל על אשכולות גדולים עיכוב יכול להוביל לאובדן נתונים במהלך failover.
מדדי MongoDB קריטיים בייצור
בייצור, אנו מתמקדים בחמש קבוצות מדדים. הנה הם בטבלה:
| מדד | תיאור | התראה אופיינית |
|---|---|---|
mongodb_rs_members_optime_date |
מצב replica set: 1 (PRIMARY), 2 (SECONDARY), 6 (RECOVERING), 8 (DOWN) | כל ערך שאינו 1 או 2 |
mongodb_wiredtiger_cache_bytes_currently_in_cache / max_bytes_configured |
זמן הפעולה האחרונה שהוחלה | עיכוב שכפול > 30 שניות |
mongodb_op_counters_total |
יחס מילוי מטמון WiredTiger | > 95% למשך 10 דקות |
mongodb_connections{state="current"} |
מוני פעולות: query, insert, update, delete, command | שינוי פתאומי ביחס לאחר deploy |
mongodb_rs_members_state |
חיבורים נוכחיים מול זמינים | near(available) |
מצב replica set. mongodb_rs_members_optime_date הוא האינדיקטור הראשון לבעיות. כל ערך מלבד 1 או 2 הוא מצב חירום. for: 5m בשילוב עם ההפרש בין PRIMARY ל-SECONDARY נותן את עיכוב השכפול. על אשכולות גדולים אנו מגדירים mongodb_op_counters_total וסף של 30 שניות כדי למנוע אזעקות שווא על קפיצות עומס קצרות.
מטמון WiredTiger משפיע ישירות על החביון. ניטור מדד זה מאפשר הרחבת מטמון בזמן או אופטימיזציה של שאילתות.
פעולות. groups: - name: mongodb rules: - alert: MongoDBReplicaMemberDown expr: mongodb_rs_members_state{} not in (1, 2) for: 2m labels: severity: critical - alert: MongoDBHighReplicationLag expr: | (max(mongodb_rs_members_optime_date{member_state="PRIMARY"}) - min(mongodb_rs_members_optime_date{member_state="SECONDARY"})) > 30 for: 5m labels: severity: warning annotations: summary: "MongoDB replication lag {{ $value }}s" - alert: MongoDBWiredTigerCachePressure expr: | mongodb_wiredtiger_cache_bytes_currently_in_cache / mongodb_wiredtiger_cache_max_bytes_configured > 0.95 for: 10m labels: severity: warning עם סוג query, insert, update, delete, command — פרופיל עומס. שינוי פתאומי ביחס לאחר deployment הוא הסימן הראשון לכך שהאפליקציה משתמשת במסד הנתונים באופן בלתי צפוי.
חיבורים. כאשר החיבורים הנוכחיים מתקרבים לזמינים, מסד הנתונים מתחיל לדחות חיבורים. התראה ב-80% מילוי.
מתי mongodb_exporter עדיף על dcu/mongodb_exporter הישן
percona/mongodb_exporter כולל 10 אספנים לעומת 3 ב-dcu/mongodb_exporter, מה שמשלש את כיסוי המדדים. הוא תומך בנתוני אבחון, סטטיסטיקות אוסף ואינדקס — כל מה שצריך לניתוח מעמיק. בנוסף, האקספורטר של percona מתוחזק באופן פעיל יותר ותואם ל-MongoDB 7.0+. למידע נוסף, ראה את עמוד ה-GitHub של הפרויקט. mongodb_exporter זה הוא הבחירה המומלצת לפריסות מודרניות.
דוגמאות להתראות Prometheus
---
groups:
- name: mongodb
rules:
- alert: MongoDBReplicaMemberDown
expr: mongodb_rs_members_state{} not in (1, 2)
for: 2m
labels:
severity: critical
- alert: MongoDBHighReplicationLag
expr: |
(max(mongodb_rs_members_optime_date{member_state="PRIMARY"}) - min(mongodb_rs_members_optime_date{member_state="SECONDARY"})) > 30
for: 5m
labels:
severity: warning
annotations:
summary: "MongoDB replication lag {{ $value }}s"
- alert: MongoDBWiredTigerCachePressure
expr: |
mongodb_wiredtiger_cache_bytes_currently_in_cache / mongodb_wiredtiger_cache_max_bytes_configured > 0.95
for: 10m
labels:
severity: warning
כיצד להגדיר ניטור לאשכול sharded
עבור MongoDB מפוצל, מדדים חשובים כוללים את ה-balancer:
-
mongodb_mongos_balancer_enabled— האם ה-balancer מופעל -
mongodb_ss_sharding_chunks_*— התפלגות chunks בין shards
אם chunks מחולקים בצורה לא אחידה, שאילתות מעמיסות על shard אחד בעוד אחרים בטלים. האקספורטר אוסף נתונים אלה רק כאשר מתחברים ל-mongos, לא ישירות ל-mongod.
טעויות נפוצות בהגדרת ניטור
| טעות | סימפטום | פתרון |
|---|---|---|
| הרשאות משתמש שגויות | מדדי שכפול ריקים | הענק תפקיד clusterMonitor וקריאה על local |
חסר הדגל --compatible-mode |
חוסר תאימות ללוחות מחוונים ישנים | הוסף דגל והפעל מחדש את הקונטיינר |
| חיבור ל-mongod במקום ל-mongos | אין מדדי sharding | ציין URI של mongos בתצורה |
מה כלול בהגדרת הניטור שלנו
הגדרת הניטור שלנו כוללת: פריסת אקספורטר מלאה, הגדרת גרידת Prometheus, 10+ כללי התראה, לוחות מחוונים מותאמים של Grafana למדדים מרכזיים, תיעוד runbook, ו-30 ימי תמיכה. הגדרה בסיסית (פריסה, גרידה, התראות מצב RS וחיבורים) — 4–6 שעות, החל מ-$500. ערימה מלאה עם collstats, indexstats, לוחות מחוונים ספציפיים לסכמה, ו-sharding — 1–2 ימים, החל מ-$1500. העלות מחושבת באופן פרטני לפי מורכבות הארכיטקטורה.
למה לבחור בצוות שלנו
עם ניסיון של 8+ שנים ב-DevOps, 50+ פרויקטים מוצלחים של ניטור MongoDB, ו-5+ שנים בשוק, אנו מבטיחים ניטור אמין ומוסמך. המהנדסים שלנו מוסמכים ב-MongoDB ו-Prometheus, ומבטיחים שיטות עבודה מומלצות. יש לנו רקורד מוכח של הפחתת השבתות ב-90% בסביבות ייצור.
הצוות שלנו יכול לעזור לך להגדיר ניטור לאשכול שלך. קבל ייעוץ לזיהוי צווארי בקבוק והצעת פתרונות.







