Настройка мониторинга и алертов 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 дней. Стоимость рассчитывается индивидуально.
Закажите консультацию — мы оценим ваш кластер и предложим оптимальное решение. Свяжитесь с нами, чтобы обсудить детали.







