לעתים קרובות אנו נתקלים במצב הבא: קלאסטר Elasticsearch עובר למצב אדום בשקט, הדיסק מתמלא ל-95%, והצוות שומע על כך מהמשתמשים. ללא התראות, תקרית הופכת להשבתה. הניסיון שלנו מראה שהגדרת ניטור היא שלב מפתח שמונע השבתות ואובדן נתונים. במאמר זה נסקור כיצד להגדיר ניטור והתראות מלאים דרך Kibana באמצעות Metricbeat, Watcher ו-Prometheus. להלן תצורות שנבדקו בשטח וטיפים לסביבת ייצור.
מדוע ניטור Elasticsearch הוא קריטי?
Elasticsearch מפעיל חיפוש ואנליטיקה בפרויקטים רבים. אם הקלאסטר נופל, תהליכים עסקיים נעצרים. ניטור מאפשר לזהות הידרדרות מוקדם: עלייה ב-JVM heap, מילוי דיסק, עלייה בזמן תגובה של חיפוש. ללא ניטור, שומעים על בעיות מהמשתמשים. אנו מציעים תוכנית ניטור מוכנה עם התראות ל-Telegram/Slack כך שתמיד תדעו את מצב הקלאסטר שלכם.
באיזה כלי ניטור לבחור?
| כלי | מקור מדדים | מורכבות | התראות | ויזואליזציה |
|---|---|---|---|---|
| Stack Monitoring (Kibana) | Metricbeat או אספן מובנה | נמוכה | Watcher | לוחות מחוונים של Kibana |
| Metricbeat + Watcher | Elasticsearch, מדדי מערכת | בינונית | Watcher (JSON/ממשק משתמש) | לוחות מחוונים של Kibana |
| Prometheus + Grafana | elasticsearch_exporter | גבוהה | Alertmanager, Grafana | לוחות מחוונים של Grafana |
| Elastic Cloud | מובנה | נמוכה | מובנה | Kibana |
לסביבת ייצור, אנו ממליצים על Metricbeat + Stack Monitoring למדדים בסיסיים ו-Watcher להתראות. אם אתם כבר משתמשים ב-Prometheus, שלבו את elasticsearch_exporter.
כיצד עובד Stack Monitoring ב-Kibana?
Kibana Stack Monitoring הוא כלי מובנה לאיסוף מדדים מ-Elasticsearch, Logstash ו-Kibana. ניתן לאסוף נתונים דרך Metricbeat (מומלץ) או הסוכן המובנה (לא מומלץ). אנו ממליצים בחום לשלוח מדדים לקלאסטר ניטור נפרד — אחרת כשל בקלאסטר הראשי פירושו אובדן הניטור. אנו משתמשים ב-Metricbeat עם X-Pack מופעל.
תצורת Metricbeat למדדי Elasticsearch:
---
# metricbeat.yml
metricbeat.modules:
- module: elasticsearch
xpack.enabled: true
period: 10s
hosts: ["https://localhost:9200"]
username: "remote_monitoring_user"
password: "${ES_MONITOR_PASSWORD}"
ssl.certificate_authorities: ["/etc/elasticsearch/certs/ca.crt"]
scope: cluster
metricsets:
- ccr
- cluster_stats
- enrich
- index
- index_recovery
- index_summary
- ml_job
- node
- node_stats
- pending_tasks
- shard
output.elasticsearch:
hosts: ["https://monitoring-es:9200"]
username: "metricbeat_writer"
password: "${MONITOR_WRITER_PASSWORD}"
מדדים מרכזיים: מה לעקוב
| מדד | תקין | אזהרה | קריטי |
|---|---|---|---|
| בריאות הקלאסטר | ירוק | צהוב | אדום |
| שימוש ב-JVM heap | <75% | 75-85% | >85% (מסוכן), >95% (סערת GC) |
| שימוש בדיסק | <85% | 85-90% | >90% (איזון מחדש), >95% (קריאה בלבד) |
| זמן תגובת חיפוש (p95) | <50ms | 50-200ms | >200ms |
| קצב אינדוקס | יציב | ירידה >20% | ירידה חדה |
בריאות הקלאסטר — הדבר הראשון לבדוק: ירוק פירושו שכל השארדים מוקצים, צהוב פירושו ש-replicas לא מוקצים (תקין לצומת יחיד, בעיה לייצור), אדום פירושו שנתונים לא זמינים.
שימוש ב-JVM heap — קריטי: מתחת ל-75% תקין, 75–85% יש לנטר, >85% הידרדרות, >95% JVM קופא על GC והקלאסטר מפסיק להגיב.
שימוש בדיסק לפי צומת — Elasticsearch חוסם אינדוקס כשהדיסק מתמלא. סף flood_stage (95%) הופך אינדקסים לקריאה בלבד; high_watermark (90%) מפעיל איזון מחדש של שארדים; low_watermark (85%) תקין.
הגדרת התראות דרך Watcher
Watcher היא מערכת ההתראות המובנית של X-Pack. מוגדרת דרך API או ממשק המשתמש של Kibana. הנה דוגמה להתראה על מצב קלאסטר אדום:
PUT _watcher/watch/cluster_status_red
{
"trigger": {
"schedule": {
"interval": "1m"
}
},
"input": {
"http": {
"request": {
"host": "localhost",
"port": 9200,
"path": "/_cluster/health",
"auth": {
"basic": {
"username": "elastic",
"password": "{{ctx.metadata.es_password}}"
}
}
}
}
},
"condition": {
"compare": {
"ctx.payload.status": {
"eq": "red"
}
}
},
"actions": {
"send_telegram": {
"webhook": {
"scheme": "https",
"host": "api.telegram.org",
"port": 443,
"method": "post",
"path": "/bot{{ctx.metadata.telegram_token}}/sendMessage",
"params": {
"chat_id": "{{ctx.metadata.telegram_chat_id}}",
"text": "ALERT: Elasticsearch cluster status is RED! Time: {{ctx.execution_time}}"
}
}
}
}
}התראה על שימוש בדיסק >85%:
PUT _watcher/watch/disk_usage_high
{
"trigger": {
"schedule": {
"interval": "5m"
}
},
"input": {
"http": {
"request": {
"path": "/_nodes/stats/fs",
"auth": {
"basic": {
"username": "elastic",
"password": "changeme"
}
}
}
}
},
"condition": {
"script": {
"source": """
for (node in ctx.payload.nodes.values()) {
def total = node.fs.total.total_in_bytes;
def free = node.fs.total.free_in_bytes;
def used_pct = (total - free) / total * 100;
if (used_pct > 85) return true;
}
return false;
"""
}
},
"actions": {
"log": {
"logging": {
"level": "warn",
"text": "High disk usage detected on Elasticsearch node"
}
}
}
} כיצד להגדיר התראות דרך ממשק המשתמש של Kibana?
ב-Kibana 8.x, השתמשו ב-Alerts & Actions (Stack Management > Rules). בונה חוקים ויזואלי ללא כתיבת JSON ידנית. תבניות מוכנות: בריאות קלאסטר Elasticsearch, שינוי בצמתים, אי-התאמת גרסאות, שימוש במעבד, זיכרון JVM. ערוצי התראה: אימייל, Slack, PagerDuty, Webhook (Telegram, Teams).
ניטור דרך Prometheus ו-Grafana
אם התשתית שלכם כבר משתמשת ב-Prometheus, חברו את # metricbeat.yml metricbeat.modules: - module: elasticsearch xpack.enabled: true period: 10s hosts: ["https://localhost:9200"] username: "remote_monitoring_user" password: "${ES_MONITOR_PASSWORD}" ssl.certificate_authorities: ["/etc/elasticsearch/certs/ca.crt"] scope: cluster metricsets: - ccr - cluster_stats - enrich - index - index_recovery - index_summary - ml_job - node - node_stats - pending_tasks - shard output.elasticsearch: hosts: ["https://monitoring-es:9200"] username: "metricbeat_writer" password: "${MONITOR_WRITER_PASSWORD}" :
docker run -d \
--name elasticsearch_exporter \
-p 9114:9114 \
prometheuscommunity/elasticsearch-exporter:latest \
--es.uri=https://elastic:changeme@localhost:9200 \
--es.ssl-skip-verify \
--es.all \
--es.indices \
--es.shardsPrometheus PUT _watcher/watch/cluster_status_red { "trigger": { "schedule": { "interval": "1m" } }, "input": { "http": { "request": { "host": "localhost", "port": 9200, "path": "/_cluster/health", "auth": { "basic": { "username": "elastic", "password": "{{ctx.metadata.es_password}}" } } } } }, "condition": { "compare": { "ctx.payload.status": { "eq": "red" } } }, "actions": { "send_telegram": { "webhook": { "scheme": "https", "host": "api.telegram.org", "port": 443, "method": "post", "path": "/bot{{ctx.metadata.telegram_token}}/sendMessage", "params": { "chat_id": "{{ctx.metadata.telegram_chat_id}}", "text": "ALERT: Elasticsearch cluster status is RED! Time: {{ctx.execution_time}}" } } } } } :
- job_name: 'elasticsearch' static_configs: - targets: ['localhost:9114'] scrape_interval: 30s ייבאו את מזהה לוח המחוונים של Grafana PUT _watcher/watch/disk_usage_high { "trigger": { "schedule": { "interval": "5m" } }, "input": { "http": { "request": { "path": "/_nodes/stats/fs", "auth": { "basic": { "username": "elastic", "password": "changeme" } } } } }, "condition": { "script": { "source": """ for (node in ctx.payload.nodes.values()) { def total = node.fs.total.total_in_bytes; def free = node.fs.total.free_in_bytes; def used_pct = (total - free) / total * 100; if (used_pct > 85) return true; } return false; """ } }, "actions": { "log": { "logging": { "level": "warn", "text": "High disk usage detected on Elasticsearch node" } } } } (Elasticsearch Overview) — לוח מחוונים מוכן עם מדדים מרכזיים. כפי שצוין בתיעוד של Elasticsearch, זה מפשט את הוויזואליזציה.
מה כלול בעבודה שלנו
אנו מספקים: פריסת Metricbeat ולוחות מחוונים של Stack Monitoring; הגדרת התראות דרך Watcher או Kibana Rules עם ערוצי Telegram/Slack/PagerDuty; אינטגרציה עם Prometheus ו-Grafana (אם קיימת תשתית); תיעוד והדרכה לצוות שלכם; 3 חודשי תמיכה והתאמת ספים. הניסיון שלנו — 5 שנים בניהול Elasticsearch, מעל 20 פרויקטים. אנו מבטיחים SLA על זמן תגובה. המהנדסים שלנו מחזיקים בהסמכות Elastic Certified Engineer.
לוחות זמנים
ניטור בסיסי דרך Metricbeat ו-Stack Monitoring — יום אחד. התראות — יום אחד. ניטור מתקדם עם Prometheus+Grafana — 1–2 ימים. סה"כ בין 2 ל-4 ימים. העלות מחושבת באופן פרטני.
צרו קשר לייעוץ — נבחן את הקלאסטר שלכם ונציע את הפתרון האופטימלי. פנו אלינו לדיון בפרטים.







