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

Введение
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 и 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'
Важно: если 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 доступной напрямую извне без аутентификации и 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
Рекомендации по безопасности:
- В продакшене используйте 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
Шаг 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
Примеры экранов установки:
Проверка связи: на сервере с Logstash смотрите логи Logstash (/var/log/logstash/logstash-*.log) и индексы в Elasticsearch.
Шаг 7 — Тестирование и настройка индекса в Kibana
Откройте браузер и перейдите по адресу обратного прокси:
Войдите, используя учётные данные базовой аутентификации, созданные ранее.
Перейдите к созданию шаблона индекса: нажмите “Connect to your Elasticsearch index” и создайте pattern filebeat-*.
Выберите @timestamp в качестве временного поля и создайте шаблон.
Откройте Discover и вы увидите данные из Filebeat.
Примеры логов из клиентов:
Поздравляем — логи доставляются от Filebeat → Logstash → Elasticsearch и доступны в Kibana.
Раздел: Отладка и типичные проблемы
- Elasticsearch не стартует
- Проверьте логи /var/log/elasticsearch/
- Частая причина: недостаточный размер кучи JVM; для небольших VM уменьшите Xmx/Xms до 512m
- Проверьте права на /var/lib/elasticsearch и /var/log/elasticsearch
- Kibana не подключается к Elasticsearch
- Убедитесь, что elasticsearch.url в kibana.yml указывает правильно
- Проверьте сетевые ограничения (iptables/firewalld)
- Logstash не принимает соединения на 5044
- Проверить, слушает ли порт: netstat -plntu | grep 5044
- Проверить, что Filebeat направлен на правильный IP/порт
- Если используется TLS между Filebeat и Logstash, проверьте сертификаты
- 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: быстрый порядок действий для установки (сокращённый)
- Добавить репозиторий Elastic и установить Elasticsearch, Kibana, Logstash.
- Настроить JVM и сетевые параметры для Elasticsearch.
- Настроить Logstash pipeline (input → filter → output).
- Установить Filebeat на все клиенты и направить на Logstash.
- Настроить Nginx перед Kibana и включить TLS.
- Проверить доставку логов и создать индексы в Kibana.
Инцидентный runbook: лог доставки прерывается
- Проверить доступность Logstash (systemctl status, journalctl)
- Проверить Filebeat на клиенте (systemctl status filebeat, filebeat test output)
- Проверить сеть: telnet logstash_ip 5044
- Проверить наличие ошибок grok в логах Logstash
- При необходимости временно включить 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, настройку обратного прокси, базовую аутентификацию и примеры конфигураций.
- Добавлены рекомендации по безопасности, отладке и контрольные списки для ролей.
Источники и ссылки
- Официальная документация Elastic: https://www.elastic.co/guide/index.html
Спасибо за внимание. Удачного развертывания и мониторинга!
Похожие материалы

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

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

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

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

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