Налаштування моніторингу та алертів Elasticsearch (Kibana)
Ми часто стикаємося з ситуацією: Elasticsearch-кластер мовчки переходить у red, диск заповнюється до 95%, а команда дізнається про це від користувачів. Без алертів інцидент перетворюється на аварію. Наш досвід показує, що налаштування моніторингу — ключовий етап, який запобігає простоям і втраті даних. У цій статті розберемо, як через Kibana налаштувати повноцінний моніторинг та алерти, використовуючи Metricbeat, Watcher та Prometheus. Нижче — перевірені конфіги та поради для продакшену.
Чому моніторинг Elasticsearch критично важливий?
Elasticsearch — основа пошуку та аналітики в багатьох проектах. Якщо кластер падає, бізнес-процеси зупиняються. Моніторинг дозволяє помітити degradation заздалегідь: зростання JVM heap, заповнення диска, зростання latency пошуку. Без нього ви дізнаєтеся про проблему від користувачів. Ми пропонуємо готову схему моніторингу з алертами в Telegram/Slack, щоб ви завжди були в курсі стану кластера.
Який інструмент моніторингу обрати?
| Інструмент | Джерело метрик | Складність | Алерти | Візуалізація |
|---|---|---|---|---|
| Stack Monitoring (Kibana) | Metricbeat або вбудований колектор | Низька | Watcher | Дашборди в Kibana |
| Metricbeat + Watcher | Elasticsearch, системні метрики | Середня | Watcher (JSON/UI) | Дашборди 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 для збору метрик ES:
# 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}"
Ключові метрики: на що дивитися
| Метрика | Норма | Попередження | Критично |
|---|---|---|---|
| Cluster health | green | yellow | red |
| JVM heap used | <75% | 75-85% | >85% (небезпечно), >95% (GC storm) |
| Disk usage | <85% | 85-90% | >90% (перебалансування), >95% (read-only) |
| Search latency (p95) | <50ms | 50-200ms | >200ms |
| Indexing rate | стабільний | падіння >20% | різке падіння |
Cluster health — перше, на що дивитися: green — усі шарди призначено, yellow — replica не призначено (нормально для одного вузла, проблема для продакшену), red — дані недоступні.
JVM heap usage — критичний показник: менше 75% нормально, 75–85% моніторити, >85% деградація, >95% JVM завмирає на GC і кластер перестає відповідати.
Disk usage per node — ES блокує індексацію при заповненні диска. Поріг flood_stage (95%) — індекс переходить у read-only; high_watermark (90%) — перебалансування шардів; low_watermark (85%) — норма.
Налаштування алертів через Watcher
Watcher — вбудована система сповіщень X-Pack. Налаштовується через API або Kibana UI. Наведемо приклад алерту на red статус кластера:
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 UI?
У Kibana 8.x є розділ Alerts & Actions (Stack Management > Rules). Візуальний конструктор правил без написання JSON вручну. Готові шаблони: Elasticsearch cluster health, nodes changed, version mismatch, CPU usage, JVM memory. Канали сповіщень: Email, Slack, PagerDuty, Webhook (Telegram, Teams).
Моніторинг через Prometheus та Grafana
Якщо інфраструктура вже використовує Prometheus, підключіть elasticsearch_exporter:
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.shards
Prometheus scrape_config:
- job_name: 'elasticsearch'
static_configs:
- targets: ['localhost:9114']
scrape_interval: 30s
Імпорт Grafana дашборда ID 6483 (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 — 1 день. Алерти — 1 день. Просунутий моніторинг з Prometheus+Grafana — 1-2 дні. Разом від 2 до 4 днів. Вартість розраховується індивідуально.
Замовте консультацію — ми оцінимо ваш кластер і запропонуємо оптимальне рішення. Зв'яжіться з нами, щоб обговорити деталі.







