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

Установка и настройка Elastic Stack (ELK) на Ubuntu 16.04

• 9 min read • DevOps • Обновлено 22 Nov 2025
Установка Elastic Stack на Ubuntu 16.04
Установка Elastic Stack на Ubuntu 16.04

Этот пошаговый гид показывает, как установить и настроить Elastic Stack (Elasticsearch, Logstash, Kibana) на одном сервере Ubuntu 16.04 и как развернуть Filebeat на клиентах Ubuntu 16.04 и CentOS 7. Включены базовые настройки безопасности (SSL для Logstash и базовая аутентификация для Kibana), примеры конфигураций, чеклисты и советы по отладке.

Важно: инструкция ориентирована на Elastic Stack 5.x и Ubuntu 16.04. Для других версий подходы схожи, но команды и конфигурации могут отличаться.

Elastic Stack — набор инструментов для централизованного сбора, обработки и визуализации логов:

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

Минимальные тестовые ресурсы для этого руководства:

  • Сервер: Ubuntu 16.04 x64, 4 ГБ RAM, hostname: elk-master
  • Клиент Ubuntu: Ubuntu 16.04 x64, 1 ГБ RAM, hostname: elk-client1
  • Клиент CentOS: CentOS 7 x64, 1 ГБ RAM, hostname: elk-client2

Краткие определения (1 строка):

  • PPA — Personal Package Archive, репозиторий пакетов для Ubuntu.
  • mlockall — настройка блокировки памяти, предотвращающая свап Elasticsearch.

Варианты использования и сценарии

  • Централизованный сбор системных логов и событий безопасности.
  • Мониторинг приложений и инфраструктуры.
  • Аналитика и поиск по логам в режиме near real-time.

Противопоказания / когда этот стек не подходит:

  • Для единичных небольших проектов с малым объёмом логов проще использовать локальный syslog или cloud-native сервисы.
  • Если требуется минимальная задержка и очень высокая пропускная способность, возможна отдельная настройка кластера Elasticsearch и балансировка Logstash.

Шаг 0 — Подготовка и заметки о совместимости

Примечание: инструкция рассчитана на Elastic Stack 5.x. Если вы используете Elastic Stack 6.x / 7.x / 8.x, проверяйте изменения в конфигурационных опциях, форматах шаблонов и безопасности. Команды для apt/yum и пути к файлам в большинстве случаев совпадают, но значения параметров и плагины могли измениться.

Советы по локализации настроек для продакшна:

  • Используйте выделенные диски для индексов Elasticsearch.
  • Отключите swap на продакшн-серверах или обеспечьте правильный mlockall/LimitMEMLOCK.
  • Планируйте JVM heap для Elasticsearch (Xms/Xmx) в /etc/elasticsearch/jvm.options.

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

Elasticsearch требует Java 8. В оригинальной инструкции используется Oracle JDK 8 через PPA. Альтернатива — OpenJDK 8 (обычно достаточно для большинства развёртываний).

Команды для установки пакетов и добавления PPA (Ubuntu):

sudo apt-get update  
sudo apt-get install -y python-software-properties software-properties-common apt-transport-https

Добавляем PPA для Oracle Java 8 и устанавливаем:

sudo add-apt-repository ppa:webupd8team/java -y  
sudo apt-get update
sudo apt-get install -y oracle-java8-installer

Проверка:

java -version

Важно: если вы предпочитаете OpenJDK, замените установку на:

sudo apt-get install -y openjdk-8-jdk

Преимущество Oracle JDK — совместимость и тестирование на некоторых системах. OpenJDK обычно проще в поддержке и доступен из стандартных репозиториев.


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

Добавляем GPG-ключ Elastic и репозиторий 5.x:

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

Файлы конфигурации:

  • /etc/elasticsearch/elasticsearch.yml — основная конфигурация
  • /usr/lib/systemd/system/elasticsearch.service — unit-файл systemd
  • /etc/default/elasticsearch — дефолтные переменные окружения

Основные изменения в elasticsearch.yml (работаем в режиме single-node локально):

bootstrap.memory_lock: true
network.host: localhost
http.port: 9200

Причина: включаем блокировку памяти, чтобы избежать свапа и ухудшения производительности.

Делаем изменения в systemd unit и /etc/default:

# /usr/lib/systemd/system/elasticsearch.service
LimitMEMLOCK=infinity

# /etc/default/elasticsearch
MAX_LOCKED_MEMORY=unlimited

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

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

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

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

Установка Elasticsearch на Ubuntu 16.04

mlockall включён и Elasticsearch запущен

Советы по продакшн-готовности:

  • Настройте JVM heap в /etc/elasticsearch/jvm.options (например, Xms=Xmx=50% от RAM, не более ~30–32 ГБ).
  • Выделяйте отдельные диски под data nodes.
  • Настраивайте snapshot для резервного копирования индексов.

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

Kibana слушает локально, а Nginx выполняет роль обратного прокси для публичного доступа и базовой защиты.

Установка Kibana:

sudo apt-get install -y kibana

Изменяем /etc/kibana/kibana.yml:

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

Запуск и автозапуск:

sudo systemctl enable kibana
sudo systemctl start kibana

Настройка Nginx и базовой аутентификации:

sudo apt-get install -y nginx apache2-utils
cd /etc/nginx/
vim sites-available/kibana

В файл вставляем конфигурацию виртуального хоста (пример):

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;
    }
}

Создаём пользователя для доступа:

sudo htpasswd -c /etc/nginx/.kibana-user admin
# Введите пароль когда будет запрошено

Активируем сайт, проверяем конфигурацию и перезапускаем nginx:

ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/
nginx -t
systemctl enable nginx
systemctl restart nginx

Установка Kibana с Nginx на Ubuntu 16.04

Примечание: вместо базовой аутентификации используйте более безопасные решения (NGINX+LDAP, OAuth, или обратную прокси с TLS и авторизацией) для продакшн.


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

Logstash служит в качестве приёмника от Beats (Filebeat) и преобразователя событий перед отправкой в Elasticsearch.

Установка:

sudo apt-get install -y logstash

Добавляем запись в /etc/hosts (локально для теста):

# /etc/hosts
10.0.15.10    elk-master

Создание самоподписанного SSL-сертификата для защищённого соединения Beats → Logstash:

cd /etc/logstash/
openssl req -subj /CN=elk-master -x509 -days 3650 -batch -nodes -newkey rsa:4096 -keyout logstash.key -out logstash.crt

Файлы окажутся в /etc/logstash/. Параметр /CN должен совпадать с тем, как клиенты будут обращаться к серверу (elk-master в нашем примере).

Создаём конфигурации Logstash в /etc/logstash/conf.d/

Input (conf.d/filebeat-input.conf):

input {
  beats {
    port => 5443
    type => syslog
    ssl => true
    ssl_certificate => "/etc/logstash/logstash.crt"
    ssl_key => "/etc/logstash/logstash.key"
  }
}

Filter (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 для разбора системных логов.

Output (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 на Ubuntu 16.04

Советы по фильтрам и производительности:

  • Группируйте grok-правила и используйте dissect где возможно — быстрее и предсказуемее.
  • Для больших объёмов используйте несколько Logstash-инстансов и балансировщик.
  • В продакшне храните ключи и сертификаты с ограниченными правами доступа.

Шаг 5 — Установка и настройка Filebeat на Ubuntu-клиенте

Подключаемся к клиенту и копируем сертификат:

ssh root@elk-client1
scp root@elk-server:/etc/logstash/logstash.crt .

Добавляем запись в /etc/hosts:

10.0.15.10    elk-master

Добавляем ключ Elastic и репозиторий, затем устанавливаем filebeat:

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

Правим /etc/filebeat/filebeat.yml — указываем пути логов и включаем отправку в Logstash:

Добавляем пути:

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

Указываем тип документов (document-type):

  document-type: syslog

Отключаем отправку в Elasticsearch (комментируем секцию output.elasticsearch) и включаем output.logstash:

output.logstash:
  hosts: ["elk-master:5443"]
  bulk_max_size: 2048
  ssl.certificate_authorities: ["/etc/filebeat/logstash.crt"]
  template.name: "filebeat"
  template.path: "filebeat.template.json"
  template.overwrite: false

Переносим сертификат и запускаем сервис:

mv ~/logstash.crt /etc/filebeat/
sudo systemctl start filebeat
sudo systemctl enable filebeat
sudo systemctl status filebeat

Установка Filebeat на Ubuntu клиента

Совет: проверьте права на /etc/filebeat/logstash.crt и владельца файла. Неправильные права могут помешать подключению.


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

На CentOS процедура аналогична, но используется yum и формат репозитория для RPM.

Копируем сертификат и добавляем запись в hosts:

ssh root@elk-client2
scp root@elk-master:/etc/logstash/logstash.crt .
# добавить 10.0.15.10 elk-master в /etc/hosts

Импортируем GPG-ключ и создаём репозиторий:

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
cd /etc/yum.repos.d/
vim elastic.repo

Содержимое elastic.repo:

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

Устанавливаем filebeat:

sudo yum -y install filebeat

Правим /etc/filebeat/filebeat.yml — указываем пути:

  paths:
    - /var/log/secure
    - /var/log/messages
  document-type: syslog

Отключаем output.elasticsearch и включаем output.logstash как в Ubuntu-примере. Копируем сертификат в /etc/filebeat/ и запускаем сервис:

sudo systemctl enable filebeat
sudo systemctl start filebeat
tail -f /var/log/filebeat/filebeat

Установка Filebeat на CentOS 7

Совет: для CentOS SELinux может блокировать доступ к сертификатам. При проблемах временно проверьте permissive режим или добавьте соответствующие политики.


Шаг 7 — Индексация и создание индекса в Kibana

Откройте веб-интерфейс Kibana через домен, настроенный в Nginx (в примере elk-stack.co). Введите admin и пароль, созданный ранее.

В Kibana:

  1. Перейдите в Management → Index Patterns.
  2. Создайте индекс filebeat-* и нажмите Create.

Создание индекса filebeat в Kibana

Выберите default index (нажмите звезду), затем откройте Discover — вы увидите логи от elk-client1 и elk-client2.

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

Пример JSON-события (ssh неудачная попытка):

Пример JSON лога с клиента


Шаг 8 — Тестирование и отладка

Базовые шаги для отладки:

  1. Проверить, что Logstash слушает порт 5443 и принимает TLS:
sudo netstat -plntu | grep 5443
  1. Просмотреть логи Logstash и Filebeat при ошибках:
journalctl -u logstash -f
journalctl -u filebeat -f
tail -n 200 /var/log/filebeat/filebeat
  1. Если Filebeat не подключается, проверьте:
  • Доступность elk-master:5443 по сети и правильность записи в /etc/hosts.
  • Корректность сертификата и его расположение на клиенте (/etc/filebeat/logstash.crt).
  • Совпадение CN в сертификате с именем хоста.
  1. Если Kibana не показывает индексы:
  • Проверьте, что Logstash действительно отправляет документы в Elasticsearch (логи Logstash).
  • Проверьте индексы в Elasticsearch:
curl -XGET 'localhost:9200/_cat/indices?v'

Чек-лист для развёртывания (роль по шагам)

Администратор сервера (elk-master):

  • Установил Java 8 (Oracle или OpenJDK).
  • Установил Elasticsearch и включил mlockall.
  • Установил Kibana и настроил Nginx обратный прокси.
  • Установил Logstash и сгенерировал SSL-сертификат.
  • Настроил конфиги Logstash в /etc/logstash/conf.d/.

Администратор клиента (elk-client1 / elk-client2):

  • Скопировал logstash.crt в /etc/filebeat/.
  • Установил filebeat и настроил paths и output.logstash.
  • Запустил и проверил статус filebeat.

Общий: Проверить индексы в Kibana и убедиться, что события появляются в Discover.


Шаблон процедуры восстановления (микро-руководство)

Если Logstash перестал принимать данные или Elasticsearch упал:

  1. Остановить filebeat на клиентах: sudo systemctl stop filebeat
  2. Проверить состояние Elasticsearch: sudo systemctl status elasticsearch
  3. Если Elasticsearch упал, просмотреть /var/log/elasticsearch/* и проверить диск и память.
  4. После восстановления Elasticsearch и Logstash запустить filebeat на клиентах по очереди.

Паттерны риска и меры смягчения

Риски:

  • Потеря индексов при сбое диска. Митигирование: настроить snapshot и репликацию индексов.
  • Утечки доступа к Kibana. Митигирование: ограничить доступ через обратный прокси, использовать HTTPS и централизованную аутентификацию.
  • Проблемы с производительностью при больших объёмах логов. Митигирование: масштабирование Logstash, балансировка, использование Kafka в качестве буфера.

Минимальные тесты приёмки (acceptance)

  • Filebeat на каждом клиенте подключается к Logstash: filebeat status показывает active.
  • Logstash принимает и парсит сообщения grok без ошибок.
  • Elasticsearch индексирует документы и индекс filebeat-* виден в Kibana.
  • Пользователь через Nginx может зайти в Kibana с заданными учётными данными.

Краткая методология настройки (мини-метод)

  1. Установить Java → Elasticsearch
  2. Настроить блокировку памяти и запустить Elasticsearch
  3. Установить Kibana и Nginx (обратный прокси + базовая auth)
  4. Установить Logstash, создать SSL сертификат
  5. Настроить Filebeat на клиентах и направить в Logstash
  6. Создать индекс в Kibana и проверить данные

Решение проблем — частые случаи

  • Filebeat пишет SSL handshake error: убедитесь, что файл logstash.crt на клиенте соответствует сертификату, используемому Logstash, и что CN совпадает.
  • Logstash не парсит syslog: проверьте регулярное выражение grok и пример сообщения, используйте grok debugger в Kibana.
  • Kibana не отображает индексы: проверьте шаблоны индексов и mappings, возможно, Logstash переопределил template или индекс создаётся с другим префиксом.

Безопасность и GDPR заметки

  • Используйте TLS между Beats и Logstash (как в инструкции).
  • Для продакшна используйте сертификаты от доверенного CA, а не самоподписанные.
  • Храните журналы доступа к Kibana и логи изменений конфигураций.
  • Если логируете персональные данные, убедитесь, что у вас есть политика хранения, и настроены механизмы удаления/ретеншна.

Глоссарий (1 строка)

  • Elastic Stack / ELK — набор Elasticsearch + Logstash + Kibana (+ Beats).
  • Beat — лёгкий агент для отправки данных.
  • Grok — плагин Logstash для парсинга текстовых сообщений.

Потенциальные альтернативы

  • Вместо Logstash использовать ingest nodes Elasticsearch (если нужны простые преобразования).
  • Использовать Kafka между Filebeat и Logstash для буферизации и устойчивости.
  • Для облачных решений рассмотреть Elastic Cloud, AWS Elasticsearch Service или другие managed-сервисы.

Mermaid: базовое дерево принятия решения для архитектуры

flowchart TD
  A[Нужен централизованный сбор логов?] -->|Да| B{Высокая нагрузка?}
  B -->|Нет| C[Filebeat → Logstash → Elasticsearch]
  B -->|Да| D[Filebeat → Kafka → Logstash → Elasticsearch]
  A -->|Нет| E[Использовать локальные утилиты syslog]

Резюме

Elastic Stack успешно установлен на Ubuntu 16.04. В руководстве показаны ключевые шаги: установка Java, Elasticsearch, Kibana за Nginx, Logstash с SSL приёмом и Filebeat на клиентах Ubuntu и CentOS. Также приведены чек-листы, советы по отладке, меры безопасности и альтернативные подходы.

Короткие ключевые выводы:

  • Всегда блокируйте память для Elasticsearch в продакшн-сценариях.
  • Защитите канал передачи логов TLS.
  • Используйте обратный прокси и аутентификацию для Kibana.

Справочные материалы

Официальная документация Elastic: https://www.elastic.co/guide/index.html

Поделиться: 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 быстро