Налаштування моніторингу та алертів Elasticsearch (Kibana)

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування моніторингу та алертів Elasticsearch (Kibana)
Середня
~2-3 робочих дні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Налаштування моніторингу та алертів Elasticsearch (Kibana)

Elasticsearch не буде самостійно повідомляти про проблеми — потрібно налаштувати моніторинг заздалегідь. Найпоширеніші сценарії: диск переповнився, кластер перейшов у статус red через невіддалені шарди, heap досяг 95% і запустилася GC storm. Без алертів ви дізнаєтесь про проблеми від користувачів.

Stack Monitoring в Kibana

Kibana Stack Monitoring — вбудована панель для моніторингу Elasticsearch, Logstash, Kibana, Beats. Дані моніторингу збираються через Metricbeat або через вбудований механізм (застарілий, не рекомендується).

Налаштування 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 — усі шарди (primary + replica) призначені
  • yellow — primary шарди OK, частина replica не призначена (нормально для одного вузла, проблема для продакшену)
  • red — частина primary шардів не призначена, дані недоступні

JVM Heap Used % — критичний показник:

  • < 75% — нормально
  • 75–85% — моніторити, можливий частий GC
  • 85% — небезпечна зона, продуктивність деградує

  • 95% — JVM зависає на GC, кластер перестає відповідати

Disk usage per node — ES блокує індексацію при заповненні диска:

  • Порог flood_stage (за умовчанням 95%) — індекс переходить у read-only
  • Порог high_watermark (90%) — починається перебалансування шардів
  • Порог low_watermark (85%) — перебалансування завершується, норма

Search latency — час виконання запитів. p50, p95, p99. Дивитися на p95 — сплески на 1–2% запитів сигналізують про проблеми.

Indexing rate — документів/сек. Різке падіння — проблеми з ресурсами.

Watcher — алерти в Elasticsearch

Elastic 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

Ключові лог-файли на кожному вузлі:

/var/log/elasticsearch/myapp-prod.log     — основний лог
/var/log/elasticsearch/myapp-prod_gc.log  — лог GC (аналізувати при проблемах heap)
/var/log/elasticsearch/myapp-prod_server.log — системні события

Повільні запити пошуку логуються через slow log:

PUT /products/_settings
{
  "index.search.slowlog.threshold.query.warn": "5s",
  "index.search.slowlog.threshold.query.info": "2s",
  "index.search.slowlog.threshold.fetch.warn": "1s",
  "index.indexing.slowlog.threshold.index.warn": "5s"
}

Таймлайн

Базовий моніторинг через Kibana Stack Monitoring з Metricbeat — 1 робочий день. Налаштування алертів через Watcher або Kibana Rules з сповіщеннями в Telegram/Slack — ще 1 день. Grafana-дашборд з Prometheus — 1 день при наявності готової інфраструктури Prometheus.