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

Установка Elastic Stack на CentOS 7 — пошаговое руководство

• 8 min read • DevOps • Обновлено 21 Nov 2025
Установка Elastic Stack на CentOS 7
Установка Elastic Stack на CentOS 7

Краткое содержание

  • Введение в компоненты Elastic Stack
  • Список требований и подготовка ОС
  • Установка Java (JDK 8)
  • Установка и настройка Elasticsearch (локально на 9200)
  • Установка Kibana и настройка доступа через Nginx (reverse proxy + basic auth)
  • Установка Logstash, создание сертификата SSL и конфигураций
  • Установка Filebeat на CentOS и Ubuntu клиенты
  • Тестирование, отладка и чек-листы приёмки
  • Рекомендации по безопасности, резервированию и обновлению

Введение — зачем нужен Elastic Stack

Elastic Stack (ранее ELK Stack) — это набор инструментов для сбора, обработки, хранения и визуализации логов и метрик.

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

Определение: Filebeat — компактный агент для пересылки файлов логов в Logstash/Elasticsearch.

Важно: В этом руководстве сервисы устанавливаются в версиях, совместимых с документацией образца (пример 5.1.1). Для боевых сред используйте актуальные стабильные версии и проверяйте совместимость конфигураций.

Требования (локализация и примечания)

  • Сервер: CentOS 7 (64‑бит), 4 ГБ ОЗУ — elk-master (сервер Elasticsearch/Kibana/Logstash)
  • Клиент 1: CentOS 7 (64‑бит), 1 ГБ ОЗУ — client1
  • Клиент 2: Ubuntu 16.04 (64‑бит), 1 ГБ ОЗУ — client2

Примечание: объём ОЗУ указан ориентировочно. Для больших объёмов логов и индексов планируйте больше памяти и выделение JVM heap для Elasticsearch.

Важные указания перед началом

  • Работайте от пользователя с sudo или root.
  • Делайте резервные копии существующих конфигураций.
  • В тестовом примере Elasticsearch слушает только localhost и доступ к Kibana закрыт через Nginx.

Шаг 1 — Подготовка операционной системы

Мы отключим SELinux на CentOS 7 для упрощения настройки в тестовой среде. В продакшене рекомендуется корректно настроить политики SELinux вместо полного отключения.

Откройте файл конфигурации SELinux:

vim /etc/sysconfig/selinux

Измените значение SELINUX на disabled:

SELINUX=disabled

Перезагрузите сервер:

reboot

После перезагрузки проверьте состояние:

getenforce

Убедитесь, что вывод: disabled

Важно: вместо отключения SELinux в продакшене лучше поставить в permissive и адаптировать политики.

Шаг 2 — Установка Java

Elasticsearch требует Java 8 (JDK 1.8). В примере установлен Oracle JDK 8 через rpm.

Скачайте JDK:

wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http:%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u77-b02/jdk-8u77-linux-x64.rpm"

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

rpm -ivh jdk-8u77-linux-x64.rpm

Проверьте версию Java:

java -version

Вы увидите версию JDK. Если используется OpenJDK — это тоже поддерживаемый вариант, но проверяйте рекомендуемую версию для выбранной версии Elasticsearch.

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

Добавьте GPG-ключ elastic.co:

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

Скачайте и установите rpm-пакет Elasticsearch (пример 5.1.1):

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.1.1.rpm
rpm -ivh elasticsearch-5.1.1.rpm

Перейдите в каталог конфигурации и откройте elasticsearch.yml:

cd /etc/elasticsearch/
vim elasticsearch.yml

Включите запрет свопинга памяти (memory lock):

bootstrap.memory_lock: true

В сетевом блоке укажите адрес и порт (в примере — localhost и 9200):

network.host: localhost
http.port: 9200

Настройка systemd для mlock:

vim /usr/lib/systemd/system/elasticsearch.service

Откомментируйте LimitMEMLOCK:

LimitMEMLOCK=infinity

Отредактируйте sysconfig Elasticsearch:

vim /etc/sysconfig/elasticsearch

Убедитесь, что MAX_LOCKED_MEMORY установлено в unlimited:

MAX_LOCKED_MEMORY=unlimited

Перезапустите демоны systemd, включите сервис и запустите Elasticsearch:

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

Проверьте, что порт 9200 слушает:

netstat -plntu

Состояние: Elasticsearch слушает порт 9200

Проверьте mlock и статус узла Elasticsearch:

curl -XGET 'localhost:9200/_nodes?filter_path=**.mlockall&pretty'
curl -XGET 'localhost:9200/?pretty'

Проверка mlock и статуса Elasticsearch

Совет: если Elasticsearch не запускается, смотрите логи в /var/log/elasticsearch/ и помните про права на директории данных.

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

Скачайте и установите Kibana:

wget https://artifacts.elastic.co/downloads/kibana/kibana-5.1.1-x86_64.rpm
rpm -ivh kibana-5.1.1-x86_64.rpm

Отредактируйте конфигурацию Kibana:

vim /etc/kibana/kibana.yml

Задайте порт и адрес сервера Kibana, а также адрес Elasticsearch:

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

Включите и запустите Kibana:

sudo systemctl enable kibana
sudo systemctl start kibana

Проверьте, что порт 5601 слушает:

netstat -plntu

Kibana запущена как node приложение на порту 5601

Установите Nginx (через EPEL) и инструменты для htpasswd:

yum -y install epel-release
yum -y install nginx httpd-tools

Отредактируйте /etc/nginx/nginx.conf и удалите существующий блок server { } (если вы планируете настроить свой виртуальный хост). Затем создайте конфигурацию /etc/nginx/conf.d/kibana.conf:

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

Вставьте следующий пример (адаптируйте server_name):

server {
    listen 80;

    server_name elk-stack.co;

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

    location / {
        proxy_pass http://localhost: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;
    }
}

Создайте файл пар логина для Kibana и задайте пароль администратора:

sudo htpasswd -c /etc/nginx/.kibana-user admin
TYPE YOUR PASSWORD

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

nginx -t
systemctl enable nginx
systemctl start nginx

Добавление виртуального хоста Nginx для Kibana

Совет: для публичного доступа используйте HTTPS (Let’s Encrypt) и ограничивайте доступ по IP/ACL.

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

Скачайте Logstash и установите:

wget https://artifacts.elastic.co/downloads/logstash/logstash-5.1.1.rpm
rpm -ivh logstash-5.1.1.rpm

Создадим самоподписанный сертификат, чтобы Filebeat мог доверять серверу Logstash.

Отредактируйте openssl.cnf и добавьте subjectAltName с IP сервера (например 10.0.15.10):

cd /etc/pki/tls
vim openssl.cnf

Добавьте в секцию [ v3_ca ]:

[ v3_ca ]

# Server IP Address
subjectAltName = IP: 10.0.15.10

Сгенерируйте ключ и сертификат:

openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout /etc/pki/tls/private/logstash-forwarder.key -out /etc/pki/tls/certs/logstash-forwarder.crt

Файлы будут в /etc/pki/tls/certs/ и /etc/pki/tls/private/.

Создайте конфигурации Logstash в /etc/logstash/conf.d/: input, filter и output.

Input (filebeat -> Logstash):

vim /etc/logstash/conf.d/filebeat-input.conf

Вставьте:

input {
  beats {
    port => 5443
    ssl => true
    ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
    ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}

Filter (парсинг syslog):

vim /etc/logstash/conf.d/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-плагин для извлечения полей из syslog-сообщений.

Output (Logstash -> Elasticsearch):

vim /etc/logstash/conf.d/output-elasticsearch.conf

Вставьте:

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

Запустите Logstash и включите автозапуск:

sudo systemctl enable logstash
sudo systemctl start logstash

Logstash запущен на порту 5443 с SSL

Совет по отладке: смотрите логи Logstash в /var/log/logstash/ и включайте verbose/logstash‑debug при необходимости.

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

Filebeat — агент для пересылки логов. На клиенте скопируйте сертификат от сервера Logstash и поместите в /etc/pki/tls/certs/.

Подключитесь к client1:

ssh root@client1IP

Скопируйте сертификат:

scp root@elk-serverIP:~/logstash-forwarder.crt .

Создайте директорию и переместите сертификат:

sudo mkdir -p /etc/pki/tls/certs/
mv ~/logstash-forwarder.crt /etc/pki/tls/certs/

Импортируйте GPG-ключ elastic:

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

Скачайте и установите Filebeat (rpm):

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.1.1-x86_64.rpm
rpm -ivh filebeat-5.1.1-x86_64.rpm

Откройте конфигурацию:

cd /etc/filebeat/
vim filebeat.yml

Добавьте пути для логов (пример для CentOS):

  paths:
    - /var/log/secure
    - /var/log/messages

Установите тип документов syslog:

  document-type: syslog

Отключите вывод напрямую в Elasticsearch (прокомментируйте блок output.elasticsearch). Включите output.logstash и укажите хост Logstash по IP и порт:

output.logstash:
  # The Logstash hosts
  hosts: ["10.0.15.10:5443"]
  bulk_max_size: 1024
  ssl.certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]
  template.name: "filebeat"
  template.path: "filebeat.template.json"
  template.overwrite: false

Включите и запустите Filebeat:

sudo systemctl enable filebeat
sudo systemctl start filebeat

Проверьте состояние службы:

systemctl status filebeat

Совет: если Filebeat не отправляет данные, проверьте сертификаты и права доступа к файлам.

Шаг 7 — Установка Filebeat на Ubuntu клиент

Подключитесь к Ubuntu клиенту:

ssh root@ubuntu-clientIP

Скопируйте сертификат и переместите его в /etc/pki/tls/certs/:

scp root@elk-serverIP:~/logstash-forwarder.crt .
sudo mkdir -p /etc/pki/tls/certs/
mv ~/logstash-forwarder.crt /etc/pki/tls/certs/

Добавьте ключ Elastic в apt и установите .deb пакет Filebeat:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.1.1-amd64.deb
dpkg -i filebeat-5.1.1-amd64.deb

Отредактируйте /etc/filebeat/filebeat.yml и укажите пути логов для Ubuntu:

  paths:
    - /var/log/auth.log
    - /var/log/syslog

  document-type: syslog

Отключите elasticsearch вывод и включите logstash, указав хост и сертификат:

output.logstash:
  hosts: ["10.0.15.10:5443"]
  bulk_max_size: 1024
  ssl.certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]
  template.name: "filebeat"
  template.path: "filebeat.template.json"
  template.overwrite: false

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

sudo systemctl enable filebeat
sudo systemctl start filebeat
systemctl status filebeat

Filebeat запущен на клиенте Ubuntu

Шаг 8 — Тестирование Elastic Stack и Kibana

Откройте в браузере домен, указанный в конфигурации Nginx (в примере elk-stack.co). Авторизуйтесь через базовую аутентификацию (admin).

В Kibana:

  • Перейдите в Management → Index Patterns → Create index pattern
  • Укажите filebeat-* и нажмите Create

Создание начального индекса filebeat для Kibana

Отметьте индекс как default при необходимости:

Filebeat индекс как индекс по умолчанию в Kibana

Перейдите в Discover — вы увидите логи с client1 и client2.

Просмотр логов со всех серверов в Discover

Пример JSON документа события (например, неудачный SSH вход):

Пример JSON для неудачной попытки SSH

Теперь можно строить дашборды, алёрты и визуализации.

Отладка и типичные ошибки

  1. Logstash не принимает соединения на 5443

    • Проверьте, что Logstash запущен и слушает порт: netstat -plntu | grep 5443
    • Проверьте права на сертификаты и владельца файлов
    • Убедитесь, что firewall (iptables/firewalld) разрешает локальные соединения
  2. Filebeat не может подключиться к Logstash

    • Проверьте корректность пути к сертификату в filebeat.yml
    • Проверьте время на клиентах и сервере (несовпадение времени может влиять на SSL)
    • Просмотрите логи Filebeat: journalctl -u filebeat -f или /var/log/filebeat/filebeat
  3. Kibana не отображает индекс

    • Убедитесь, что Logstash отсылает данные в индекс filebeat-* в Elasticsearch
    • Проверьте шаблоны индекса и mapping, иногда требуется вручную создать шаблон
  4. Elasticsearch не стартует / OOM

    • Проверьте параметры JVM в /etc/elasticsearch/jvm.options
    • Убедитесь, что heap size не больше половины физической памяти и не превышает 32 ГБ без специальных настроек

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

  • Используйте TLS между компонентами (Logstash ↔ Filebeat и Elasticsearch ↔ Kibana) в продакшене.
  • Настройте аутентификацию и авторизацию (например, X-Pack Security или прокси с внешней аутентификацией).
  • Ограничьте доступ к портам через firewall и ACL.
  • Резервируйте сертификаты и используйте CA или доверенные провайдеры.

Резервное копирование и обновление

  • Делайте snapshot данных Elasticsearch в удалённое хранилище (S3, NFS) перед обновлением.
  • Обновляйте стеки поочерёдно: сначала бэкенд (Elasticsearch), затем Logstash и Kibana.
  • Тестируйте апгрейд на копии кластера.

Чек-лист перед сдачей (Role-based)

Администратор сервера:

  • SELinux и firewall учтены
  • Сервисы запускаются и включены в автозагрузку
  • Сертификаты находятся в безопасном месте

DevOps/Инженер мониторинга:

  • Filebeat установлен на целевых хостах
  • Правильные пути логов и типы документов
  • Индексы отображаются в Kibana

Безопасность/Compliance:

  • TLS включён между компонентами
  • Доступ к Kibana ограничен
  • Хранение логов соответствует политике хранения

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

  • Kibana доступна с использованием базовой аутентификации через Nginx.
  • Filebeat успешно отправляет логи с обоих клиентов в Logstash (проверка по документам в Discover).
  • Logstash применяет фильтр grok и выводит корректные поля (timestamp, hostname, program, message).
  • Elasticsearch работает без свопинга (mlockall включён) и слушает на порту 9200 локально.

Методика тестирования (мини‑методология)

  1. Подготовка: резервная копия конфигураций.
  2. Инструменты проверки: curl, netstat, journalctl, tail для логов.
  3. Интеграционный тест: отправьте тестовое сообщение с клиента и проверьте его появление в Kibana.

Пример тестового сообщения с клиента:

echo "Test log from client1" >> /var/log/messages

Затем в Kibana фильтруете по message: “Test log from client1”.

Быстрый план отката (runbook)

  • Отключить Filebeat на клиентах: systemctl stop filebeat
  • Отключить Logstash: systemctl stop logstash
  • Восстановить старые конфигурации из резервной копии
  • Перезапустить сервисы и проверить логи

Сравнение альтернатив

  • Beats vs syslog-ng/rsyslog: Beats легче в установке и лучше интегрируются с Elastic Stack; syslog-ng/rsyslog полезны при традиционной централизованной маршрутизации логов.
  • Logstash vs Ingest Node (Elasticsearch): Logstash мощнее для сложных трансформаций; Ingest Pipeline упрощает архитектуру, но имеет ограничения по плагинам.

Словарь (1‑строчные определения)

  • Elasticsearch — поисковое хранилище JSON-документов.
  • Kibana — веб-интерфейс для визуализации Elasticsearch.
  • Logstash — конвейер обработки и маршрутизации логов.
  • Filebeat — агент для отправки лог-файлов.

Частые вопросы (FAQ)

Q: Можно ли обойтись без Logstash и отправлять напрямую в Elasticsearch? A: Да, Filebeat может отправлять напрямую в Elasticsearch. Но Logstash полезен для сложного парсинга, обогащения и фильтрации.

Q: Как масштабировать Elasticsearch? A: Добавляйте узлы к кластеру, настраивайте replica/shard, используйте выделенные мастер/ингест/данные ноды.

Пример проверки работоспособности — набор команд

# На сервере ELK
curl -s http://localhost:9200/_cat/indices?v
curl -s http://localhost:9200/_cluster/health?pretty

# На клиенте Filebeat
systemctl status filebeat
journalctl -u filebeat -n 200

Диаграмма принятия решений (упрощённая)

flowchart TD
  A[Есть ли Logstash в архитектуре?] -->|Да| B[Отправлять Filebeat -> Logstash]
  A -->|Нет| C[Отправлять Filebeat -> Elasticsearch]
  B --> D{Нужен парсинг?}
  D -->|Да| E[Использовать Logstash grok]
  D -->|Нет| F[Использовать Ingest Pipeline]

Заключение

Elastic Stack установлен и настроен для сбора логов с двух клиентов (CentOS и Ubuntu). Мы настроили безопасную доставку логов по TLS, организовали доступ к Kibana через Nginx и подготовили базовые фильтры для syslog. Следующие шаги — добавление алёртинга, создание дашбордов и планирование резервного копирования индексов.

Сводка:

  • Установлены и запущены Elasticsearch, Logstash, Kibana и Filebeat
  • Настроено шифрование между Filebeat и Logstash
  • Kibana доступна через Nginx с базовой аутентификацией

Спасибо за внимание. Если нужно, могу подготовить версию плейбука Ansible или набор systemd unit‑файлов для автоматического развёртывания.

Ссылки и ресурсы

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

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

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро