2026-09-19
Elasticsearch + Kibana + Logstash на Ubuntu: установка ELK Stack 9

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/ в отдельных файлах с секциями:

  1. input — источники данных;
  2. filter — обработка;
  3. 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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *