Elasticsearch + Kibana + Logstash на Ubuntu: установка ELK Stack 9
ELK Stack — это связка из трёх продуктов Elastic: Elasticsearch (поисковый движок и хранилище), Kibana (веб-интерфейс) и Logstash (сбор и обработка логов). Вместе они образуют систему централизованного сбора журналов: серверы присылают логи, Logstash их разбирает, Elasticsearch индексирует, а Kibana показывает. Поддерживаются Linux, Windows и BSD.
В этой инструкции разберём установку серверной части ELK 9 (актуальная версия — 9.5.3) на Ubuntu и настройку сбора логов с Linux-клиентов.
Подготовка сервера
1. Обновление кэша apt
apt update
apt upgrade
upgrade стоит делать на новом сервере, где не запущено важных сервисов.
2. Выбор способа установки
Есть два способа — через официальный репозиторий (удобнее и быстрее) или через deb-пакет (если доступ к репозиторию заблокирован).
Установка из репозитория. В современных версиях ключ добавляют в keyring (команда apt-key устарела и удалена в Ubuntu 24.04):
apt install apt-transport-https gnupg
curl -s https://artifacts.elastic.co/GPG-KEY-elasticsearch |
gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/elasticsearch-keyring.gpg --import
chmod 644 /etc/apt/trusted.gpg.d/elasticsearch-keyring.gpg
Создаём файл репозитория:
vi /etc/apt/sources.list.d/elastic-9.x.list
deb https://artifacts.elastic.co/packages/9.x/apt stable main
Обновляем индекс:
apt-get update -o Dir::Etc::sourcelist="/etc/apt/sources.list.d/elastic-9.x.list"
Установка из deb-пакета. Подойдёт, если IP заблокирован. Ставим утилиту загрузки и скачиваем пакеты с страницы загрузок:
apt install wget
3. Настройка брандмауэра
Открываем порты:
iptables -I INPUT -p tcp --dport 5044 -j ACCEPT
iptables -I INPUT -p tcp --dport 5601 -j ACCEPT
где 5044 — порт приёма Logstash, 5601 — Kibana.
Сохраняем правила:
apt install iptables-persistent
netfilter-persistent save
Установка Java
Продукты Elastic содержат собственную встроенную JDK, поэтому отдельная установка Java больше не требуется. Если нужен внешний JDK (например, для плагинов), ставим:
apt install default-jdk
java -version
Elasticsearch
а) Из репозитория
apt install elasticsearch
б) Из deb-пакета
Скачиваем актуальную версию со страницы загрузки:
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-9.5.3-amd64.deb
dpkg -i elasticsearch-*.deb
После установки
При первом запуске выводится блок Security autoconfiguration с паролем суперпользователя:
--------------------------- Security autoconfiguration information ----------------------------
The generated password for the elastic built-in superuser is : MFVg1a6NpglV69yci_rr
Пароль пользователя elastic сохраните — он понадобится дальше.
Сменить пароль можно командой:
/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
Запускаем сервис и включаем автозапуск:
systemctl enable elasticsearch --now
Проверяем:
curl -k -u elastic:MFVg1a6NpglV69yci_rr https://localhost:9200
Ответ будет примерно таким:
{
"name" : "elk",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "uZQ6-MAqThyLq3OJgU5-fQ",
"version" : {
"number" : "9.5.3",
"build_flavor" : "default",
"build_type" : "deb",
"lucene_version" : "10.x",
"minimum_wire_compatibility_version" : "8.19.0"
},
"tagline" : "You Know, for Search"
}
Kibana
а) Из репозитория
apt install kibana
б) Из deb-пакета
Скачиваем со страницы загрузки Kibana:
wget https://artifacts.elastic.co/downloads/kibana/kibana-9.5.3-amd64.deb
dpkg -i kibana-*.deb
После установки
Редактируем конфигурацию:
vi /etc/kibana/kibana.yml
Указываем интерфейс прослушивания:
server.host: "192.168.1.10"
Включаем автозапуск и перезапускаем:
systemctl enable kibana
systemctl restart kibana
Открываем в браузере http://<IP-сервера>:5601. Появится форма ввода токена. Получаем токен на сервере:
/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
Копируем токен в Kibana и нажимаем Configure Elastic. Откроется окно ввода проверочного кода — получаем его:
/usr/share/kibana/bin/kibana-verification-code
Вводим 6-значный код, нажимаем Verify. После настройки появится окно входа — используем логин elastic и пароль из шага установки Elasticsearch.
Logstash
а) Из репозитория
apt install logstash
б) Из deb-пакета
Скачиваем со страницы загрузки Logstash:
wget https://artifacts.elastic.co/downloads/logstash/logstash-9.5.3-amd64.deb
dpkg -i logstash-*.deb
Настройка Logstash
Включаем автозапуск и стартуем:
systemctl enable logstash
systemctl start logstash
Конфигурации хранятся в /etc/logstash/conf.d/ в отдельных файлах с секциями:
input— источники данных;filter— обработка;output— назначение.
input.conf:
vi /etc/logstash/conf.d/input.conf
input {
beats {
port => 5044
}
}
filter.conf:
vi /etc/logstash/conf.d/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" ]
}
}
}
output.conf:
vi /etc/logstash/conf.d/output.conf
output {
elasticsearch {
hosts => ["https://localhost:9200"]
ssl => true
ssl_certificate_verification => false
manage_template => false
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
user => elastic
password => "MFVg1a6NpglV69yci_rr"
}
}
Замените пароль на свой, полученный при установке Elasticsearch.
Проверяем конфигурацию:
/usr/share/logstash/bin/logstash --path.settings /etc/logstash -t
Должны увидеть Configuration OK. Перезапускаем:
systemctl restart logstash
Запуск занимает около минуты. Проверяем, что порт слушается:
ss -tunlp | grep 5044
tcp LISTEN 0 128 :::5044 :::* users:(("java",pid=11745,fd=114))
Сервис готов принимать логи.
Установка и настройка клиента (Filebeat)
Для отправки логов используем Filebeat. Он есть для Linux, Windows и macOS.
Установка на CentOS / RHEL
rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
vi /etc/yum.repos.d/elastic-9.x.repo
[elastic-9.x]
name=Elastic repository for 9.x packages
baseurl=https://artifacts.elastic.co/packages/9.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
yum install filebeat
Или через RPM:
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-9.5.3-x86_64.rpm
rpm -ivh filebeat-*.rpm
Установка на Ubuntu / Debian
vi /etc/apt/sources.list.d/elastic-9.x.list
deb https://artifacts.elastic.co/packages/9.x/apt stable main
apt update
apt install filebeat
Или через deb:
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-9.5.3-amd64.deb
dpkg -i filebeat-*.deb
Настройка после установки
vi /etc/filebeat/filebeat.yml
В разделе filebeat.inputs включаем сбор (enabled: true) и задаём пути:
filebeat.inputs:
- type: filestream
enabled: true
paths:
- /var/log/*.log
- /var/log/secure
- /var/log/messages
- /var/log/syslog
В Filebeat 9 вместо устаревшего
type: logиспользуетсяtype: filestream.
Комментируем прямой вывод в Elasticsearch:
#output.elasticsearch:
# hosts: ["localhost:9200"]
Включаем вывод в Logstash и указываем адрес сервера:
output.logstash:
hosts: ["192.168.1.10:5044"]
где 192.168.1.10 — адрес сервера ELK.
Запускаем:
systemctl enable filebeat
systemctl restart filebeat
Просмотр логов в Kibana
Открываем http://<IP-сервера>:5601, входим под elastic. В меню Analytics → Discover увидим логи с клиента. При первом входе Kibana предложит создать Data View — укажите шаблон filebeat-* или logstash-*. Наш ELK настроен и работает.
Отправка логов через Rsyslog
Rsyslog умеет отправлять журналы по сети прямо в Logstash. На клиенте создаём шаблон лога:
vi /etc/rsyslog.d/json-template.conf
template(name="json-template" type="list") {
constant(value="{")
constant(value=""@timestamp":"") property(name="timereported" dateFormat="rfc3339")
constant(value="","@version":"1")
constant(value="","message":"") property(name="msg" format="json")
constant(value="","sysloghost":"") property(name="hostname")
constant(value="","severity":"") property(name="syslogseverity-text")
constant(value="","facility":"") property(name="syslogfacility-text")
constant(value="","programname":"") property(name="programname")
constant(value="","procid":"") property(name="procid")
constant(value=""}n")
}
Файл отправки:
vi /etc/rsyslog.d/logstash.conf
*.* @@192.168.1.10:5045;json-template
где:
*— источник логов (все);.*— все уровни важности;@@— TCP (один@— UDP);192.168.1.10— адрес сервера;5045— порт Logstash для rsyslog;json-template— используемый шаблон.
Перезапускаем:
systemctl restart rsyslog
На сервере дописываем приём в input.conf:
vi /etc/logstash/conf.d/input.conf
tcp {
port => 5045
codec => "json"
type => "rsyslog"
}
И правило вывода в output.conf перед остальными:
vi /etc/logstash/conf.d/output.conf
if [type] == "rsyslog" {
elasticsearch {
hosts => [ "https://localhost:9200" ]
ssl => true
ssl_certificate_verification => false
user => elastic
password => "MFVg1a6NpglV69yci_rr"
}
}
systemctl restart logstash
При необходимости открываем порт:
iptables -I INPUT -p tcp --dport 5045 -j ACCEPT
Пример сбора логов NGINX
Два варианта: NGINX → Filebeat → Logstash → Elastic и NGINX → Logstash → Elastic напрямую.
Через Filebeat
Добавляем путь в filebeat.yml:
paths:
- /var/log/nginx/*.log
systemctl restart filebeat
Делаем несколько запросов к сайту и ищем в Kibana по nginx.
Напрямую в Logstash
Добавляем приём syslog:
vi /etc/logstash/conf.d/input.conf
syslog {
port => 5140
}
systemctl restart logstash
Настраиваем nginx:
vi /etc/nginx/nginx.conf
log_format logstash '$remote_addr - $remote_user [$time_local] "$host" '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
access_log syslog:server=localhost:5140,tag=nginx_access logstash;
error_log syslog:server=localhost:5140,tag=nginx_error notice;
nginx -t && nginx -s reload
Проверяем логи в Kibana.
Тонкости и подводные камни
apt-keyудалён — в Ubuntu 24.04/26.04 ключ добавляется черезgpg --no-default-keyringв/etc/apt/trusted.gpg.d/.- Filebeat 9:
type: logустарел — используйтеfilestream. - Встроенная Java — отдельная установка JDK не нужна, все продукты идут со своей.
- Пароль elastic — храните надёжно; при утечке смените через
elasticsearch-reset-password. ssl_certificate_verification => false— удобно для локального стенда; на проде настройте корректный CA-сертификат.- Data View в Kibana — без него Discover не покажет данные, не забудьте создать после первого входа.
Шпаргалка
# репозиторий
curl -s https://artifacts.elastic.co/GPG-KEY-elasticsearch |
gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/elasticsearch-keyring.gpg --import
echo "deb https://artifacts.elastic.co/packages/9.x/apt stable main" > /etc/apt/sources.list.d/elastic-9.x.list
apt update
# серверная часть
apt install elasticsearch kibana logstash
systemctl enable elasticsearch kibana logstash --now
# клиент
apt install filebeat
systemctl enable filebeat --now
Проверено на: Ubuntu 22.04/24.04/26.04 + ELK 9.5.3.
Дата: Сентябрь 2026.