Гид по технологиям

Установка и настройка Elastic Stack (Elasticsearch, Logstash, Kibana) на CentOS 8

9 min read DevOps Обновлено 18 Oct 2025
Elastic Stack на CentOS 8: установка и настройка
Elastic Stack на CentOS 8: установка и настройка

Введение

Логотип или схема Elastic Stack с компонентами Elasticsearch, Logstash и Kibana

Elastic Stack — это набор инструментов для сбора, обработки, хранения и визуализации логов и событий. Основные компоненты:

  • Elasticsearch — распределённый поисковый движок на базе Lucene. Работа с данными осуществляется в виде JSON-документов. Поддерживает масштабирование и многопользовательский режим.
  • Logstash — конвейер обработки событий: получает данные, фильтрует (grok, date и др.) и отправляет в хранилище (например, Elasticsearch).
  • Kibana — веб-интерфейс для визуализации данных в Elasticsearch; предоставляет дашборды и средства анализа.
  • Beats (в частности, Filebeat) — лёгкие агенты для отправки логов и метрик в Logstash или прямо в Elasticsearch.

Кому это руководство полезно: администраторы Linux, DevOps-инженеры, SRE и инженеры по наблюдаемости (observability).

Определения в одну строку:

  • Индекс — хранилище документов в Elasticsearch, аналог таблицы в БД.
  • Шаблон индекса — правило именования и сопоставления полей для новых индексов.
  • Grok — плагин Logstash для парсинга неструктурированных логов с помощью шаблонов.

Важное: это руководство ориентировано на CentOS 8 и Ubuntu 18.04; команды и пути конфигурации соответствуют этим дистрибутивам.

Ключевые действия, которые мы выполним

  • Добавление репозитория Elastic на CentOS 8
  • Установка и базовая настройка Elasticsearch
  • Установка и настройка Kibana с обратным прокси Nginx и базовой аутентификацией
  • Установка и настройка Logstash и pipeline для beats/syslog
  • Установка Filebeat на клиентские системы (CentOS и Ubuntu) и отправка логов в Logstash
  • Тестирование и отладка полного конвейера

Примечание по локализации: порты и IP-адреса в примерах отражают конфигурацию в исходном материале; заменяйте их на свои реальные IP/имена хостов.

Требования (предварительные условия)

  • Сетевой доступ между серверами: клиенты → Logstash (порт 5044), Kibana доступен через Nginx (порт 80 в примере, рекомендуется HTTPS 443)
  • Серверы из примера:
    • elk-master: CentOS 8, 64-бит, 4 ГБ ОЗУ
    • client01: CentOS 8, 64-бит, 1 ГБ ОЗУ
    • client02: Ubuntu 18.04, 64-бит, 1 ГБ ОЗУ
  • Доступ root/права sudo на серверах
  • Резервная копия важных данных перед изменением конфигураций

Контрольный список до начала

  • Свободный диск и RAM для Elasticsearch (как минимум 4 ГБ RAM для тестовой среды)
  • Синхронизация времени (chrony/ntpd)
  • Базовая настройка брандмауэра и SELinux (см. раздел «Безопасность»)

Шаг 1 — Добавление репозитория Elastic

Во-первых, добавим GPG-ключ и репозиторий Elastic на сервер CentOS 8. Это позволит установить Elasticsearch, Logstash, Kibana и Beats через dnf.

Импорт ключа:

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

Создаём файл репозитория /etc/yum.repos.d/elasticsearch.repo:

cd /etc/yum.repos.d/
vim elasticsearch.repo

Вставьте содержимое:

[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

Проверьте список репозиториев:

dnf repolist

Образ: показывает, что Elastic-репозиторий добавлен

Список репозиториев, полученный через dnf

Совет: при использовании корпоративных прокси добавьте соответствующие настройки прокси для dnf и wget/apt.

Шаг 2 — Установка и базовая настройка Elasticsearch

Установка пакета:

sudo dnf install elasticsearch -y

Файлы конфигурации находятся в /etc/elasticsearch/. Основной — elasticsearch.yml.

cd /etc/elasticsearch/
vim elasticsearch.yml

Включите и настройте сетевые параметры:

network.host: 127.0.0.1
http.port: 9200

Примечание: в продакшене network.host задайте как IP-интерфейс или hostname, по которому другие узлы и клиенты будут подключаться. Для тестовой локальной установки 127.0.0.1 — безопасно, но ограничивает доступ извне.

Настройка JVM (важно для производительности). Отредактируйте /etc/elasticsearch/jvm.options и установите размеры кучи (heap) с учётом доступной памяти. Рекомендация: Xms = Xmx = 50% доступной RAM, но не более ~32 ГБ.

vim jvm.options

# Пример для 1 ГБ RAM (тестовая среда)
-Xms512m
-Xmx512m

Перезагрузите systemd и включите сервис в автозагрузку:

sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch

Проверка работы:

curl -XGET 'http://127.0.0.1:9200/?pretty'

Проверка подключения к Elasticsearch

Важно: если curl не возвращает JSON с информацией о кластере, проверьте логи в /var/log/elasticsearch/ и статус systemd.

Шаг 3 — Установка и настройка Kibana

Установка Kibana:

sudo dnf install kibana

Конфигурация в /etc/kibana/kibana.yml:

cd /etc/kibana/
vim kibana.yml

Базовые параметры (локальная установка):

server.port: 5601
server.host: "127.0.0.1"
elasticsearch.url: "http://127.0.0.1:9200"

Включаем и запускаем сервис:

sudo systemctl enable kibana
sudo systemctl start kibana

Проверка состояния:

systemctl status kibana
netstat -plntu

Проверка статуса сервиса Kibana

Примечание по безопасности: не оставляйте Kibana доступной напрямую извне без аутентификации и HTTPS. В следующем разделе мы настраиваем Nginx как обратный прокси с базовой аутентификацией.

Шаг 4 — Nginx как обратный прокси для Kibana

Устанавливаем Nginx и утилиты для управления htpasswd:

sudo dnf install nginx httpd-tools

Создаём конфигурацию /etc/nginx/conf.d/kibana.conf:

cd /etc/nginx/conf.d/
vim kibana.conf

Вставьте конфигурацию (адаптируйте server_name под ваш домен):

server {
    listen 80;

    server_name elk.hakase-labs.io;

    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/.kibana-user;

    location / {
        proxy_pass http://127.0.0.1:5601;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

Создаём базовую аутентификацию (замените hakase на ваше имя пользователя):

sudo htpasswd -c /etc/nginx/.kibana-user hakase
# Введите пароль

Проверяем конфигурацию Nginx и запускаем сервис:

nginx -t
sudo systemctl enable nginx
sudo systemctl start nginx

Настройка Nginx как обратного прокси

Рекомендации по безопасности:

  • В продакшене используйте TLS (TLS Termination) на Nginx: получите сертификат от Let’s Encrypt или внутреннего CA.
  • Ограничьте доступ по IP для административных путей.
  • Подумайте о добавлении защиты WAF/Rate limiting.

Шаг 5 — Установка и настройка Logstash

Logstash будет принимать данные от Filebeat (порт 5044), фильтровать и отправлять их в Elasticsearch.

sudo dnf install logstash

Настройте JVM для Logstash (файл /etc/logstash/jvm.options):

cd /etc/logstash/
vim jvm.options

-Xms512m
-Xmx512m

Создаём конфигурацию входа для beats: /etc/logstash/conf.d/input-beat.conf

cd /etc/logstash/conf.d/
vim input-beat.conf

input {
  beats {
    port => 5044
  }
}

Конфигурация фильтра для syslog с использованием grok: /etc/logstash/conf.d/syslog-filter.conf

vim syslog-filter.conf

filter {
  if [type] == "syslog" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]
    }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
  }
}

Обратите внимание: шаблоны grok можно адаптировать под формат ваших логов. Grok чувствителен к пробелам и спецсимволам.

Выход в Elasticsearch: /etc/logstash/conf.d/output-elasticsearch.conf

vim output-elasticsearch.conf

output {
  elasticsearch {
    hosts => ["127.0.0.1:9200"]
    manage_template => false
    index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
    document_type => "%{[@metadata][type]}"
  }
}

Включаем и запускаем Logstash:

sudo systemctl enable logstash
sudo systemctl start logstash

Проверка:

systemctl status logstash
netstat -plntu | grep 5044

Проверка статуса Logstash

Шаг 6 — Установка Filebeat на клиентах

Filebeat собирает логи и отправляет их в Logstash на порт 5044.

Установка на CentOS 8

Импорт ключа и репозиторий как ранее:

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

Создайте /etc/yum.repos.d/elasticsearch.repo с тем же содержимым, что и на сервере.

sudo dnf install filebeat

Установка на Ubuntu 18.04

sudo apt install apt-transport-https
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt update
sudo apt install filebeat

Настройка Filebeat (оба клиента)

Конфигурация в /etc/filebeat/filebeat.yml:

  • Отключаем выход напрямую в Elasticsearch, включаем Logstash:
#output.elasticsearch:
  # Array of hosts to connect to.
  #  hosts: ["127.0.0.1:9200"]

output.logstash:
  # The Logstash hosts
  hosts: ["10.5.5.25:5044"]

Адаптируйте IP адрес Logstash (10.5.5.25 в примере) под вашу инфраструктуру.

Включаем модули Filebeat (системный модуль):

filebeat modules list
filebeat modules enable system

Отредактируйте /etc/filebeat/modules.d/system.yml в зависимости от ОС: указывайте правильные пути логов.

Для CentOS:

syslog:
  enabled: true
  var.paths: ["/var/log/messages"]

auth:
  enabled: true
  var.paths: ["/var/log/secure"]

Для Ubuntu:

syslog:
  enabled: true
  var.paths: ["/var/log/syslog"]

auth:
  enabled: true
  var.paths: ["/var/log/auth.log"]

Запускаем Filebeat:

sudo systemctl enable filebeat
sudo systemctl start filebeat
systemctl status filebeat

Примеры экранов установки:

Установка Filebeat на CentOS Установка apt-transport-https на Ubuntu

Проверка связи: на сервере с Logstash смотрите логи Logstash (/var/log/logstash/logstash-*.log) и индексы в Elasticsearch.

Результат с CentOS клиента Результат с Ubuntu клиента

Шаг 7 — Тестирование и настройка индекса в Kibana

Откройте браузер и перейдите по адресу обратного прокси:

http://elk.hakase-labs.io/

Войдите, используя учётные данные базовой аутентификации, созданные ранее.

Экран входа в Kibana

Перейдите к созданию шаблона индекса: нажмите “Connect to your Elasticsearch index” и создайте pattern filebeat-*.

Создание шаблона индекса Filebeat

Выберите @timestamp в качестве временного поля и создайте шаблон.

Выбор поля @timestamp

Откройте Discover и вы увидите данные из Filebeat.

Filebeat в Discover

Примеры логов из клиентов:

Логи CentOS 8 Логи Ubuntu 18.04

Поздравляем — логи доставляются от Filebeat → Logstash → Elasticsearch и доступны в Kibana.

Раздел: Отладка и типичные проблемы

  1. Elasticsearch не стартует
  • Проверьте логи /var/log/elasticsearch/
  • Частая причина: недостаточный размер кучи JVM; для небольших VM уменьшите Xmx/Xms до 512m
  • Проверьте права на /var/lib/elasticsearch и /var/log/elasticsearch
  1. Kibana не подключается к Elasticsearch
  • Убедитесь, что elasticsearch.url в kibana.yml указывает правильно
  • Проверьте сетевые ограничения (iptables/firewalld)
  1. Logstash не принимает соединения на 5044
  • Проверить, слушает ли порт: netstat -plntu | grep 5044
  • Проверить, что Filebeat направлен на правильный IP/порт
  • Если используется TLS между Filebeat и Logstash, проверьте сертификаты
  1. Grok не распарсил сообщение
  • Проверьте шаблон grok через онлайн-тестеры или включите debug-логи
  • Добавьте поле _grokparsefailure и отфильтруйте для анализа

Инструментальная панель проверки (checklist)

  • Elasticsearch: /_cluster/health возвращает статус green/yellow
  • Logstash: в логах нет ошибок pipeline
  • Filebeat: модуль system beat загружен и активен
  • Kibana: Discover показывает события с правильным @timestamp

Безопасность и жёсткая конфигурация

  • TLS между компонентами: рекомендуется включить TLS для соединений между Filebeat → Logstash и Logstash → Elasticsearch. Для этого используйте сертификаты от CA или внутренние самоподписанные с верным truststore.
  • Аутентификация: используйте прокси-аутентификацию или встроенный Security (X-Pack/Elastic Security) в платных/современных версиях.
  • Защита Kibana: Nginx + TLS + базовая/интегрированная аутентификация.
  • SELinux: при проблемах временно поставьте permissive для отладки, затем настройте policy.
  • Firewall: откройте только необходимые порты (9200 локально или только для доверенных хостов, 5044 для Filebeat, 80/443 для Kibana если требуется).

Резервное копирование и миграции

  • Снимайте индексы с помощью snapshot/restore в Elasticsearch при переходе между кластерами.
  • При обновлении версии Elastic Stack следуйте официальной матрице совместимости версий (Logstash, Beats и Kibana должны быть совместимы с версией Elasticsearch).

Критерии приёмки

  • Elasticsearch отвечает на запросы API и возвращает состояние кластера
  • Logstash принимает события от Filebeat и не генерирует ошибок pipeline
  • Данные отображаются в Kibana через шаблон filebeat-*
  • Все сервисы настроены на автозапуск и корректно перезапускаются после reboot

Роль-ориентированные контрольные списки

Администратор инфраструктуры:

  • Установить репозитории и пакеты
  • Настроить брандмауэр и SELinux
  • Подготовить сертификаты (если используются)

DevOps-инженер / SRE:

  • Настроить конфигурации Logstash и индексы
  • Настроить ротацию и управление шаблонами индексов
  • Организовать мониторинг ресурсов кластеров

Инженер безопасности:

  • Проверить TLS и аутентификацию
  • Провести аудит логов доступа и конфигураций

Playbook: быстрый порядок действий для установки (сокращённый)

  1. Добавить репозиторий Elastic и установить Elasticsearch, Kibana, Logstash.
  2. Настроить JVM и сетевые параметры для Elasticsearch.
  3. Настроить Logstash pipeline (input → filter → output).
  4. Установить Filebeat на все клиенты и направить на Logstash.
  5. Настроить Nginx перед Kibana и включить TLS.
  6. Проверить доставку логов и создать индексы в Kibana.

Инцидентный runbook: лог доставки прерывается

  1. Проверить доступность Logstash (systemctl status, journalctl)
  2. Проверить Filebeat на клиенте (systemctl status filebeat, filebeat test output)
  3. Проверить сеть: telnet logstash_ip 5044
  4. Проверить наличие ошибок grok в логах Logstash
  5. При необходимости временно включить debug-логи и вернуть показатели в норму

Мини-методология развертывания в production

  • Шаг 0: Тестовая среда с 1 нодой Elasticsearch, Logstash и Kibana
  • Шаг 1: Настройка TLS и авторизации
  • Шаг 2: Масштабирование Elasticsearch (минимум 3 ноды для отказоустойчивости)
  • Шаг 3: Настройка мониторинга SLI/SLO (CPU, JVM heap, heap pressure, indexing rate)

Решение при выборе между Logstash и ingest node

  • Если требуется мощная трансформация и множество плагинов — Logstash.
  • Если требуется простая обработка и минимальная задержка — используйте Elasticsearch ingest nodes или Filebeat processors.

Примеры тестов и критерии приёмки

  • Filebeat → Logstash: на клиенте выполните filebeat test output, ожидаемый результат — успешное соединение
  • Elasticsearch: curl localhost:9200/_cluster/health?pretty — ожидается status: green или yellow
  • Kibana: в Discover видны записи за последние 24 часа

Mermaid: простая диаграмма принятия решения для TLS

flowchart LR
  A[Нужен TLS между компонентами?] -->|Да| B[Настроить CA и сертификаты]
  A -->|Нет| C[Развертывание без TLS 'не рекомендуется']
  B --> D[Настроить Filebeat и Logstash с certs]
  D --> E[Проверить соединение TLS]
  C --> E

Совместимость и миграция

  • При обновлении Elastic Stack всегда проверьте матрицу совместимости версий: несовместимые версии Kibana/Beats/Logstash с Elasticsearch приведут к ошибкам.
  • Перед миграцией создавайте snapshot индексов и тестируйте restore в staging.

Глоссарий в одну строку

  • Elastic Stack: набор инструментов для логирования и аналитики (Elasticsearch, Logstash, Kibana, Beats).
  • Beat: лёгкий агент для отправки данных (Filebeat, Metricbeat и др.).
  • Grok: шаблонный парсер для логов в Logstash.

Ключовые рекомендации

  • Для production: минимум 3 ноды Elasticsearch для устойчивости.
  • Не храните приватные данные в логах без шифрования и контроля доступа.
  • Проводите регулярную ротацию индексов и snapshots.

Короткое резюме

  • Elastic Stack предоставляет мощный конвейер для логов: Filebeat → Logstash → Elasticsearch → Kibana.
  • Это руководство покрывает базовую установку на CentOS 8 и Ubuntu 18.04, настройку обратного прокси, базовую аутентификацию и примеры конфигураций.
  • Добавлены рекомендации по безопасности, отладке и контрольные списки для ролей.

Источники и ссылки

Спасибо за внимание. Удачного развертывания и мониторинга!

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Мониторинг нагрузки в Linux с atop
Мониторинг.

Мониторинг нагрузки в Linux с atop

Потеря пакетов в EVE Online — как найти и исправить
Онлайн-игры

Потеря пакетов в EVE Online — как найти и исправить

Выключить Android без кнопки питания
Android.

Выключить Android без кнопки питания

Исправить .NET Runtime Optimization Service, который нагружает CPU
Windows 10

Исправить .NET Runtime Optimization Service, который нагружает CPU

Включить обновление Погоды по сотовой сети на iPhone
iPhone

Включить обновление Погоды по сотовой сети на iPhone

Запрет закрепления на панели задач — Windows 11
Windows 11

Запрет закрепления на панели задач — Windows 11