Установка и настройка Logstash на Ubuntu 18.04
TL;DR
Этот гайд показывает, как установить и настроить Logstash на Ubuntu 18.04. Включает установку Java и Elasticsearch, конфигурацию input/filter/output и проверку работы.
Введение
Logstash — бесплатный и открытый инструмент для сбора, парсинга и хранения логов. Это одна из самых популярных платформ для анализа логов. Logstash имеет богатый набор плагинов и выразительный язык шаблонов, что упрощает преобразование потоков данных. Logstash часто используется в составе ELK-стека, но может работать автономно. С помощью input-плагинов Logstash может получать данные из любых источников, применять фильтры и отправлять результаты в разные хранилища через output-плагины.
Важно: в этом руководстве рассматривается установка на Ubuntu 18.04 и предполагается, что у вас есть права root или sudo.
Основные варианты использования
Primary intent: установка Logstash на Ubuntu 18.04 Related variants: конфигурация Logstash, интеграция с Elasticsearch, настройка beats, тестирование и отладка Logstash, отправка логов в Elasticsearch
Пререквизиты
- Сервер с Ubuntu 18.04.
- Настроен пароль root или учётная запись с sudo.
- Доступ к интернету для загрузки пакетов.
Быстрый план действий
- Обновить систему.
- Установить Java (OpenJDK 8 или 11).
- Добавить репозиторий Elastic и установить Elasticsearch и Logstash.
- Создать конфигурации input, filter и output для Logstash.
- Запустить и протестировать сервис.
Начало работы
Перед началом обновите систему до последних пакетов:
apt-get update -y
apt-get upgrade -yПерезагрузите систему, чтобы применить обновления.
Установка Java
Logstash требует Java 8 или Java 11. Установим OpenJDK 8:
apt-get install openjdk-8-jdk -yПроверьте версию Java:
java -versionОжидаемый вывод (пример):
openjdk version "1.8.0_162"
OpenJDK Runtime Environment (build 1.8.0_162-8u162-b12-1-b12)
OpenJDK 64-Bit Server VM (build 25.162-b12, mixed mode)
Примечание: при желании можно установить OpenJDK 11 вместо 8 — Logstash поддерживает оба варианта.
Установка Logstash и Elasticsearch
По умолчанию Elasticsearch отсутствует в стандартных репозиториях Ubuntu 18.04, поэтому добавим репозиторий Elastic.
Установите требуемый пакет для подключения по HTTPS:
apt-get install apt-transport-https -yДобавьте GPG-ключ Elastic:
wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | apt-key add -Добавьте репозиторий:
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-7.x.listУстановите Elasticsearch и Logstash:
apt-get install elasticsearch logstash -yЗапустите и включите автозапуск сервисов:
systemctl start logstash
systemctl enable logstash
systemctl start elasticsearch
systemctl enable elasticsearchПроверка статуса Logstash:
systemctl status logstashОжидаемый фрагмент вывода (пример):
? logstash.service - logstash
Loaded: loaded (/etc/systemd/system/logstash.service; disabled; vendor preset: enabled)
Active: active (running) since Wed 2019-11-20 10:13:22 UTC; 5s ago
Main PID: 3790 (java)
Tasks: 13 (limit: 1110)
CGroup: /system.slice/logstash.service
??3790 /usr/bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly
Nov 20 10:13:22 ubuntu systemd[1]: Started logstash.
Elasticsearch по умолчанию слушает порт 9200. Проверить можно так:
netstat -ant | grep 9200Пример вывода:
tcp6 0 0 127.0.0.1:9200 :::* LISTEN
tcp6 0 0 ::1:9200 :::* LISTEN
Важно: если вы планируете доступ к Elasticsearch извне, откорректируйте настройки network.host в /etc/elasticsearch/elasticsearch.yml и примените безопасные настройки аутентификации.
Конфигурация Logstash
Конфигурация Logstash разделена на три секции: input, filter и output. Каждая секция решает свою задачу и использует соответствующие плагины.
Настройка input
Создайте файл для приёма данных от Beats на TCP-порту 5044:
nano /etc/logstash/conf.d/beats-input.confДобавьте:
input {
beats {
port => 5044
}
}
Сохраните и закройте файл.
Настройка filter
Пример: собираем события SSH-аутентификации с Ubuntu через beats. Создайте файл фильтра:
nano /etc/logstash/conf.d/ssh-auth-filter.confДобавьте:
filter {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:timestamp}\s+%{IPORHOST:dst_host}\s+%{WORD:syslog_program}\[\d+\]:\s+(?\w+\s+password)\s+for\s+%{USER:auth_user}\s+from\s+%{SYSLOGHOST:src_host}.*" }
add_field => { "activity" => "SSH Logins" }
add_tag => "linux_auth"
}
}
Сохраните и закройте файл.
Примечание: шаблоны grok чувствительны к формату логов. При необходимости адаптируйте выражение под ваши сообщения.
Настройка output
Создайте выходной конфиг, чтобы отправлять данные в Elasticsearch на localhost:
nano /etc/logstash/conf.d/elasticsearch-output.confДобавьте:
output {
elasticsearch {
hosts => ["localhost:9200"]
manage_template => false
index => "ssh_auth-%{+YYYY.MM}"
}
stdout { codec => rubydebug }
}
Сохраните файл и перезапустите Logstash, чтобы применить изменения:
systemctl restart logstashТестирование Logstash
Проверка конфигурации Logstash:
sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -tОжидаемый вывод (пример):
Sending Logstash logs to /var/log/logstash which is now configured via log4j2.properties
[2019-11-26T06:27:48,104][INFO ][logstash.setting.writabledirectory] Creating directory {:setting=>"path.queue", :path=>"/var/lib/logstash/queue"}
[2019-11-26T06:27:48,119][INFO ][logstash.setting.writabledirectory] Creating directory {:setting=>"path.dead_letter_queue", :path=>"/var/lib/logstash/dead_letter_queue"}
[2019-11-26T06:27:50,331][INFO ][org.reflections.Reflections] Reflections took 47 ms to scan 1 urls, producing 20 keys and 40 values
Configuration OK
[2019-11-26T06:27:51,899][INFO ][logstash.runner ] Using config.test_and_exit mode. Config Validation Result: OK. Exiting Logstash
Если валидация прошла успешно, можно отправлять тестовые события на порт 5044 с помощью beats или tcp-клиента.
Отладка и типичные проблемы
- Сервис не запускается: проверьте /var/log/logstash/logstash-plain.log и systemctl status для диагностического вывода.
- Grok не совпадает: включите stdout { codec => rubydebug } и отправьте пример строки лога, чтобы отладить шаблон.
- Elasticsearch недоступен: проверьте, что Elasticsearch работает и слушает 127.0.0.1:9200, а файервол не блокирует порт.
- Нехватка памяти JVM: при большом потоке логов увеличьте Xms/Xmx в /etc/logstash/jvm.options.
Важно: после изменений конфигов всегда проверяйте конфигурацию через режим тестирования и перезапускайте сервис аккуратно.
Критерии приёмки
- Logstash успешно запускается без ошибок в логах.
- Конфигурация проходит проверку: Config Validation Result: OK.
- События из Beats доходят до Logstash и индексируются в Elasticsearch (проверяется через запрос к индексу ssh_auth-YYYY.MM).
- При включённом stdout видно ожидаемую структуру события.
Чеклист ролей (Sysadmin / DevOps)
- Sysadmin:
- Обновить систему и установить OpenJDK.
- Убедиться в доступности портов и настройках файервола.
- DevOps:
- Сконфигурировать grok-фильтры и индексы.
- Настроить шаблоны индексов и политики ILM для Elasticsearch.
Когда этот подход не подойдёт
- Если ваши логи требуют очень строгой схемы и низкой задержки, рассмотрите специализированные решения обработки событий в реальном времени.
- Для больших кластеров Elasticsearch и высоких нагрузок потребуется отдельное планирование ресурсов и отказоустойчивости.
Краткая методология внедрения
- Разверните PoC на одном сервере: Elasticsearch + Logstash.
- Настройте парсеры и проверьте соответствие ожидаемым данным.
- Настройте хранение индексов и политики управления жизненным циклом.
- Перенесите в продакшен с мониторингом использования ресурсов.
Резюме
Вы установили Logstash и Elasticsearch на Ubuntu 18.04, настроили input для beats, пример фильтра для SSH-аутентификации и output в Elasticsearch. Вы узнали команды для проверки статуса и тестирования конфигурации. Дальше рекомендуется адаптировать grok-шаблоны под свои форматы логов и настроить политику хранения индексов в Elasticsearch.
Важно: всегда тестируйте конфигурации в среде разработки перед развёртыванием в production.
Если нужно, могу подготовить готовые шаблоны grok для других типов логов (nginx, systemd, auth) или помочь с настройкой Filebeat/Metricbeat.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента