Как развернуть ELK Stack на сервере для сбора логов

Как развернуть ELK Stack на сервере для сбора логов

Хотите видеть, что творится в системе, не открывая по 10 терминалов? Показали, как собрать логи в одном месте и превратить их в понятные графики.

Когда в системе всего один сервис, с логами проблем нет. Но как только появляется больше компонентов, каждый пишет что-то своё и куда-то в своё место. Как результат — полная неразбериха: логи разбросаны по файлам, всё в разном формате, а нужную строчку приходится искать вручную. Чтобы навести порядок в этом хаосе и понять, что происходит в системе, удобно использовать стек ELK — особенно если вы управляете VPS с несколькими сервисами.

В статье рассказали, как настроить централизованный сбор логов с помощью Elasticsearch, Logstash и Kibana. Разобрали установку на сервер с Ubuntu 22.04 LTS, подключение агентов и просмотр логов через веб-интерфейс.

Аренда VPS/VDS от 219 руб/месяц

Преимущества VPS в AdminVPS:

✓ Бесплатное администрирование

✓ Только быстрые NVMe-диски

✓ Защита от DDoS-атак

✓ Быстрая техподдержка

Аренда VPS/VDS виртуального сервера от AdminVPS — это прозрачная и честная услуга с доступной ценой

Что такое ELK Stack и зачем он нужен

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 понимала, какие данные искать:

  1. Перейдите в Stack Management → Index Patterns.
  2. Нажмите Create index pattern.
  3. Введите logstash-* или filebeat-* — в зависимости от того, через какой путь идут логи.
  4. Выберите поле времени — обычно это @timestamp.
  5. Завершите создание.

Далее — раздел 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 — надёжная основа для мониторинга в проектах любого масштаба.

Читайте в блоге:

Loading spinner
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

VPN на VPS-сервере

Узнайте, как создать собственный VPN на VPS-сервере для защиты ваших конфиденциальных данных!

Что будем искать? Например,VPS-сервер

Мы в социальных сетях