Хотите видеть, что творится в системе, не открывая по 10 терминалов? Показали, как собрать логи в одном месте и превратить их в понятные графики.
Когда в системе всего один сервис, с логами проблем нет. Но как только появляется больше компонентов, каждый пишет что-то своё и куда-то в своё место. Как результат — полная неразбериха: логи разбросаны по файлам, всё в разном формате, а нужную строчку приходится искать вручную. Чтобы навести порядок в этом хаосе и понять, что происходит в системе, удобно использовать стек ELK — особенно если вы управляете VPS с несколькими сервисами.
В статье рассказали, как настроить централизованный сбор логов с помощью Elasticsearch, Logstash и Kibana. Разобрали установку на сервер с Ubuntu 22.04 LTS, подключение агентов и просмотр логов через веб-интерфейс.
Что такое ELK Stack и зачем он нужен

ELK Stack — это связка инструментов, которые превращают беспорядочные текстовые логи в наглядную картину происходящего на сервере. Используется он в самых разных проектах — от локальных сервисов до крупных веб-приложений, и отлично подходит для тех, кто хочет видеть, а не угадывать, что происходит в инфраструктуре.
Elasticsearch отвечает за хранение и быстрый поиск данных. Он индексирует логи и позволяет мгновенно находить нужные записи, даже если их миллионы.
Logstash — это рабочий конвейер, который принимает логи, обрабатывает их, фильтрует и передаёт дальше.
Kibana показывает собранные данные в графиках, таблицах и дашбордах — так, чтобы можно было быстро разобраться в ситуации.
Часто к этим трём добавляют Filebeat — лёгкий агент, который читает логи на сервере и отправляет их Logstash. Он не перегружает систему и легко настраивается под разные типы логов.
Вместе эти компоненты дают мощный инструмент: логи со всех частей системы собираются в одном месте, приводятся к единому виду и становятся наглядными. Вы можете отследить, где упал скрипт, какие запросы шли к серверу и как часто возникают ошибки. ELK помогает не просто смотреть в логи, а действительно понимать, что происходит.
Подготовка сервера
Чтобы всё заработало как надо, нужен VPS или выделенный сервер с Ubuntu 22.04 LTS. Минимальный порог — 2 CPU и 8 ГБ оперативной памяти, но если есть возможность, дайте Elasticsearch больше ресурсов: он любит оперативку и хорошо себя чувствует на SSD-дисках.
Перед началом обновите систему:
sudo apt update && sudo apt upgrade -yРаботать придётся с sudo или от имени root, так что убедитесь, что у вас есть нужные права. А ещё понадобится стабильное подключение к Интернету — пакеты будем устанавливать из внешних репозиториев.
О том, что такое sudo и как безопасно пользоваться этой командой, мы рассказывали ранее в статье.
Если планируется подключение к Kibana или Elasticsearch извне, откройте нужные порты в файрволе:
- 9200 — для Elasticsearch,
- 5601 — для веб-интерфейса Kibana,
- 5044 — для Logstash, если будете использовать Filebeat.
Пример настройки с UFW:
sudo ufw allow 9200
sudo ufw allow 5601
sudo ufw allow 5044Если сервер будет использоваться только локально или через VPN, настраивать доступ извне необязательно. Но лучше продумать это заранее.
Установка и начальная настройка Elasticsearch
Elasticsearch — основной компонент стека ELK, он отвечает за то, чтобы все полученные логи сохранялись в удобной и индексированной форме. Без него мы не сможем анализировать данные в Kibana, так что первым делом настраиваем именно его.
Чтобы начать работу, потребуется подключить официальный репозиторий Elastic. Для этого добавьте ключ и пропишите источник пакетов. Всё делается в терминале за пару минут. Убедитесь, что в системе установлен apt-transport-https, а затем выполните команды по порядку:
sudo apt update
sudo apt install apt-transport-https ca-certificates gnupg -y
# Добавление GPG-ключа
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | \
sudo gpg --dearmor -o /usr/share/keyrings/elastic-keyring.gpg
# Добавление репозитория Elastic
echo "deb [signed-by=/usr/share/keyrings/elastic-keyring.gpg] \
https://artifacts.elastic.co/packages/8.x/apt stable main" | \
sudo tee /etc/apt/sources.list.d/elastic-8.x.list > /dev/null
# Обновление списка пакетов и установка Elasticsearch
sudo apt update
sudo apt install elasticsearch -yПакеты ca-certificates и gnupg обязательны для корректной работы HTTPS и ключей. curl -fsSL безопаснее wget и более устойчив при работе в скриптах. apt предпочтительнее в новых системах, короче и стабильнее работает с интерактивными пакетами.
По умолчанию Elasticsearch запускается как часть кластера, но если вы разворачиваете его в одиночку, настройте режим single-node. Это делается в конфигурационном файле elasticsearch.yml, который находится по пути /etc/elasticsearch/.
Откройте его в редакторе и добавьте строку:
discovery.type: single-nodeЭтот параметр сообщает системе, что кластер не нужен и узел будет единственным. Это ускоряет запуск и убирает лишние предупреждения.
Затем можно активировать Elasticsearch:
sudo systemctl start elasticsearch
sudo systemctl enable elasticsearchЧтобы проверить, всё ли работает, отправьте запрос:
curl http://localhost:9200Если увидите в ответе JSON с названием узла, версией и статусом, значит всё запустилось как надо. Индексы Elasticsearch будут сохраняться в /var/lib/elasticsearch/, а журнал работы — в /var/log/elasticsearch/.
Обратите внимание: Elasticsearch довольно прожорлив, особенно на этапе индексации. Убедитесь, что у вашего сервера достаточно оперативной памяти. Если работаете в среде с ограниченными ресурсами, например, на VPS с 2–4 ГБ RAM, проверьте настройки Java-машины в файле jvm.options — там можно задать лимиты на использование памяти и отключить swap, чтобы избежать падений производительности.
Настройка Logstash: передаём логи дальше
После того как Elasticsearch запущен, приходит время подключить Logstash — компонент, который берёт на себя всю грязную работу: получает данные от агентов, фильтрует, преобразует и только потом отправляет их в хранилище.
Logstash удобно устанавливать из того же репозитория Elastic, что и Elasticsearch:
sudo apt install logstash -yКогда установка завершена, сервис можно сразу запускать:
sudo systemctl start logstash
sudo systemctl enable logstashТеперь самое интересное — конфигурация. Logstash работает по принципу конвейера: есть вход, обработка и выход. Все настройки хранятся в /etc/logstash/conf.d/. Каждый .conf-файл — это один такой поток. Можно создать сколько угодно: под разные источники, сценарии и форматы логов.
Для старта создадим базовую конфигурацию, чтобы принимать данные от Filebeat. Это делается в файле, например, beats.conf:
sudo nano /etc/logstash/conf.d/beats.confВот минимальный рабочий вариант:
input {
beats {
port => 5044
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "logstash-%{+YYYY.MM.dd}"
}
}Эта настройка:
- принимает входящие сообщения от Filebeat по порту 5044,
- передаёт их в Elasticsearch,
- сохраняет в индексах с разбивкой по датам — удобно для анализа и визуализации в Kibana.
После сохранения конфигурации перезапустите Logstash, чтобы он её подхватил:
sudo systemctl restart logstashПроверьте статус:
sudo systemctl status logstashЕсли всё настроено корректно, Logstash будет принимать данные и молча передавать их дальше. Если что-то пошло не так, логи помогут:
/var/log/logstash/logstash-plain.logНа старте достаточно этой базовой схемы. В будущем вы сможете добавить фильтры, например, grok для разметки строк, geoip для определения геолокации или date для приведения форматов времени. Но сейчас главное — убедиться, что путь от Filebeat до Elasticsearch открыт и работает.
Kibana: подключаем визуализацию
После того как логи начали попадать в Elasticsearch, хочется их не просто видеть в текстовом виде, а понимать, что вообще происходит по графикам, датам, сервисам. Именно для этого существует Kibana — визуальный интерфейс, который подключается к Elasticsearch и превращает массивы данных в читаемые дашборды.
Kibana входит в тот же стек Elastic, так что установка выполняется обычной командой:
sudo apt install kibana -yНо прежде чем запускать, стоит заглянуть в конфигурационный файл. По умолчанию Kibana слушает только localhost, и если вы хотите открыть интерфейс извне, например, подключаться с браузера другого устройства, это нужно изменить.
Откройте файл настроек:
sudo nano /etc/kibana/kibana.ymlНайдите строку:
#server.host: "localhost"И замените её на:
server.host: "0.0.0.0"Теперь Kibana будет принимать подключения с любого IP-адреса. Это удобно, если вы работаете с VPS или подключаетесь по локальной сети.
Дополнительно можно настроить имя узла и логирование — это не обязательно, но полезно для отладки:
server.name: "kibana-node"
logging.dest: /var/log/kibana.logПосле редактирования сохраняем файл и запускаем сервис:
sudo systemctl enable kibana
sudo systemctl start kibanaПроверить статус можно командой:
sudo systemctl status kibanaЕсли всё в порядке, откройте браузер и перейдите по адресу:
http://<IP_сервера>:5601Интерфейс может загрузиться с небольшой задержкой — это нормально. При первом запуске вы попадёте на стартовую страницу, где можно подключить источники данных, настроить визуализации или просто открыть раздел Discover, чтобы увидеть первые лог-записи.
Важно
Kibana — это не только глаз для логов, но и инструмент настройки всего взаимодействия с Elasticsearch. Через неё можно создавать шаблоны индексов, фильтры, правила оповещений и многое другое. Поэтому стоит разобраться с ней на старте, это сильно сэкономит время в будущем.
Подключаем Filebeat — агент для сбора логов
Чтобы цепочка логов была полной, нам нужен агент, который будет следить за нужными файлами и отправлять события в систему. Здесь на помощь приходит Filebeat — компактный, но очень надёжный инструмент, который легко встраивается в любые Linux-системы.
Установка начинается просто:
sudo apt install filebeat -yПосле установки Filebeat готов к работе, но нужно сказать ему, откуда забирать логи и куда их отправлять. Всё это настраивается в одном файле:
sudo nano /etc/filebeat/filebeat.ymlВ разделе filebeat.inputs: указываем, какие логи интересуют. Например, системные события и логи веб-сервера Nginx:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/syslog
- type: log
enabled: true
paths:
- /var/log/nginx/*.logДалее настраиваем, куда эти события пойдут. В нашем случае в Logstash, на порт 5044:
output.logstash:
hosts: ["localhost:5044"]В этом же файле стоит отключить другие блоки output, особенно output.elasticsearch, чтобы не было конфликтов при запуске. Filebeat не должен пытаться отправлять данные в два места одновременно.
Перед стартом убедимся, что всё работает корректно:
sudo filebeat test outputЕсли Filebeat успешно достучался до Logstash, запускаем агент:
sudo systemctl start filebeat
sudo systemctl enable filebeatТеперь он начнёт отслеживать заданные лог-файлы и отправлять строки дальше, в Logstash, а тот уже передаст их в Elasticsearch. Вся система замыкается, и логика начинает работать.
Если вы в будущем захотите расширить сбор, например, добавить логи от приложений на Python, PHP или Node.js, просто допишите пути в filebeat.inputs.
Проверка: как убедиться, что логи доходят до Kibana
После настройки всех компонентов важно проверить, что данные действительно проходят через Filebeat и Logstash, попадают в Elasticsearch и отображаются в Kibana. Иначе всё это — просто красивая схема без смысла.
Для начала отправим в систему тестовое сообщение. Оно попадёт в системный лог, а оттуда по всей цепочке:
logger "ELK проверка: test message"Эта команда добавит строку в файл /var/log/syslog, который мы уже указали в настройках Filebeat. Если всё работает, через пару секунд эта запись должна появиться в интерфейсе Kibana.
Откройте браузер и перейдите по адресу http://:5601.
Теперь подключаем шаблон индекса, чтобы Kibana понимала, какие данные искать:
- Перейдите в Stack Management → Index Patterns.
- Нажмите Create index pattern.
- Введите logstash-* или filebeat-* — в зависимости от того, через какой путь идут логи.
- Выберите поле времени — обычно это @timestamp.
- Завершите создание.
Далее — раздел Discover. В выпадающем списке выбираем созданный шаблон, и если всё настроено правильно, перед глазами появится таблица с логами. Среди них можно найти наше сообщение с текстом ELK проверка.
Также полезно сделать запрос к Nginx или любому другому приложению, это создаст дополнительные записи в логах. Их тоже можно будет отследить в Kibana по дате, IP или уровню логирования.
Если данные не появляются, стоит проверить, на каком этапе цепочка обрывается. Начните с самого начала:
sudo systemctl status elasticsearch logstash filebeatА если Logstash молчит, загляните в журнал:
cat /var/log/logstash/logstash-plain.logЧастые проблемы — неправильные пути к логам, отключённый порт 5044 или блокировка файрволом. Иногда помогает просто перезапустить Filebeat и Logstash, чтобы они подхватили изменения:
sudo systemctl restart filebeat logstashПосле того как логи начали отображаться, считайте, система заработала. Дальше можно настраивать визуализации и строить дашборды, но об этом в следующем разделе.
Настройка базовой визуализации в Kibana
Как только логи начали отображаться в разделе Discover, можно приступить к созданию визуализаций. Это позволяет быстрее находить аномалии и оценивать общее поведение системы.
Откройте раздел Visualize Library и нажмите кнопку создания новой визуализации. В качестве типа выберите столбчатую диаграмму Vertical bar. Источником данных укажите индекс, который вы использовали ранее, например logstash- с подстановкой по дате.
Для оси X выберите временную шкалу по полю timestamp, а по оси Y укажите количество событий. Так получится график частоты логов по времени. Чтобы сделать визуализацию более информативной, добавьте группировку по полю уровня логирования или названию службы, если такие данные присутствуют в записях.
Созданную диаграмму сохраните и добавьте на дашборд. Это интерфейс, в котором можно собрать несколько виджетов, отображающих разные аспекты логов, например, общее количество ошибок, нагрузку по времени или активность конкретного приложения. Даже один простой дашборд помогает лучше ориентироваться в событиях и быстрее находить причину проблем.
Ограничение доступа к интерфейсу Kibana
По умолчанию веб-интерфейс Kibana открыт для всех, кто знает IP-адрес и порт 5601. Чтобы ограничить доступ, рекомендуется фильтрация по IP. Если используется Nginx, добавьте правило, разрешающее соединения только с нужных адресов:
location / {
proxy_pass http://localhost:5601;
allow 203.0.113.10;
deny all;
}Если прокси нет, настройте файрвол, например, через UFW:
sudo ufw allow from 203.0.113.10 to any port 5601
sudo ufw deny 5601Также можно подключать Kibana только через VPN. Это надёжно и исключает доступ извне. Начиная с версии 8, Elasticsearch включает базовую аутентификацию. Включив её, можно защитить интерфейс логином и паролем. Закрытие доступа — обязательная мера, особенно если в логах содержатся системные или пользовательские данные.
Заключение
ELK Stack превращает разрозненные логи с сервера в единый информационный поток, удобный для анализа и мониторинга. Благодаря визуальному интерфейсу Kibana и настройки сборщиков логов можно быстро находить ошибки, отслеживать поведение систем и предотвращать сбои до того, как они станут проблемой.
При необходимости стек легко масштабируется: добавляются новые источники логов, фильтры, узлы и дашборды. ELK Stack — надёжная основа для мониторинга в проектах любого масштаба.

