פורסם

Prometheus

שרת מטריקות ומסד נתונים של סדרות זמן בקוד פתוח (Apache-2.0, ‏CNCF): הוא אוסף מטריקות ב-HTTP, שומר אותן מקומית ועונה לשאילתות PromQL ולחוקי התראה. מתאים לצוות שרוצה את המטריקות של השרתים והאפליקציות, ואת לוחות Grafana מעליהן, על שרת משלו.

משאבים לפי רמת עומס

מה האפליקציה עצמה צריכה בכל רמה, לצד מה שאנחנו ממליצים לשרת שמריץ רק אותה.

רמהמה זה אומרדרישות האפליקציהמומלץ
קלהערכהעד 10,000 סדרות זמן פעילות שנאספות כל 15 שניות (כ-667 דגימות בשנייה), עם ה-retention של ברירת המחדל, 15 יום: ‏Prometheus עצמו וכמה exporters על כמה שרתים.0.25 vCPU · 0.5 GiB RAM · 2.5 GiB דיסק0.42 vCPU · 2.1 GiB RAM · 12.19 GiB דיסק
בינוניהערכהעד 100,000 סדרות זמן פעילות כל 15 שניות (כ-6,667 דגימות בשנייה), ‏retention של 15 יום, עם כמה לוחות Grafana וחוקי התראה ששואלים אותו.1 vCPU · 1.5 GiB RAM · 18.6 GiB דיסק1.32 vCPU · 3.3 GiB RAM · 30.705 GiB דיסק
כבדהערכהעד 1,000,000 סדרות זמן פעילות כל 15 שניות (כ-66,667 דגימות בשנייה), ‏retention של 15 יום, הרבה לוחות ו-recording rules: קרוב לגבול של שרת אחד.2 vCPU · 8 GiB RAM · 183 GiB דיסק2.52 vCPU · 11.1 GiB RAM · 219.765 GiB דיסק

מומלץ = דרישות האפליקציה + baseline של המערכת + מרווח ביטחון (headroom), לפי מדיניות ה-sizing ‏2026.10.0. האפשרויות נשארות בברירת המחדל. ״הערכה״ פירושה שהמקורות לא נותנים מספר למקרה הזה, ולכן הוא מחושב מהם בשיטה שמפורטת תחת רכיבים. איך המספרים נבנים

לחישוב ב-Stack Sizer

קבצים מוכנים להפעלה

רמת תמיכה נתמך

תבנית Compose מהמקורות הרשמיים; עוד לא נבדקה בהרצה.

צור docker-compose

רכיבים

מה כל רכיב צריך בכל רמת עומס, לפני baseline ו-headroom.

vCPU / GiB RAM / GiB דיסק
רכיבקלבינוניכבדמקורות
Prometheus (app)0.25 / 0.5 / 2.51 / 1.5 / 18.62 / 8 / 183[5][7][12][13][16][20][22]
איך ההערכות מחושבות
  • Prometheus · קל: אין מספר רשמי ל-CPU ול-RAM. ‏RAM: כ-4.5 GiB למיליון סדרות ב-15 שניות (2 ועוד 2.5 GiB, מספר קהילתי) ← 0.045 GiB, ועוד 0.25 GiB משוערים ל-Go runtime, לממשק, לחוקים ולשאילתות ← 0.5. ‏vCPU: ‏667 דגימות בשנייה ← רבע ליבה. Disk: ‏1,296,000 s × ‏667 × ‏2 B = ‏1.609 GiB, ועוד 10% ל-compaction ‏(0.161), מינימום WAL של 3 × 128 MB ‏(0.375). ‏image דחוס 106,733,760 B ‏(0.099 GiB) ועוד 254,005,248 B פרוס (0.237 GiB), ה-containerd store שומר את שניהם = ‏0.336 GiB. סך הכול 2.481 ← 2.5.
  • Prometheus · בינוני: RAM: ‏100,000 סדרות × 4.5 GiB למיליון = 0.45, ועוד 0.25 בסיס, ועוד 0.745 לשאילתה אחת בגבול ‎--query.max-samples ‏(50,000,000 × 16 B לדגימה) = 1.445 ← 1.5. ‏vCPU: ליבה אחת ל-6,667 דגימות בשנייה, ל-compaction ולשאילתות של לוחות. Disk: ‏1,296,000 s × ‏6,667 × ‏2 B = ‏16.093 GiB, ועוד 10% ל-compaction ‏(1.609), ‏WAL של 3 שעות ב-8 B לדגימה (0.536), ‏image ‏0.336 = ‏18.574 ← 18.6.
  • Prometheus · כבד: RAM: ‏4.5 GiB למיליון סדרות (מספר קהילתי, כולל ההכפלה בגלל GC) ועוד 0.25 בסיס ועוד 2 × 0.745 לשתי שאילתות בגבול ‎--query.max-samples = ‏6.24, מעוגל ל-8 בשביל ה-page cache של chunks ו-blocks ב-mmap ששאילתות קוראות. ‏vCPU: ‏2 ל-66,667 דגימות בשנייה, ל-compaction ולחוקים. Disk: ‏1,296,000 s × ‏66,667 × ‏2 B = ‏160.933 GiB, ועוד 10% ל-compaction ‏(16.093), ‏WAL של 3 שעות ב-8 B לדגימה (5.364), ‏image ‏0.336 = ‏182.726 ← 183.

פורטים

פורטים ציבוריים נועדו לגישה מחוץ ל-stack, בדרך כלל דרך reverse proxy; פורטים פנימיים נשארים ברשת של ה-stack עצמו.

רכיבפורטחשיפהשימושמקורות
Prometheus9090/tcpפנימי בלבדWeb UI, PromQL HTTP API and /metrics; no login, so keep it on the internal network[1][2][6][7]

כל הפורטים בקטלוג, עם התנגשויות בין אפליקציות

משתמש והרשאות (UID/GID)

המשתמש שהתהליך של כל קונטיינר רץ תחתיו, והנתיבים שהוא כותב אליהם. ‏bind mount לאחד הנתיבים האלה חייב להיות ניתן לכתיבה על ידי ה-UID:GID הזה.

רכיבUID:GIDמשתמשמתחיל כ-rootכותב אלמקורות
Prometheus65534:65534nobodyלא/prometheus/etc/prometheus[1][2][8]

צמיחת אחסון

בכמה הנתונים של כל רכיב גדלים בחודש בכל רמת עומס, מעבר לדיסק שבפרופיל. ערך שמסומן ״הנחה״ הוא הנחה מוצהרת של ANAROQ ולא מספר מהמקורות; ההערות מפרטות על מה היא נשענת.

GiB לחודש
רכיבקלבינוניכבדמקורות
Prometheusנגזר000[16][17]
על מה מספרי הצמיחה נשענים
  • Prometheus: ‏retention לפי זמן (15d כברירת מחדל) מוחק blocks ישנים מהחלון, ולכן ה-TSDB מפסיק לגדול כשהוא מחזיק 15 יום, וזה כבר בדיסק של ה-preset. הגדלת ה-retention מוסיפה ברמה הזו כ-3.219 GiB לכל 30 יום נוספים (2,592,000 s × ‏667 דגימות בשנייה × 2 B). מחיקת blocks שפג תוקפם יכולה לקחת עד שעתיים.
  • Prometheus: ‏retention לפי זמן (15d כברירת מחדל) מוחק blocks ישנים מהחלון, ולכן ה-TSDB מפסיק לגדול כשהוא מחזיק 15 יום, וזה כבר בדיסק של ה-preset. הגדלת ה-retention מוסיפה ברמה הזו כ-32.187 GiB לכל 30 יום נוספים (2,592,000 s × ‏6,667 דגימות בשנייה × 2 B). מחיקת blocks שפג תוקפם יכולה לקחת עד שעתיים.
  • Prometheus: ‏retention לפי זמן (15d כברירת מחדל) מוחק blocks ישנים מהחלון, ולכן ה-TSDB מפסיק לגדול כשהוא מחזיק 15 יום, וזה כבר בדיסק של ה-preset. הגדלת ה-retention מוסיפה ברמה הזו כ-321.865 GiB לכל 30 יום נוספים (2,592,000 s × ‏66,667 דגימות בשנייה × 2 B). מחיקת blocks שפג תוקפם יכולה לקחת עד שעתיים.

שדרוג וחזרה לאחור

איך עוברים לגרסה חדשה בבטחה, ואיך חוזרים אחורה אם משהו נכשל.

קודם גיבוי

עוצרים את Prometheus ‏(docker compose stop prometheus) ומעתיקים את שני ה-volumes, ‎/prometheus ו-‎/etc/prometheus. ‏snapshot של ה-TSDB דרך ה-admin API הוא החלופה בלי עצירה, אם הפעלתם אותו. [16][19]

שלבי השדרוג

  1. בתוך קו ה-LTS של 3.13 (תיקונים נבחרים, נתמך עד 2027-07-31): קודם מגבים, אחר כך מגדירים בקובץ ה-Compose את ה-tag החדש של v3.13.x ומריצים docker compose pull ו-docker compose up -d. שני ה-volumes נשמרים. [3][9]
  2. לפני מעבר ל-minor חדש יותר או ל-LTS הבא, קוראים את רשומות ה-CHANGELOG שבאמצע, ובודקים את הקונפיגורציה הערוכה עם docker compose exec prometheus promtool check config /etc/prometheus/prometheus.yml אחרי שה-image החדש עולה. [1][14]
  3. בהפעלה Prometheus מריץ מחדש את ה-WAL לפני שהוא עונה לשאילתות; מחכים ל-‎/-/ready ובודקים את docker compose logs prometheus לפני שסומכים על הגרסה החדשה. [4][16]

חזרה לאחור

עוצרים את ה-stack, משחזרים את שני ה-volumes מהעותק שנלקח לפני השדרוג, מצמידים את ה-tag הקודם ומריצים docker compose up -d. [14][15]נגזר‏upstream מתעדים מגבלות downgrade רק מ-3.x ל-2.x (‏TSDB של 3.x קריא מ-2.55 ומעלה). ‏binary ישן עלול לא לקרוא רשומות WAL שכתב binary חדש (3.13.4 תיקן את זה רק ל-agent mode), ולכן שחזור העותק הוא הדרך הבטוחה.

שינויים שוברים ידועים

  • בגרסה 3.13.0: פרטי התחברות (כותרת Authorization, ‏basic auth, ‏bearer token, ‏OAuth2, כותרות מותאמות) כבר לא נשלחים אחרי redirect למארח אחר, ב-scraping, ב-remote read/write, בהתראות וב-service discovery. פונקציות ה-duration הניסיוניות min()‎ ו-max()‎ הפכו ל-min_of()‎ ו-max_of()‎. [14]
  • בגרסה 3.11.0: ‏service discovery של Hetzner: ‏__meta_hetzner_datacenter הוצא משימוש, ובתפקיד hcloud הוא אמור להפסיק לעבוד אחרי 1 ביולי 2026; ב-relabeling משתמשים במקומו ב-__meta_hetzner_hcloud_location וב-__meta_hetzner_robot_datacenter. [14]
  • בגרסה 3.9.0: דגל ה-feature ‏native-histograms כבר לא עושה דבר: ‏native histograms יציבים, אבל נאספים רק כש-scrape_native_histograms מוגדר בקונפיגורציה (נוסף ב-3.8). [14][15]
  • בגרסה 3.0.0: מ-2.x: ב-PromQL הנקודה (.) תואמת גם ירידת שורה, ו-range selectors לא כוללים את הגבול השמאלי; ערכי le ו-quantile מנורמלים (le="1" הופך ל-"1.0"); ‏scrape בלי Content-Type תקין נכשל אלא אם fallback_scrape_protocol מוגדר; ‏API v1 של Alertmanager ו-holt_winters הוסרו. עוברים קודם דרך 2.55: ‏TSDB של 3.x קריא רק ב-2.55 ומעלה. [14][15]

מגבלות

  • שרת אחד, בלי cluster ובלי שכפול: ה-TSDB המקומי הוא מסד נתונים של node יחיד. זמינות גבוהה או retention מעבר לדיסק אחד דורשים remote_write למערכת אחרת. [16]
  • ה-retention הוא 15 יום כברירת מחדל. מגדירים אותו ב-prometheus.yml תחת storage.tsdb.retention ‏(time, או size של עד 80-85% מהדיסק); דגלי ה-retention בשורת הפקודה הוצאו משימוש. [7][16][17]
  • התבנית אוספת רק את Prometheus עצמו. מוסיפים targets ב-volume של ‎/etc/prometheus: ‏docker compose exec prometheus vi /etc/prometheus/prometheus.yml, בודקים עם promtool check config, ואז טוענים מחדש עם docker compose kill -s SIGHUP prometheus. [1][2][4][5]
  • בקובץ שנוצר לכל אפליקציה יש רשת משלה (‎<app>-internal), ולכן Prometheus לא יכול לאסוף מטריקות משירותים של אפליקציות אחרות לפי השם שלהם, ו-Grafana לא יכול לשאול אותו, עד שמוסיפים את הרשת של השירות השני לשירות שמתחבר (למשל prometheus-internal ל-Grafana). [5][6]
  • ה-volume של הנתונים צריך להיות על מערכת קבצים מקומית: ‏NFS (כולל AWS EFS) ומערכות קבצים אחרות שאינן POSIX לא נתמכות ועלולות להשחית את ה-TSDB בלי אפשרות תיקון. [16]

אבטחה

  • ל-Prometheus אין התחברות: כל מי שמגיע לפורט 9090 קורא את כל הסדרות ומשתמש בכל ה-API של השאילתות. התבנית משאירה אותו ברשת Docker משלו (prometheus-internal), ואתם מגיעים אליו רק דרך הפרסום ב-loopback ו-SSH tunnel. בשביל Grafana באותו קובץ, מוסיפים את השירות שלו לרשת הזו ומשתמשים ב-http://prometheus:9090. [3][6]
  • ‏basic auth ו-TLS זמינים רק דרך קובץ web config ‏(‎--web.config.file, סיסמאות כ-hash של bcrypt), ש-upstream מסמנים כניסיוני והתבנית לא מגדירה. אין לחשוף את פורט 9090 דרך proxy בלי אימות לפניו. [6][18]
  • ה-admin API ‏(מחיקת סדרות, snapshots) וה-endpoints של lifecycle ‏(‎/-/reload, ‏‎/-/quit) נשארים כבויים, כמו בברירת המחדל של ה-image. מפעילים אותם רק כשמשתמשים לא מהימנים לא מגיעים לפורט. [6][7]
  • ה-container רץ כ-nobody ‏(65534:65534), לא כ-root, וב-image התיקיות ‎/prometheus ו-‎/etc/prometheus כבר בבעלות המשתמש הזה, ולכן named volumes לא צריכים chown. [1][2]

גיבוי

  • מגבים את שני ה-volumes. עותק של ‎/prometheus שנלקח בזמן ריצה עקבי אם משאירים בחוץ את chunks_head/‎, ‏wal/‎ ו-wbl/‎, במחיר של 2-3 השעות האחרונות; עצירה של Prometheus לפני ההעתקה שומרת הכול. את ‎/etc/prometheus מגבים בכל שינוי קונפיגורציה. [16]
  • לגיבוי בלי עצירה שכולל נתונים אחרונים, מפעילים ‎--web.enable-admin-api ושולחים POST ל-‎/api/v1/admin/tsdb/snapshot; ה-snapshot נשמר ב-‎/prometheus/snapshots. הדגל הזה דורש command שחוזר על ה-CMD של ברירת המחדל של ה-image. [1][3][19]

גרסה אחרונה

הגרסה האחרונה של הפרויקט
Prometheus 3.15.0 [9][10][11]
הפרופיל נבדק מול

Prometheus 3.13.4

קיימת גרסה חדשה יותר מזו שהפרופיל נבדק מולה.

נבדק ב-
14 באוק׳ 2026
מצב
נבדק ב-90 הימים האחרונים
איפה הגרסאות מתפרסמות
אתר הפרויקט

הגרסאות האחרונות של כל האפליקציות

גרסה

סטטוס הפרופיל
פורסם
נבדק מול גרסה
Prometheus 3.13.4
גרסת הפרופיל
1.0.0
המספרים אומתו
14 באוק׳ 2026
גרסת הקטלוג
2026.10.10
מדיניות sizing
2026.10.0
קובץ Compose
לא אומת
האתר הרשמי
prometheus.io

מקורות

  1. Dockerfile at v3.13.4 (busybox): prometheus.yml in /etc/prometheus, both dirs chowned to nobody, USER nobody, EXPOSE 9090, VOLUME /prometheus, CMD --config.file --storage.tsdb.path, no HEALTHCHECK (מאגר רשמי · נקרא 14 באוק׳ 2026)
  2. Registry config and layers of prom/prometheus:v3.13.4 (linux/amd64): User nobody (65534:65534), ExposedPorts 9090/tcp, Volumes /prometheus, no Healthcheck; busybox wget, sh and vi present (מדידה · נקרא 14 באוק׳ 2026)
  3. Prometheus 3.13 docs: Installation, Using Docker (docker run -p 9090:9090 prom/prometheus, named volume for /prometheus, extra flags must repeat the Dockerfile CMD, /etc/prometheus mount) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  4. Prometheus 3.13 docs: Management API (/-/healthy always 200, /-/ready, /-/reload only with --web.enable-lifecycle, or SIGHUP) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  5. documentation/examples/prometheus.yml at v3.13.4: the config baked into the image (scrape and evaluation interval 15s, one job scraping localhost:9090) (מאגר רשמי · נקרא 14 באוק׳ 2026)
  6. Prometheus docs: Security model (HTTP endpoints must not face the internet; anyone with HTTP access reads all series; admin API and lifecycle off by default) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  7. Prometheus 3.13 docs: prometheus command line (--web.listen-address 0.0.0.0:9090, retention flags deprecated in favour of the config file, --query.max-samples 50000000, --query.max-concurrency 20) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  8. Docker docs: Volumes, Populate a volume using a container (a new volume is filled with the image's files at the mount path) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  9. Prometheus: Long-term support (3.13 LTS released 2026-07-01, supported until 2027-07-31; 3.5 end of life; other minors get bug fixes for about 6 weeks), why 3.13.4 is pinned over 3.15.0 (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  10. Prometheus downloads: 3.15.0 / 2026-09-24 marked Latest, 3.13.4 / 2026-09-29 marked LTS (Release notes · נקרא 14 באוק׳ 2026)
  11. Docker Hub tags of prom/prometheus (v3.15.0 newest, v3.13.4 pushed 2026-09-29 after it, v3.5.5 last of the old LTS; -distroless variants beside the busybox ones) (מאגר רשמי · נקרא 14 באוק׳ 2026)
  12. Docker Hub tag prom/prometheus:v3.13.4 (linux/amd64): 106,733,760 B compressed; 9 layers decompressed and counted: 254,005,248 B (מדידה · נקרא 14 באוק׳ 2026)
  13. Docker: containerd image store keeps images compressed and uncompressed (more disk than the legacy drivers) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  14. CHANGELOG.md at v3.13.4 (3.13.0 credentials on cross-host redirects, 3.11.0 Hetzner SD labels, 3.9.0 native histograms, 3.0.0 breaking changes) (Release notes · נקרא 14 באוק׳ 2026)
  15. Prometheus 3.13 docs: Prometheus 3.0 migration guide (removed flags, PromQL changes, scrape Content-Type, le/quantile, TSDB readable from 2.55 on) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  16. Prometheus 3.13 docs: Storage (2 h blocks, 128 MB WAL segments with at least 3 kept, 1-2 bytes per sample, needed_disk_space formula, compaction up to 10% of retention, backups, no NFS) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  17. Prometheus 3.13 docs: Configuration (storage.tsdb.retention time, size and percentage in prometheus.yml, runtime reloadable; 15d when unset) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  18. Prometheus 3.13 docs: HTTPS and authentication (basic auth and TLS through --web.config.file, marked experimental) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  19. Prometheus 3.13 docs: HTTP API, TSDB admin APIs (snapshot under <data-dir>/snapshots, only with --web.enable-admin-api) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  20. Prometheus docs: Data model (a sample is a float64 or native histogram value and a millisecond timestamp) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  21. Prometheus LICENSE at v3.13.4: Apache License 2.0 (מאגר רשמי · נקרא 14 באוק׳ 2026)
  22. Robust Perception (Brian Brazil, Prometheus core developer), 2019: RAM of Prometheus 2.x, about 2 GiB for 1M series of cardinality plus about 2.5 GiB for ingestion at 15 s (קהילה · נקרא 14 באוק׳ 2026)
  23. Amazon Managed Service for Prometheus: pricing model (ingested samples, stored GB, query samples processed) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  24. Amazon Managed Service for Prometheus user guide: ingest metrics (remote_write from your own collector, managed scraper for EKS only, 150-day default retention) (תיעוד רשמי · נקרא 14 באוק׳ 2026)

כל אפליקציות ה-self-hosted