Filebeat, Promtail, Fluent Bit: איך לבחור

כאשר סוכן האיסוף מוגדר באופן שגוי, הלוגים אובדים ואינם ניתנים לשחזור. אנחנו עוזרים לכם לבחור ולהגדיר את Filebeat, Promtail או Fluent Bit עבור התשתית שלכם. הצוות שלנו מספק פרויקט מפתח מלא—מביקורת ועד הטמעה ותמיכה מתמשכת.

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

שאלות נפוצות

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

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

בחירת מעביר היומנים הנכון

סוכן העברת היומנים הוא החוליה הראשונה והקריטית ביותר בצינור רישום היומנים. כאן לרוב אובדים אירועים: Filebeat מפספס רוטציה של קובץ — אתה מאבד 2000 שורות. Promtail קורס על צומת — הוא שוכח את המיקום שלו. Fluent Bit צורך 100% מעבד בניתוח מחסניות שגיאה מרובות שורות ב-Java. בהתבסס על הנתונים שלנו, עד 5% מהיומנים אובדים עקב הגדרת סוכן שגויה. הגדרה נכונה אינה "הגדר ושכח" אלא ביקורת שוטפת והתאמה לתשתית.

עם ניסיון של 10+ שנים ב-DevOps ו-50+ פרויקטי רישום יומנים שהושלמו, אנו מספקים צינורות יומנים אמינים מאז 2016. מקרה אחד: הגדרת Fluent Bit עבור אשכול של 50 צמתים הפחיתה את צריכת המשאבים ב-40% וקיצצה את עלויות אחסון היומנים בחצי — חיסכון של 3,000 דולר בחודש. עלות הביקורת הטיפוסית שלנו נעה בין 1,500 ל-5,000 דולר בהתאם לגודל האשכול.

איזה סוכן לבחור עבור התשתית שלך?

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

פרמטר Filebeat Promtail Fluent Bit
שימוש בזיכרון ~30 MB ~25 MB מ-650 KB
שפה Go Go C
מערכות יעד ברירת מחדל Elasticsearch, Logstash Loki, Grafana Loki, Elastic, S3, Kafka
ריבוי שורות כן (regex) כן (regex, pipeline) כן (regex, parsers)
אינטגרציית Kubernetes באמצעות add_kubernetes_metadata טבעית (metadata מה-API) באמצעות kubernetes filter
גודל קובץ בינארי ~120 MB ~50 MB ~5 MB

Filebeat הוא הבחירה עבור Elastic Stack. יש לו מודולים (nginx, mysql) עם מפענחים מובנים מראש. Promtail אופטימלי עבור Loki — הוא מעשיר אוטומטית יומנים עם metadata של פודים ומשתמש ב-30% פחות זיכרון מ-Filebeat. Fluent Bit הוא הקל ביותר, קל פי 20 מ-Filebeat בזיכרון, אידיאלי עבור קצה, IoT ו-Kubernetes מוגבל במשאבים.

הגדרת Filebeat תוך התחשבות במקרי קצה

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

---
# /etc/filebeat/filebeat.yml
filebeat.inputs:
  - type: log
    enabled: true
    paths:
      - /var/log/app/*.log
    multiline.type: pattern
    multiline.pattern: '^\d{4}-\d{2}-\d{2}'
    multiline.negate: true
    multiline.match: after
    multiline.max_lines: 500
    multiline.timeout: 5s
    fields:
      app: myapp
      env: production
    fields_under_root: true
    scan_frequency: 10s
    close_inactive: 5m
    ignore_older: 24h
  - type: container
    paths:
      - /var/lib/docker/containers/*/*.log
    processors:
      - add_kubernetes_metadata:
          host: ${NODE_NAME}
          matchers:
            - logs_path:
                logs_path: "/var/lib/docker/containers/"
    processors:
      - drop_fields:
          fields: ["agent", "ecs", "host.os"]
          ignore_missing: true
output.logstash:
  hosts: ["logstash:5044"]
  loadbalance: true
  ttl: 30s
  compression_level: 3
queue.mem:
  events: 4096
  flush.min_events: 512
  flush.timeout: 5s
logging.level: warning
logging.to_files: true
logging.files:
  path: /var/log/filebeat
  name: filebeat
  keepfiles: 3

# /etc/filebeat/filebeat.yml filebeat.inputs: - type: log enabled: true paths: - /var/log/app/*.log multiline.type: pattern multiline.pattern: '^\d{4}-\d{2}-\d{2}' multiline.negate: true multiline.match: after multiline.max_lines: 500 multiline.timeout: 5s fields: app: myapp env: production fields_under_root: true scan_frequency: 10s close_inactive: 5m ignore_older: 24h - type: container paths: - /var/lib/docker/containers/*/*.log processors: - add_kubernetes_metadata: host: ${NODE_NAME} matchers: - logs_path: logs_path: "/var/lib/docker/containers/" processors: - drop_fields: fields: ["agent", "ecs", "host.os"] ignore_missing: true output.logstash: hosts: ["logstash:5044"] loadbalance: true ttl: 30s compression_level: 3 queue.mem: events: 4096 flush.min_events: 512 flush.timeout: 5s logging.level: warning logging.to_files: true logging.files: path: /var/log/filebeat name: filebeat keepfiles: 3 הוא הגורם הנפוץ ביותר ליומנים שבורים. מחסנית שגיאה ב-Java משתרעת על עשרות שורות, וללא תבנית נכונה כל שורה עפה כאירוע נפרד. התבנית multiline פירושה: אירוע חדש מתחיל בשורה המכילה תאריך, כל השאר הוא המשך של האירוע הקודם. ^\d{4}-\d{2}-\d{2} סוגר את ה-file descriptor אם הקובץ לא עודכן במשך 5 דקות. ללא זה, Filebeat מחזיק מאות descriptors פתוחים על שרת פעיל.

מדוע הגדרת ריבוי שורות נכונה היא קריטית?

מקרה אחרון: לקוח התלונן על יומנים כפולים ב-Elasticsearch. Filebeat תפס כל שורה של מחסנית שגיאה כאירוע נפרד, וכתוצאה מכך היו פי 10 יותר יומנים מהרגיל. הפתרון היה להגדיר close_inactive: 5m עם הביטוי הנכון. לאחר מכן, גודל האינדקס ירד מ-200 GB ל-30 GB בחודש — חיסכון של 85% בשטח דיסק.

Fluent Bit ב-Kubernetes: הגדרה מוכנה לייצור

Fluent Bit מופץ כ-Helm chart ונפרס כ-DaemonSet. הגדרה באמצעות ConfigMap:

---
# values.yaml для helm chart fluent-bit
config:
  inputs: |
    [INPUT]
    Name tail
    Path /var/log/containers/*.log
    multiline.parser docker, cri
    Tag kube.*
    Mem_Buf_Limit 64MB
    Skip_Long_Lines On
    Refresh_Interval 10
  filters: |
    [FILTER]
    Name kubernetes
    Match kube.*
    Kube_URL https://kubernetes.default.svc:443
    Kube_CA_File /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    Kube_Token_File /var/run/secrets/kubernetes.io/serviceaccount/token
    Merge_Log On
    Keep_Log Off
    K8S-Logging.Parser On
    K8S-Logging.Exclude On
    [FILTER]
    Name grep
    Match kube.*
    Exclude $kubernetes['labels']['skip-logging'] true
  outputs: |
    [OUTPUT]
    Name loki
    Match kube.*
    Host loki.logging.svc.cluster.local
    Port 3100
    Labels job=fluentbit, namespace=$kubernetes['namespace_name'], pod=$kubernetes['pod_name'], app=$kubernetes['labels']['app']
    Label_Keys $level,$trace_id
    Batch_Size 1048576
    Batch_Wait 1s
    Line_Format json
tolerations:
  - key: node-role.kubernetes.io/master
    operator: Exists
    effect: NoSchedule
  - key: node-role.kubernetes.io/control-plane
    operator: Exists
    effect: NoSchedule

Fluent Bit GitHub מאפשר ל-pods להשבית רישום באמצעות ה-annotation multiline.type: pattern — שימושי עבור כלי דיבוג שמייצרים כמויות עצומות של זבל.

Promtail: מיקומים ואמינות מסירה

Promtail מאחסן מיקומי קריאה ב-# values.yaml для helm chart fluent-bit config: inputs: | [INPUT] Name tail Path /var/log/containers/*.log multiline.parser docker, cri Tag kube.* Mem_Buf_Limit 64MB Skip_Long_Lines On Refresh_Interval 10 filters: | [FILTER] Name kubernetes Match kube.* Kube_URL https://kubernetes.default.svc:443 Kube_CA_File /var/run/secrets/kubernetes.io/serviceaccount/ca.crt Kube_Token_File /var/run/secrets/kubernetes.io/serviceaccount/token Merge_Log On Keep_Log Off K8S-Logging.Parser On K8S-Logging.Exclude On [FILTER] Name grep Match kube.* Exclude $kubernetes['labels']['skip-logging'] true outputs: | [OUTPUT] Name loki Match kube.* Host loki.logging.svc.cluster.local Port 3100 Labels job=fluentbit, namespace=$kubernetes['namespace_name'], pod=$kubernetes['pod_name'], app=$kubernetes['labels']['app'] Label_Keys $level,$trace_id Batch_Size 1048576 Batch_Wait 1s Line_Format json tolerations: - key: node-role.kubernetes.io/master operator: Exists effect: NoSchedule - key: node-role.kubernetes.io/control-plane operator: Exists effect: NoSchedule . אם קובץ זה אינו מתמיד (למשל, בקונטיינר ארעי), לאחר אתחול מחדש הסוכן יתחיל לקרוא מההתחלה וישכפל את כל היומנים. עבור DaemonSet, הקפד לעגן hostPath:

---
# promtail DaemonSet snippet
volumes:
  - name: positions
    hostPath:
      path: /var/log/promtail-positions
      type: DirectoryOrCreate
  - name: varlog
    hostPath:
      path: /var/log
  - name: varlibdockercontainers
    hostPath:
      path: /var/lib/docker/containers
volumeMounts:
  - name: positions
    mountPath: /run/promtail
  - name: varlog
    mountPath: /var/log
    readOnly: true
  - name: varlibdockercontainers
    mountPath: /var/lib/docker/containers
    readOnly: true

Promtail מאבד מיקומים ב-100% מהמקרים אם hostPath לא מעוגן. הבטח את בטיחות positions.yaml.

בעיות נפוצות ופתרונותיהן

בעיה סיבה פתרון
יומנים כפולים ב-Elasticsearch הגדרת ריבוי שורות שגויה הגדר את תבנית תחילת האירוע, כוונן max_lines
אובדן אירועים בעומס גבוה אין אגירת דיסק הפעל storage.type filesystem ב-Fluent Bit או queue.mem עם buffer מספיק ב-Filebeat
Promtail קורא מההתחלה לאחר אתחול אין אחסון מתמיד עבור positions.yaml עגן hostPath והגדר את הנתיב בקונפיג
הסוכן לא יכול לגשת ליומני קונטיינרים הרשאות לא מספקות ב-Kubernetes הגדר securityContext.runAsUser: 0 ב-DaemonSet
רשימת בדיקות להגדרה
  • [ ] ודא שהסוכן רץ כ-root כדי לגשת ליומני קונטיינרים
  • [ ] בדוק הגדרות אגירה: Fluent Bit — storage.type filesystem, Filebeat — queue.mem עם 4096 אירועים
  • [ ] הגדר ניטור לסוכן: מדדי Prometheus, דשבורד לאירועים שהוחמצו
  • [ ] הפעל רישום עצמי של הסוכן ברמת אזהרה
  • [ ] בדוק רוטציית יומנים: ודא שאין אובדן אירועים במהלך הרוטציה
  • [ ] הגדר סובלנות לתקלות: פלטים מרובים או עותקי סוכן

מה כלול בהקמת העברת יומנים

אנו מספקים מחזור שירותים מלא:

  • ביקורת על צינור רישום היומנים הנוכחי: נפח, אובדנים, עיכובים.
  • בחירת סוכן ועיצוב ארכיטקטורה.
  • כתיבת קונפיגים ו-Helm charts.
  • פריסה באמצעות Ansible או GitOps.
  • אינטגרציה עם SIEM ומערכות התראה.
  • תיעוד ו-runbook למפעילים.
  • ניטור ואופטימיזציה לאחר הפריסה.

תהליך הקמת העברת יומנים במפתח מלא

שלבי העבודה:

  1. ניתוח מקורות יומנים: יומני אפליקציה, מערכת, קונטיינרים. קביעת תדירות ונפח (עד 10 TB ליום).
  2. עיצוב צינור: בחירת סוכן, הגדרת אגירה, יתירות (active-active).
  3. יישום: קונפיגים לכל השרתים, Helm charts עבור Kubernetes, אינטגרציית SIEM.
  4. בדיקות: מבחן עומס עם זרם של 10k אירועים/שנייה, אימות אובדנים (SLO 99.9%).
  5. פריסה ותיעוד: פריסת Ansible/Helm, runbook למפעילים.

לוח זמנים משוער: 2 עד 5 ימי עסקים בהתאם למורכבות התשתית. התמחור נקבע באופן אישי לאחר ביקורת.

מוכן להעריך את הפרויקט שלך? צור קשר — אנו נקים את העברת היומנים שלך עם ערובה לשלמות הנתונים. הזמן ביקורת על צינור רישום היומנים שלך היום.