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

Установка и настройка 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
Автор
Редакция

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

Ошибки Verizon Fios: коды и инструкции
Телеком

Ошибки Verizon Fios: коды и инструкции

Цветные заголовки неактивных окон в Windows 10
Windows

Цветные заголовки неактивных окон в Windows 10

Паяльный насос: как удалить компоненты с платы
Ремонт электроники

Паяльный насос: как удалить компоненты с платы

Включить проверку правописания в Outlook
Руководство

Включить проверку правописания в Outlook

Синхронизировать буфер обмена Windows с Android
Руководство

Синхронизировать буфер обмена Windows с Android

Планировщик задан не работает — как исправить
Windows

Планировщик задан не работает — как исправить