Grafana Loki
שרת לאיסוף לוגים של Grafana Labs שמאנדקס רק labels ושומר את הלוגים כ-chunks דחוסים, עם שאילתות LogQL מתוך Grafana. רץ כאן כ-container יחיד עם אחסון על מערכת הקבצים. מתאים לשרת אחד או לכמה שרתים שרוצים את הלוגים של ה-containers והמערכת במקום אחד שאפשר לחפש בו.
משאבים לפי רמת עומס
מה האפליקציה עצמה צריכה בכל רמה, לצד מה שאנחנו ממליצים לשרת שמריץ רק אותה.
| רמה | מה זה אומר | דרישות האפליקציה | מומלץ |
|---|---|---|---|
| קלהערכה | עד 1 GB של לוגים ביום משרת אחד וה-containers שלו, עד 500 streams פעילים, כמה אנשים ששואלים על 30 הימים האחרונים מתוך Grafana. | 0.5 vCPU · 1 GiB RAM · 6.361 GiB דיסק | 0.72 vCPU · 2.7 GiB RAM · 16.631 GiB דיסק |
| בינוניהערכה | עד 5 GB של לוגים ביום מכמה שרתים, עד 2,000 streams פעילים, דשבורדים וכללי התראה ששואלים את Loki לאורך היום. | 1 vCPU · 2 GiB RAM · 31.027 GiB דיסק | 1.32 vCPU · 3.9 GiB RAM · 44.997 GiB דיסק |
| כבדהערכה | עד 20 GB של לוגים ביום, התקרה של מצב monolithic לפי התיעוד, עד 5,000 streams פעילים (מגבלת ברירת המחדל לכל tenant), שימוש כבד ב-LogQL. | 2 vCPU · 4 GiB RAM · 123.527 GiB דיסק | 2.52 vCPU · 6.3 GiB RAM · 151.372 GiB דיסק |
מומלץ = דרישות האפליקציה + baseline של המערכת + מרווח ביטחון (headroom), לפי מדיניות ה-sizing 2026.10.0. האפשרויות נשארות בברירת המחדל. ״הערכה״ פירושה שהמקורות לא נותנים מספר למקרה הזה, ולכן הוא מחושב מהם בשיטה שמפורטת תחת רכיבים. איך המספרים נבנים
קבצים מוכנים להפעלה
רמת תמיכה נתמך
תבנית Compose מהמקורות הרשמיים; עוד לא נבדקה בהרצה.
רכיבים
מה כל רכיב צריך בכל רמת עומס, לפני baseline ו-headroom.
| רכיב | קל | בינוני | כבד | מקורות |
|---|---|---|---|---|
| Loki (app) | 0.5 / 1 / 6.361 | 1 / 2 / 31.027 | 2 / 4 / 123.527 | [7][10][11][26][28] |
איך ההערכות מחושבות
- Loki · קל: אין sizing רשמי למצב monolithic. RAM: שעתיים (max_chunk_age) של 1 GB ביום הם 0.083 GB של chunks פתוחים, ועוד results cache של 100 MB וה-runtime של Go לכל הרכיבים ← 1 GiB. vCPU: gzip של כ-12 KB לשנייה ושאילתות LogQL קצרות ← חצי ליבה. Disk: image של 0.194 GiB (0.045 דחוס ועוד 0.149 פרוס, ה-containerd store שומר את שניהם) ועוד 30 יום × 1 GB / 5 (יחס gzip משוער) = 6, ועוד WAL של שעתיים של קליטה × 2 = 0.167 ← 6.361; GB נספר כ-GiB.
- Loki · בינוני: RAM: שעתיים של 5 GB ביום הם 0.417 GB של chunks פתוחים, ועוד results cache של 100 MB ועד 4 שאילתות בו-זמנית (querier max_concurrent) ← 2 GiB. vCPU: ליבה אחת לדחיסה ולשאילתות של דשבורדים על כמה ימים של נתונים. Disk: image של 0.194 GiB (0.045 דחוס ועוד 0.149 פרוס, ה-containerd store שומר את שניהם) ועוד 30 יום × 5 GB / 5 (יחס gzip משוער) = 30, ועוד WAL של שעתיים של קליטה × 2 = 0.833 ← 31.027; GB נספר כ-GiB.
- Loki · כבד: RAM: שעתיים של 20 GB ביום הם 1.667 GB של chunks פתוחים, ועוד cache ו-4 שאילתות בו-זמנית ← 4 GiB, בקשה של ingester אחד בדרגה הקטנה של microservices בתיעוד (2 CPU, 4 Gi). vCPU: 2, אותה בקשה; התיעוד מזהיר ששאילתות עלולות לדרוש פי 10. Disk: image של 0.194 GiB (0.045 דחוס ועוד 0.149 פרוס, ה-containerd store שומר את שניהם) ועוד 30 יום × 20 GB / 5 (יחס gzip משוער) = 120, ועוד WAL של שעתיים של קליטה × 2 = 3.333 ← 123.527; GB נספר כ-GiB.
פורטים
פורטים ציבוריים נועדו לגישה מחוץ ל-stack, בדרך כלל דרך reverse proxy; פורטים פנימיים נשארים ברשת של ה-stack עצמו.
משתמש והרשאות (UID/GID)
המשתמש שהתהליך של כל קונטיינר רץ תחתיו, והנתיבים שהוא כותב אליהם. bind mount לאחד הנתיבים האלה חייב להיות ניתן לכתיבה על ידי ה-UID:GID הזה.
צמיחת אחסון
בכמה הנתונים של כל רכיב גדלים בחודש בכל רמת עומס, מעבר לדיסק שבפרופיל. ערך שמסומן ״הנחה״ הוא הנחה מוצהרת של ANAROQ ולא מספר מהמקורות; ההערות מפרטות על מה היא נשענת.
על מה מספרי הצמיחה נשענים
- Loki: ה-retention כבוי כברירת מחדל, ולכן Loki שומר כל לוג ולא מוחק לפי מקום פנוי: 30 יום × 1 GB ביום / 5 (יחס gzip משוער; chunk_encoding gzip) = 6 GiB בחודש, בלי סוף. כשה-retention של ה-compactor פעיל, הדיסק מתייצב בערך על תקופת retention אחת.
- Loki: ה-retention כבוי כברירת מחדל, ולכן Loki שומר כל לוג ולא מוחק לפי מקום פנוי: 30 יום × 5 GB ביום / 5 (יחס gzip משוער; chunk_encoding gzip) = 30 GiB בחודש, בלי סוף. כשה-retention של ה-compactor פעיל, הדיסק מתייצב בערך על תקופת retention אחת.
- Loki: ה-retention כבוי כברירת מחדל, ולכן Loki שומר כל לוג ולא מוחק לפי מקום פנוי: 30 יום × 20 GB ביום / 5 (יחס gzip משוער; chunk_encoding gzip) = 120 GiB בחודש, בלי סוף. כשה-retention של ה-compactor פעיל, הדיסק מתייצב בערך על תקופת retention אחת.
שדרוג וחזרה לאחור
איך עוברים לגרסה חדשה בבטחה, ואיך חוזרים אחורה אם משהו נכשל.
קודם גיבוי
עוצרים את Loki (docker compose stop loki), ואז מעתיקים את כל ה-volume של /loki עם container עזר, למשל docker run --rm -v <volume>:/loki:ro -v "$PWD":/backup alpine tar czf /backup/loki.tgz -C /loki . ב-image של Loki אין shell ואין tar. [2][14][15]נגזרupstream לא מתעדים נוהל גיבוי לאחסון על מערכת הקבצים. כל נתיבי הנתונים (chunks, אינדקס TSDB, WAL, compactor) נמצאים תחת path_prefix /loki, ו-BusyBox הוסר מה-image ב-3.5.8, ולכן ההעתקה רצה מחוצה לו.
שלבי השדרוג
- קוראים את מדריך השדרוג ואת ה-release notes של כל גרסה שעוברים; upstream ממליצים לשדרג גרסה אחר גרסה ולבדוק קודם דילוג על גרסאות. אחר כך מגבים את /loki, מגדירים את ה-tag המוצמד החדש ומריצים docker compose pull ו-docker compose up -d. [15][16]
- עם קובץ הגדרות משלכם, בודקים אותו קודם: מריצים את ה-image החדש עם -config.file=<הקובץ שלכם> -verify-config=true, או משווים את הפלט של -print-config-stderr בין ה-tag הישן לחדש, כמו במדריך השדרוג. [15]
- אחרי ההפעלה Loki משחזר את ה-WAL; מחכים שה-container יהיה healthy (loki -health על /ready) ובודקים את docker compose logs loki לפני שסומכים עליו. [5][7][8]
חזרה לאחור
עוצרים את ה-stack, משחזרים ל-volume את העותק של /loki שנלקח לפני השדרוג, מצמידים את ה-tag הקודם ומריצים docker compose up -d. לוגים שהתקבלו אחרי הגיבוי אובדים. [15]נגזרמדריך השדרוג מכסה רק שדרוגים, לא חזרה לאחור; binary ישן על קבצי אינדקס ו-WAL שגרסה חדשה כתבה לא מתועד כבטוח, ואילו העותק מלפני השדרוג כן.
שינויים שוברים ידועים
- בגרסה 3.7.3: Promtail הוסר מפרויקט Loki (סוף החיים ב-2 במרץ 2026). מעבירים את שליחת הלוגים ל-Grafana Alloy; alloy convert ממיר הגדרות של Promtail להגדרות של Alloy. [16][18][19]
- בגרסה 3.7.0: labels שמחולצים ב-parsers בשאילתה (json, logfmt) כבר לא דורסים structured metadata עם אותו שם; שאילתות שנשענו על זה מחזירות תוצאות אחרות. [16]
- בגרסה 3.6.0: ממשק המשתמש המובנה של Loki עבר ל-plugin של Grafana (Loki Operational UI); Loki מגיש עכשיו רק את ה-APIs שה-plugin משתמש בהם. [17]
- בגרסה 3.5.8: BusyBox הוסר מה-image: אין /bin/sh, ls או wget, ולכן docker exec … sh ו-healthchecks עם shell או wget נכשלים. משתמשים ב-docker cp, ב-container עזר או ב-loki -health (3.7 ומעלה). [5][15]
- בגרסה 3.0.0: structured metadata פעיל כברירת מחדל ודורש אינדקס tsdb עם schema v13, אחרת Loki לא עולה; קודם עוברים ל-TSDB. מגבלות חדשות: 256 KB לשורה, 15 labels לסדרה; נוסף label בשם service_name; retention דורש delete_request_store. [15]
מגבלות
- התבנית היא רק שרת Loki; משהו צריך לשלוח אליו לוגים. Promtail הגיע לסוף חייו: משתמשים ב-Grafana Alloy (loki.write אל http://loki:3100/loki/api/v1/push; קריאת לוגים של containers דורשת את ה-Docker socket, ולכן אין לה תבנית), ב-Docker logging driver של Loki, או ב-OTLP ב-/otlp/v1/logs. [8][18][19][20][24]
- כל אפליקציה בקובץ שנוצר מקבלת רשת פנימית משלה, ולכן Grafana באותו קובץ עדיין לא מגיע ל-Loki: מוסיפים את loki-internal ל-networks של השירות grafana, ואז משתמשים ב-http://loki:3100 ככתובת ה-data source של Loki. [3][8]
- ה-Docker logging driver רץ בתוך ה-Docker daemon במארח, לא ברשת של Compose: מתקינים את grafana/loki-docker-driver:3.7.8-amd64 (או -arm64), מפעילים את publish-loopback ומגדירים loki-url ל-http://127.0.0.1:3100/loki/api/v1/push. [21][22][23]
- ה-retention כבוי: Loki שומר כל לוג לתמיד ולא מוחק כשהדיסק מתמלא. כדי להגביל, מפעילים retention ב-compactor, למשל בהוספת -compactor.retention-enabled=true -compactor.delete-request-store=filesystem -store.retention=744h אחרי -config.file=/etc/loki/local-config.yaml ב-command. [7][12][13]
- מצב monolithic עם אחסון על מערכת הקבצים מתאים לעד כ-20 GB ביום בשרת אחד. Grafana Labs לא תומכים באחסון על מערכת הקבצים ב-production; אין high availability, השרידות היא של הדיסק, ומיליוני קבצי chunk בתיקייה אחת יוצרים בעיות. [10][12]
- מגבלות ברירת המחדל לכל tenant: קליטה של 4 MB לשנייה (6 MB ב-burst), 5,000 streams פעילים, 256 KB לשורה, 15 labels לסדרה, ורשומות ישנות משבוע נדחות. כדאי לשמור על מעט labels עם מעט ערכים. [7][15]
- ההגדרות צרובות ב-image, ואין בו shell. כדי לשנות מעבר לדגלים בשורת הפקודה, מחברים קובץ משלכם ומפנים אליו את -config.file, כמו בתיעוד ההתקנה עם Docker. [1][4][15]
אבטחה
- ל-Loki אין אימות (auth_enabled false, tenant אחד): כל מי שמגיע לפורט 3100 יכול לקרוא את כל הלוגים ולשלוח חדשים. משאירים אותו ברשת הפנימית; publish-loopback ממפה אותו על 127.0.0.1 בלבד. agents במארחים אחרים צריכים reverse proxy עם אימות או mTLS לפניו. [2][9]
- לוגים מכילים לעיתים קרובות tokens, כתובות IP ומידע אישי. מי שיכול לשאול את Loki או את ה-Grafana שלו רואה אותם, ולכן מגבילים את הגישה ל-Grafana, מסננים שורות רגישות ב-agent וקובעים תקופת retention. [9][13]
- כברירת מחדל Loki שולח סטטיסטיקות שימוש אנונימיות ל-stats.grafana.org. כדי לכבות, מוסיפים -reporting.enabled=false ל-command, או מגדירים analytics.reporting_enabled: false בקובץ הגדרות משלכם. [2][7]
- ה-image רץ כמשתמש loki שאינו root (10001:10001) על בסיס distroless בלי shell. named volume עובד כמו שהוא; bind mount צריך להיות בבעלות 10001, או להריץ עם --user. [1][4][6]
גיבוי
- כל מה ש-Loki שומר נמצא ב-volume של /loki: chunks (תחת fake/ במצב tenant יחיד), אינדקס ה-TSDB, ה-WAL, קבצי ה-compactor וה-rules. מעתיקים אותו כש-Loki עצור, מ-container עזר, כי אין shell ב-image. [2][12][14]
- כדאי להחליט אם הלוגים שווים גיבוי: לעיתים קרובות רק ההגדרות חשובות, ולוגים ישנים אפשר להסיר עם retention. את קובץ ההגדרות או הדגלים שהוספתם שומרים יחד עם קובץ ה-Compose. [4][13]
גרסה אחרונה
- הגרסה האחרונה של הפרויקט
- Grafana Loki 3.7.8 [27]
- הפרופיל נבדק מול
Grafana Loki 3.7.8
הפרופיל נבדק מול הגרסה האחרונה.
- נבדק ב-
- 14 באוק׳ 2026
- מצב
- נבדק ב-90 הימים האחרונים
- איפה הגרסאות מתפרסמות
- תגיות ב-Docker Hub
גרסה
- סטטוס הפרופיל
- פורסם
- נבדק מול גרסה
- Grafana Loki 3.7.8
- גרסת הפרופיל
- 1.0.0
- המספרים אומתו
- 14 באוק׳ 2026
- גרסת הקטלוג
- 2026.10.10
- מדיניות sizing
- 2026.10.0
- קובץ Compose
- לא אומת
הפרויקט וחלופות
- האתר הרשמי
- grafana.com/oss/loki/
- קוד מקור
- github.com/grafana/loki
מקורות
- cmd/loki/Dockerfile at v3.7.8: distroless static:nonroot base, loki-docker-config.yaml copied to /etc/loki/local-config.yaml, /loki owned by 10001, USER 10001, EXPOSE 3100 (מאגר רשמי · נקרא 14 באוק׳ 2026)
- cmd/loki/loki-docker-config.yaml at v3.7.8 (the image's default config): auth_enabled false, http 3100, path_prefix /loki, filesystem chunks, tsdb v13 with 24h index (מאגר רשמי · נקרא 14 באוק׳ 2026)
- production/docker-compose.yaml at v3.7.8: grafana/loki:latest with 3100:3100 and the default config, no volume; Promtail and Grafana (datasource http://loki:3100) (Compose רשמי · נקרא 14 באוק׳ 2026)
- Loki docs at v3.7.8: Install Loki with Docker (single binary, runs as loki UID/GID 10001, -p 3100:3100, readiness at /ready) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
- cmd/loki/health.go at v3.7.8: loki -health requests http://localhost:3100/ready with a 5 s timeout; exit 0 on HTTP 200, else 1 (מאגר רשמי · נקרא 14 באוק׳ 2026)
- Registry config of grafana/loki:3.7.8 (linux/amd64): User 10001, ExposedPorts 3100/tcp, no Volumes, no Healthcheck, Entrypoint /usr/bin/loki, Cmd -config.file=/etc/loki/local-config.yaml (מדידה · נקרא 14 באוק׳ 2026)
- Loki configuration reference at v3.7.8: grpc_listen_port 9095, retention_enabled false, retention_period 0s (-store.retention), reporting_enabled true, ingestion and chunk defaults (תיעוד רשמי · נקרא 14 באוק׳ 2026)
- Loki HTTP API reference at v3.7.8: POST /loki/api/v1/push, POST /otlp/v1/logs, GET /ready (HTTP 200 when ready for traffic) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
- Loki docs at v3.7.8: Manage authentication (no built-in authentication layer; run an authenticating reverse proxy in front) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
- Loki docs at v3.7.8: Deployment modes (monolithic = -target=all, one process; for small read/write volumes of up to about 20 GB per day) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
- Loki docs at v3.7.8: Size the cluster (microservices mode only; smallest tier under 3 TB/day: ingester 2 CPU and 4 Gi each) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
- Loki docs at v3.7.8: Filesystem object store (not supported for production by Grafana Labs, no HA, no deletion by free space, chunk file count limits) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
- Loki docs at v3.7.8: Log retention (off by default, logs live forever; compactor retention_enabled, delete_request_store, retention_period, 24h index) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
- pkg/loki/config_wrapper.go at v3.7.8: with common.path_prefix, the WAL, compactor, rules-temp and TSDB directories default to paths under it (מאגר רשמי · נקרא 14 באוק׳ 2026)
- Loki docs at v3.7.8: Upgrade guide (3.6 AWS SDK v2, 3.5.8 BusyBox removed, 3.0 tsdb and v13 for structured metadata, new limits; -print-config-stderr diff) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
- Loki v3.7 release notes (loki health command #20313; Promtail removed as of 3.7.3; breaking: parsed labels no longer override structured metadata) (Release notes · נקרא 14 באוק׳ 2026)
- Loki v3.6 release notes (Loki UI moved to a Grafana plugin; Promtail deprecated, commercial support ending; SSD mode deprecated before 4.0) (Release notes · נקרא 14 באוק׳ 2026)
- Loki docs: Promtail agent (end of life as of March 2, 2026; no further updates; migrate to Grafana Alloy) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
- Grafana Alloy docs: Migrate from Promtail (Promtail EOL on March 2, 2026; alloy convert turns a Promtail config into an Alloy config) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
- Grafana Alloy docs: loki.source.docker (reads container logs from a Docker daemon, unix:///var/run/docker.sock in the example) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
- Loki docs at v3.7.8: Docker driver client (plugin installed on each Docker host; third-party support level, unlike Alloy) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
- Loki docs at v3.7.8: Docker driver configuration (loki-url per container, in Compose logging options or as the default in daemon.json) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
- Docker Hub tags of grafana/loki-docker-driver (3.7.8-amd64 and 3.7.8-arm64 pushed 2026-09-17) (מאגר רשמי · נקרא 14 באוק׳ 2026)
- Loki docs at v3.7.8: Ingesting logs using OpenTelemetry (OTLP attributes stored as structured metadata; 64 KB and 128 entries per line) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
- Loki LICENSE at v3.7.8: GNU Affero General Public License v3 (מאגר רשמי · נקרא 14 באוק׳ 2026)
- Docker Hub tag grafana/loki:3.7.8 (linux/amd64): 48,003,511 B compressed; 18 layers decompressed and counted: 160,082,432 B (מדידה · נקרא 14 באוק׳ 2026)
- Docker Hub tags of grafana/loki (3.7.8 newest stable on 2026-10-14, pushed 2026-09-17; 3.6.17 on the older line; main-* tags are unreleased builds) (מאגר רשמי · נקרא 14 באוק׳ 2026)
- Docker: containerd image store is the default on fresh Engine 29+ installs and keeps images compressed and uncompressed (תיעוד רשמי · נקרא 14 באוק׳ 2026)
- Grafana Cloud Logs: fully managed log aggregation by Grafana Labs, powered by Loki OSS (תיעוד רשמי · נקרא 14 באוק׳ 2026)