שימו לב: כאשר היומנים עולים על 100 ג'יגה-בייט ליום, פקודות grep ו-tail הופכות לבלתי שמישות. נתקלנו בפרויקטים שבהם חיפוש שגיאות ארך שעות, והתראות הוגדרו ידנית באמצעות cron. פעם אחת, בפרויקט עם 200 מיקרוסרוויסים, בילינו שבוע בחקירת תקלה כי היומנים היו מפוזרים על פני 50 שרתים. הניסיון שלנו עם Graylog הוא על ביטול הכאוס: איסוף מרכזי, חיפוש מהיר והתראות גמישות מובנות כברירת מחדל. אנחנו לא רק פורסים את Graylog—אנחנו מגדירים אותו עבור התשתית שלכם: מ-Docker Compose ועד קלאסטר production עם OpenSearch ואיזון עומסים. אנחנו מבטיחים פעילות יציבה והפחתה של 3-5 פעמים ב-MTTR. עם הגדרה נכונה, עלויות אחסון היומנים יורדות ב-30-50% בזכות שמירה ודחיסה יעילה.
בעיות שאנחנו פותרים
- יומנים מפוזרים — יומנים על מאות שרתים נערמים על מערכת קבצים אחת. Graylog מרכז אותם למאגר אחיד עם חיפוש בשניות.
- רעש והתראות — הודעות חסרות תועלת על כל דבר קטן. אנחנו מגדירים streams וכללי pipeline כך שהתראות מגיעות רק על שגיאות אמיתיות.
- חיפוש תקלות איטי — grep על 50 ג'יגה-בייט של יומנים לוקח דקות. Graylog עם OpenSearch מגיב במילישניות.
למה Graylog על פני ELK?
ELK הוא stack חזק, אבל הוא דורש הגדרה נפרדת עבור Logstash, Kibana ו-Elasticsearch. Graylog מציע את אותה פונקציונליות עם חסם כניסה נמוך יותר: ממשק מובנה לניתוח, התראות וניהול streams.
| קריטריון | Graylog | ELK |
|---|---|---|
| התראות מובנות | כן, מובנות כברירת מחדל | דורש ElastAlert או Watcher |
| ניתוח יומנים | כללי pipeline + Extractors בממשק | רק Logstash בנפרד |
| פורמט נתונים | GELF — פורמט טבעי עם שדות חופשיים | JSON אבל דורש מיפוי |
| מורכבות פריסה | Docker Compose בשעה אחת | נדרשים יותר רכיבים |
בהתבסס על משוב לקוחות, לאחר הטמעת Graylog, זמן ניתוח התקלות ירד משעות לדקות, ועומס העבודה על הצוות נחתך בחצי.
איך אנחנו עושים את זה
פריסה באמצעות Docker Compose
# docker-compose.yml
version: '3'
services:
mongodb:
image: mongo:6.0
volumes:
- mongo-data:/data/db
restart: unless-stopped
opensearch:
image: opensearchproject/opensearch:2.11.0
environment:
- "OPENSEARCH_JAVA_OPTS=-Xms2g -Xmx2g"
- "bootstrap.memory_lock=true"
- "discovery.type=single-node"
- "action.auto_create_index=false"
- plugins.security.disabled=true
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- os-data:/usr/share/opensearch/data
restart: unless-stopped
graylog:
image: graylog/graylog:5.2
environment:
GRAYLOG_PASSWORD_SECRET: ${GRAYLOG_PASSWORD_SECRET}
GRAYLOG_ROOT_PASSWORD_SHA2: ${GRAYLOG_ROOT_PASSWORD_SHA2}
GRAYLOG_HTTP_EXTERNAL_URI: http://graylog.example.com:9000/
GRAYLOG_MONGODB_URI: mongodb://mongodb/graylog
GRAYLOG_ELASTICSEARCH_HOSTS: http://opensearch:9200
GRAYLOG_TIMEZONE: Europe/Kiev
depends_on:
- mongodb
- opensearch
ports:
- "9000:9000" # Web UI
- "1514:1514" # Syslog TCP
- "1514:1514/udp" # Syslog UDP
- "12201:12201" # GELF TCP
- "12201:12201/udp" # GELF UDP
- "5044:5044" # Beats
volumes:
- graylog-data:/usr/share/graylog/data
restart: unless-stopped
volumes:
mongo-data:
os-data:
graylog-data:צרו # docker-compose.yml version: '3' services: mongodb: image: mongo:6.0 volumes: - mongo-data:/data/db restart: unless-stopped opensearch: image: opensearchproject/opensearch:2.11.0 environment: - "OPENSEARCH_JAVA_OPTS=-Xms2g -Xmx2g" - "bootstrap.memory_lock=true" - "discovery.type=single-node" - "action.auto_create_index=false" - plugins.security.disabled=true ulimits: memlock: soft: -1 hard: -1 volumes: - os-data:/usr/share/opensearch/data restart: unless-stopped graylog: image: graylog/graylog:5.2 environment: GRAYLOG_PASSWORD_SECRET: ${GRAYLOG_PASSWORD_SECRET} GRAYLOG_ROOT_PASSWORD_SHA2: ${GRAYLOG_ROOT_PASSWORD_SHA2} GRAYLOG_HTTP_EXTERNAL_URI: http://graylog.example.com:9000/ GRAYLOG_MONGODB_URI: mongodb://mongodb/graylog GRAYLOG_ELASTICSEARCH_HOSTS: http://opensearch:9200 GRAYLOG_TIMEZONE: Europe/Kiev depends_on: - mongodb - opensearch ports: - "9000:9000" # Web UI - "1514:1514" # Syslog TCP - "1514:1514/udp" # Syslog UDP - "12201:12201" # GELF TCP - "12201:12201/udp" # GELF UDP - "5044:5044" # Beats volumes: - graylog-data:/usr/share/graylog/data restart: unless-stopped volumes: mongo-data: os-data: graylog-data: על ידי הרצת GRAYLOG_ROOT_PASSWORD_SHA2.
GELF: הפורמט הטבעי של Graylog
GELF (Graylog Extended Log Format) הוא פורמט JSON שתוכנן במיוחד עבור Graylog. היתרון על פני syslog הוא בכך שהוא תומך בשדות חופשיים ללא צורך בניתוח:
{ "version": "1.1",
"host": "app-server-01",
"short_message": "Payment processing failed",
"timestamp": 1705312800.123,
"level": 3,
"_user_id": "u-12345",
"_order_id": "ord-987654",
"_payment_provider": "stripe",
"_error_code": "card_declined",
"_amount_cents": 4999 }שדות עם קידומת echo -n "YourPassword" | sha256sum | cut -d" " -f1 הם נוספים. ב-Graylog, הם זמינים מיד כשדות נפרדים לסינון ואגרגציה.
איך לשלוח יומנים ל-Graylog דרך GELF
כדי להתחיל לשלוח יומנים ל-Graylog:
- הגדירו קלט GELF ב-Graylog (פורט ברירת מחדל 12201 TCP/UDP).
- ביישום שלכם, הוסיפו ספריית GELF appender (לדוגמה, logback-gelf עבור Java).
- הוסיפו שדות סטטיים (application, env, version) לסינון נוח.
דוגמה עבור Java (logback):
<!-- logback.xml -->
<appender name="GELF" class="de.siegmar.logbackgelf.GelfUdpAppender">
<graylogHost>graylog</graylogHost>
<graylogPort>12201</graylogPort>
<maxChunkSize>508</maxChunkSize>
<useCompression>true</useCompression>
<encoder class="de.siegmar.logbackgelf.GelfEncoder">
<includeRawMessage>false</includeRawMessage>
<includeMarker>true</includeMarker>
<includeMdcData>true</includeMdcData>
<staticField>app_name:payment-service</staticField>
<staticField>env:production</staticField>
</encoder>
</appender>לאחר מכן, כל יומני היישום יישלחו אוטומטית ל-Graylog עם השדות הנדרשים. לפרטים נוספים על הגדרת GELF, ראו את התיעוד הרשמי.
כללי Pipeline: טרנספורמציה ללא Logstash
Graylog Processing Pipelines הוא DSL להמרת הודעות ישירות בתוך Graylog. דוגמה לכלל להעשרת יומני HTTP:
rule "parse_http_status"
when
has_field("http_status_code")
then
let status = to_long($message.http_status_code);
let category = if(status >= 500, "server_error", if(status >= 400, "client_error", if(status >= 300, "redirect", "success")));
set_field("status_category", category);
end איך להגדיר התראות ב-Graylog?
Streams הם מנגנון ניתוב ההודעות ב-Graylog. Stream עם תנאי { "version": "1.1", "host": "app-server-01", "short_message": "Payment processing failed", "timestamp": 1705312800.123, "level": 3, "_user_id": "u-12345", "_order_id": "ord-987654", "_payment_provider": "stripe", "_error_code": "card_declined", "_amount_cents": 4999 } מבודד את כל השגיאות משירות התשלומים, שאליו ניתן לחבר תנאי התראה וסט אינדקסים נפרד עם מדיניות שמירה שונה.
תנאי התראה דרך API:
POST /api/streams/{stream_id}/alerts/conditions
{
"type": "message_count",
"title": "Too many errors",
"parameters": {
"time": 5,
"threshold_type": "MORE",
"threshold": 100,
"grace": 2,
"backlog": 10
}
} תהליך
| שלב | משך | תוצאה |
|---|---|---|
| ביקורת על מערכת היומנים הנוכחית | 1-2 ימים | דוח עם המלצות |
| עיצוב ארכיטקטורה | יום אחד | תכנית מופעים, streams, מדיניות שמירה |
| פריסת Graylog | 1-2 ימים | קלאסטר עובד עם OpenSearch |
| הגדרת קלטים, כללי pipeline, streams | 1-2 ימים | קבלת יומנים, ניתוח, ניתוב |
| הגדרת התראות ולוחות מחוונים | יום אחד | הודעות אימייל/Slack, ויזואליזציה |
| הדרכת צוות ומסירת תיעוד | חצי יום | Runbook, גישה, אנשי קשר |
לוח זמנים משוער
פריסה מלאה של Graylog עם Inputs, Pipeline Rules, Streams והתראות — בין 3 ל-5 ימים. כולל בדיקות ומסירה לתפעול. העלות מחושבת באופן אישי — צרו קשר כדי להעריך את הפרויקט שלכם.
טעויות נפוצות בהטמעת Graylog
- שכחת הגדרת סיבוב אינדקסים — הדיסק מתמלא תוך שבוע.
- שימוש ב-syslog ליומנים מובנים — מאבד שדות. עדיף להשתמש ב-GELF.
- אי הגדרת כללי pipeline — יומנים מגיעים כמחרוזות, בלתי אפשרי לחפש.
- התראות תכופות מדי — שוחקות את הצוות. הגדירו תקופות חסד ורמות חומרה.
מה כלול
- פריסת Graylog (Docker Compose או קלאסטר)
- הגדרת קלטים (syslog, GELF, Beats, JSON)
- כללי pipeline לניתוח והעשרה
- יצירת streams והתראות
- אינטגרציה עם מערכות ההודעות שלכם (אימייל, Slack, Telegram)
- תיעוד והדרכה
- אחריות להגדרה ל-30 יום
הזמינו הגדרת Graylog turnkey — נבדוק את הפרויקט שלכם תוך יום אחד. 7+ שנות ניסיון, למעלה מ-50 הטמעות.







