Установка 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
Проверьте mlock и статус узла Elasticsearch:
curl -XGET 'localhost:9200/_nodes?filter_path=**.mlockall&pretty'
curl -XGET 'localhost:9200/?pretty'
Совет: если 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
Установите 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
Совет: для публичного доступа используйте 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 в /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
Шаг 8 — Тестирование Elastic Stack и Kibana
Откройте в браузере домен, указанный в конфигурации Nginx (в примере elk-stack.co). Авторизуйтесь через базовую аутентификацию (admin).
В Kibana:
- Перейдите в Management → Index Patterns → Create index pattern
- Укажите filebeat-* и нажмите Create

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

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

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

Теперь можно строить дашборды, алёрты и визуализации.
Отладка и типичные ошибки
Logstash не принимает соединения на 5443
- Проверьте, что Logstash запущен и слушает порт:
netstat -plntu | grep 5443 - Проверьте права на сертификаты и владельца файлов
- Убедитесь, что firewall (iptables/firewalld) разрешает локальные соединения
- Проверьте, что Logstash запущен и слушает порт:
Filebeat не может подключиться к Logstash
- Проверьте корректность пути к сертификату в filebeat.yml
- Проверьте время на клиентах и сервере (несовпадение времени может влиять на SSL)
- Просмотрите логи Filebeat:
journalctl -u filebeat -fили/var/log/filebeat/filebeat
Kibana не отображает индекс
- Убедитесь, что Logstash отсылает данные в индекс filebeat-* в Elasticsearch
- Проверьте шаблоны индекса и mapping, иногда требуется вручную создать шаблон
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 локально.
Методика тестирования (мини‑методология)
- Подготовка: резервная копия конфигураций.
- Инструменты проверки: curl, netstat, journalctl, tail для логов.
- Интеграционный тест: отправьте тестовое сообщение с клиента и проверьте его появление в 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‑файлов для автоматического развёртывания.
Ссылки и ресурсы
- Официальная документация Elastic: https://www.elastic.co/guide/index.html
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента