Установка и настройка Elastic Stack (ELK) на 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'

Советы по продакшн-готовности:
- Настройте 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
Примечание: вместо базовой аутентификации используйте более безопасные решения (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
Советы по фильтрам и производительности:
- Группируйте 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
Совет: проверьте права на /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
Совет: для CentOS SELinux может блокировать доступ к сертификатам. При проблемах временно проверьте permissive режим или добавьте соответствующие политики.
Шаг 7 — Индексация и создание индекса в Kibana
Откройте веб-интерфейс Kibana через домен, настроенный в Nginx (в примере elk-stack.co). Введите admin и пароль, созданный ранее.
В Kibana:
- Перейдите в Management → Index Patterns.
- Создайте индекс filebeat-* и нажмите Create.

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

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

Шаг 8 — Тестирование и отладка
Базовые шаги для отладки:
- Проверить, что Logstash слушает порт 5443 и принимает TLS:
sudo netstat -plntu | grep 5443- Просмотреть логи Logstash и Filebeat при ошибках:
journalctl -u logstash -f
journalctl -u filebeat -f
tail -n 200 /var/log/filebeat/filebeat- Если Filebeat не подключается, проверьте:
- Доступность elk-master:5443 по сети и правильность записи в /etc/hosts.
- Корректность сертификата и его расположение на клиенте (/etc/filebeat/logstash.crt).
- Совпадение CN в сертификате с именем хоста.
- Если 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 упал:
- Остановить filebeat на клиентах: sudo systemctl stop filebeat
- Проверить состояние Elasticsearch: sudo systemctl status elasticsearch
- Если Elasticsearch упал, просмотреть /var/log/elasticsearch/* и проверить диск и память.
- После восстановления Elasticsearch и Logstash запустить filebeat на клиентах по очереди.
Паттерны риска и меры смягчения
Риски:
- Потеря индексов при сбое диска. Митигирование: настроить snapshot и репликацию индексов.
- Утечки доступа к Kibana. Митигирование: ограничить доступ через обратный прокси, использовать HTTPS и централизованную аутентификацию.
- Проблемы с производительностью при больших объёмах логов. Митигирование: масштабирование Logstash, балансировка, использование Kafka в качестве буфера.
Минимальные тесты приёмки (acceptance)
- Filebeat на каждом клиенте подключается к Logstash: filebeat status показывает active.
- Logstash принимает и парсит сообщения grok без ошибок.
- Elasticsearch индексирует документы и индекс filebeat-* виден в Kibana.
- Пользователь через Nginx может зайти в Kibana с заданными учётными данными.
Краткая методология настройки (мини-метод)
- Установить Java → Elasticsearch
- Настроить блокировку памяти и запустить Elasticsearch
- Установить Kibana и Nginx (обратный прокси + базовая auth)
- Установить Logstash, создать SSL сертификат
- Настроить Filebeat на клиентах и направить в Logstash
- Создать индекс в 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
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента