הגדרת journald לרישום מערכת אמין

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

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

יום אחד בסביבת production, PostgreSQL קרס: הדיסק התמלא—journald ב-tmpfs היה ללא הגבלה. לאחר אתחול, הלוגים נעלמו. מציאת שורש הבעיה ארכה יום שלם. זמן ההשבתה עלה על 8 שעות, והצוות בילה יומיים בניתוח חוזר. נשמע מוכר? ללא תצורה נכונה, יומן systemd הופך לקופסה שחורה. המהנדסים שלנו, עם ניסיון של 10+ שנים, מגדירים את journald כך שלוגים לעולם לא יאבדו, הדיסק לעולם לא יעלה על גדותיו, והנתונים זורמים למערכת מרכזית. זה מפחית את ה-MTTR ב-70% וחוסך עד 40% מתקציב האחסון באמצעות רוטציה ודחיסה. ב-200+ פרויקטים, חידדנו תצורות שעובדות באופן אמין. אנו משתמשים ב-Ansible לפריסה המונית, ומקצרים את הקמת הצי (50+ מכונות) ליום אחד. בפרויקט אחד, נתקלנו בשירות רועש שפגע ב-RateLimitBurst נמוך מדי—לוגים קריטיים נשמטו. לאחר התאמת התצורה והגדרת העברה ל-Loki, ה-MTTR ירד מ-4 שעות ל-30 דקות. צרו קשר לייעוץ—נתאים את התצורה האופטימלית לעומס שלכם.

כיצד להגדיר אחסון קבוע ומגבלות גודל?

כברירת מחדל, journald כותב ל-/run/log/journal/—tmpfs, נתונים אובדים באתחול. כדי להפעיל אחסון קבוע:

mkdir -p /var/log/journal systemd-tmpfiles --create --prefix /var/log/journal systemctl restart systemd-journald 

תצורה ב-mkdir -p /var/log/journal systemd-tmpfiles --create --prefix /var/log/journal systemctl restart systemd-journald :

[Journal]
Storage=persistent
Compress=yes
SystemMaxUse=2G
SystemKeepFree=500M
SystemMaxFileSize=200M
SystemMaxFiles=10
MaxRetentionSec=1month
MaxFileSec=1week
RateLimitInterval=30s
RateLimitBurst=10000
ForwardToSyslog=no
ForwardToKMsg=no
ForwardToConsole=no

/etc/systemd/journald.conf—מגבלת דיסק. בלעדיה, journald יכול לצרוך את כל הדיסק תוך ימים תחת רישום כבד. [Journal] Storage=persistent Compress=yes SystemMaxUse=2G SystemKeepFree=500M SystemMaxFileSize=200M SystemMaxFiles=10 MaxRetentionSec=1month MaxFileSec=1week RateLimitInterval=30s RateLimitBurst=10000 ForwardToSyslog=no ForwardToKMsg=no ForwardToConsole=no מגן מפני סערות לוג: אם שירות פולט יותר מ-10,000 הודעות ב-30 שניות, עודפים נשמטים. עבור אפליקציות רועשות (למשל, nginx debug), העלו מגבלה זו באמצעות תצורת drop-in.

השוואת תצורה: בסיסי מול Production

פרמטר בסיסי (tmpfs) Production (קבוע)
אחסון volatile persistent
SystemMaxUse 10% מהדיסק 2G (מפורש)
RateLimitBurst 1000 10000
MaxRetentionSec 3 ימים חודש אחד
דחיסה כן כן

למה RateLimit חשוב

ללא RateLimit, פרץ לוג משירות פגום יכול לסתום את journald, ולגרום לאובדן הודעות קריטיות מיחידות אחרות. הגדרת # Логи конкретного юнита с отслеживанием journalctl -u nginx.service -f # Логи с момента последней загрузки journalctl -b # За последний час journalctl --since "1 hour ago" # Только ошибки и критичные journalctl -p err -b # JSON-вывод для парсинга journalctl -u myapp -o json-pretty --since today # Логи конкретного PID journalctl _PID=1234 ו-relabel_configs חיונית ליציבות. אנו ממליצים על 10,000 הודעות לכל 30 שניות עבור רוב השירותים, ועד 50,000 עבור שירותים רועשים.

כיצד לסנן לוגים לפי עדיפות ויחידה?

צפייה מקומית:

# Логи конкретного юнита с отслеживанием
journalctl -u nginx.service -f
# Логи с момента последней загрузки
journalctl -b
# За последний час
journalctl --since "1 hour ago"
# Только ошибки и критичные
journalctl -p err -b
# JSON-вывод для парсинга
journalctl -u myapp -o json-pretty --since today
# Логи конкретного PID
journalctl _PID=1234

להעברה מרכזית, הסינון מוגדר בצד הסוכן: ב-promtail דרך include_matches, ב-Filebeat דרך scrape_configs: - job_name: journal journal: max_age: 12h labels: job: systemd-journal host: ${HOSTNAME} relabel_configs: - source_labels: [__journal__systemd_unit] target_label: unit - source_labels: [__journal_priority_keyword] target_label: level . זה שולח רק לוגים נחוצים, חוסך רוחב פס ואחסון.

למה להגביל את גודל היומן?

בשרת עם כתיבת לוג כבדה, ללא filebeat.inputs: - type: journald id: everything include_matches: - _SYSTEMD_UNIT=nginx.service - _SYSTEMD_UNIT=postgresql.service - PRIORITY=0 - PRIORITY=1 - PRIORITY=2 - PRIORITY=3 , journald יכול לתפוס עד 100% מהשטח הפנוי תוך 2-3 ימים. זה גורם לכשלי daemon, נעילות SSH, ואובדן נתונים. מגבלת 2G שומרת על הדיסק ומשאירה שירותים חיים. רוטציה נכונה גם מקצרת את ה-MTTR—אתם מוצאים שגיאות מהר יותר. הלקוחות שלנו חוסכים עשרות דולרים—כ-$9–13 בחיסכון בתשתית באמצעות דחיסה ורוטציה.

כיצד להעביר לוגים לאחסון מרכזי?

עבור Loki, השתמשו ב-promtail עם קלט journal:

---
scrape_configs:
  - job_name: journal
    journal:
      max_age: 12h
      labels:
        job: systemd-journal
        host: ${HOSTNAME}
    relabel_configs:
      - source_labels: [__journal__systemd_unit]
        target_label: unit
      - source_labels: [__journal_priority_keyword]
        target_label: level

עבור Elasticsearch דרך Filebeat:

---
filebeat.inputs:
  - type: journald
    id: everything
    include_matches:
      - _SYSTEMD_UNIT=nginx.service
      - _SYSTEMD_UNIT=postgresql.service
      - PRIORITY=0
      - PRIORITY=1
      - PRIORITY=2
      - PRIORITY=3
---

השוואה: Promtail מול Filebeat עבור journald

תכונה Promtail (Loki) Filebeat (Elastic)
מערכת יעד Grafana Loki Elasticsearch
סינון relabel_configs include_matches
ביצועים 20% מהיר יותר תחת אותו עומס גבוה (Go)
ניתוח pipeline stages processors
דוגמה מלאה לתצורת promtail ל-production
---
scrape_configs:
  - job_name: journal
    journal:
      max_age: 24h
      labels:
        job: systemd-journal
        host: "${HOSTNAME}"
    relabel_configs:
      - source_labels: [__journal__systemd_unit]
        target_label: unit
      - source_labels: [__journal_priority_keyword]
        target_label: level
      - source_labels: [__journal__hostname]
        target_label: hostname
      - replacement: "auto"
        target_label: agent
    pipeline_stages:
      - drop:
          selector: '{level="debug"}'

תהליך הגדרת journald במפתח

  1. ביקורת על תצורת journald הנוכחית בכל השרתים.
  2. הפעלת אחסון קבוע ורוטציה עם מגבלות מכוילות לעומס שלכם.
  3. אינטגרציה עם רישום מרכזי (Loki, Elasticsearch, Syslog).
  4. יצירת runbook למהנדסי on-call ותיעוד.
  5. בדיקת עומס: הרצת stress test לאימות ללא אובדן לוג.

הגדרת שרת בודד אורכת עד 4 שעות. עבור צי של 50+ מכונות, פריסה דרך Ansible אורכת 1-2 ימים. התמחור הוא לפי פרויקט—צרו קשר להערכה. אנו מבטיחים יומן אמין לאחר התצורה.

מה כלול בהגדרת journald

  • תיעוד: סכמת תצורה מפורטת, תיאורי מגבלות, מדריך on-call.
  • אינטגרציית נראות: חיבור ל-Loki או Elasticsearch, לוחות מחוונים של Grafana.
  • Runbook והדרכה: תרחישי תגובה לאירועים, הדרכת צוות על journalctl.
  • תמיכה לאחר פריסה: שבועיים של ניטור והתאמות תצורה.

שגיאות נפוצות בהגדרת journald

  • ללא אחסון קבוע: לוגים אובדים באתחול—אי אפשר למצוא שורש בעיה.
  • חסר SystemMaxUse: תחת עומס שיא, journald ממלא את הדיסק, שירותים קורסים.
  • RateLimitBurst נמוך מדי: שירות רועש משמיט הודעות קריטיות.
  • ללא העברה: לוגים נשארים מקומיים, ניטור מרכזי עיוור.

המהנדסים שלנו מבטלים סיכונים אלה—לאחר התצורה, היומן מתנהג באופן צפוי.

בשורה התחתונה: תצורה נכונה של systemd-journald היא הבסיס לכל ערימת נראות. אם אתם רוצים להפסיק לאבד לוגים ולהפחית זמן השבתה, הזמינו הגדרת journald מהצוות שלנו. צרו קשר לייעוץ כדי להתאים את התצורה לפרויקט שלכם. למומחים שלנו יש ניסיון של 10+ שנים והם השלימו 200+ פרויקטים של הגדרת לוגים.

תיעוד רשמי של systemd-journald