Показаны различия между двумя версиями страницы.
— |
отправка_логов_через_logstash [2025/09/13 21:42] (текущий) kirill создано |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | # Доставка логов в OpenSearch через Logstash (Rocky Linux 8) | ||
+ | Эта инструкция показывает, | ||
+ | Подходит для стенда из нашей переписки: | ||
+ | |||
+ | > Все команды выполняются от `root` (или добавляйте `sudo`). | ||
+ | > Для простоты используем самоподписанные сертификаты на тесте и суточные индексы `logstash-YYYY.MM.DD`. | ||
+ | |||
+ | --- | ||
+ | |||
+ | ## 0) Что откроем в файрволе | ||
+ | |||
+ | На узле с Logstash откройте порт **5044/ | ||
+ | ```bash | ||
+ | firewall-cmd --add-port=5044/ | ||
+ | firewall-cmd --reload | ||
+ | ``` | ||
+ | |||
+ | --- | ||
+ | |||
+ | ## 1) Подготовка OpenSearch: роль и пользователь для Logstash | ||
+ | |||
+ | Создайте роль с правами записи только в индексы `logstash-*`, | ||
+ | |||
+ | ```bash | ||
+ | # Роль | ||
+ | curl -k -u admin:'< | ||
+ | " | ||
+ | -H ' | ||
+ | " | ||
+ | { " | ||
+ | ] | ||
+ | }' | ||
+ | |||
+ | # Пользователь | ||
+ | curl -k -u admin:'< | ||
+ | " | ||
+ | -H ' | ||
+ | " | ||
+ | " | ||
+ | }' | ||
+ | |||
+ | # Привязка роли к пользователю | ||
+ | curl -k -u admin:'< | ||
+ | " | ||
+ | -H ' | ||
+ | " | ||
+ | }' | ||
+ | ``` | ||
+ | |||
+ | > На тесте можно использовать `admin`, но для прод-среды всегда создавайте отдельного пользователя с минимальными правами. | ||
+ | |||
+ | --- | ||
+ | |||
+ | ## 2) Установка Logstash (Rocky/Alma 8) | ||
+ | |||
+ | Добавьте репозиторий Elastic и установите пакет `logstash`: | ||
+ | ```bash | ||
+ | rpm --import https:// | ||
+ | cat >/ | ||
+ | [elastic-8.x] | ||
+ | name=Elastic 8.x | ||
+ | baseurl=https:// | ||
+ | gpgcheck=1 | ||
+ | gpgkey=https:// | ||
+ | enabled=1 | ||
+ | autorefresh=1 | ||
+ | type=rpm-md | ||
+ | REPO | ||
+ | |||
+ | dnf clean all | ||
+ | dnf -y install logstash | ||
+ | ``` | ||
+ | |||
+ | ### 2.1 Плагин вывода в OpenSearch | ||
+ | |||
+ | Рекомендуется установить официальный плагин вывода **logstash-output-opensearch**: | ||
+ | ```bash | ||
+ | / | ||
+ | ``` | ||
+ | |||
+ | > Можно использовать и стандартный `elasticsearch`-output, | ||
+ | |||
+ | --- | ||
+ | |||
+ | ## 3) Базовая конфигурация Logstash | ||
+ | |||
+ | По умолчанию сервис Logstash читает конфиги из `/ | ||
+ | |||
+ | ### 3.1 Вход от Beats (Filebeat) — `10-input-beats.conf` | ||
+ | |||
+ | ```conf | ||
+ | input { | ||
+ | beats { | ||
+ | port => 5044 | ||
+ | # При необходимости TLS на входе (для прод-среды): | ||
+ | # ssl => true | ||
+ | # ssl_certificate => "/ | ||
+ | # ssl_key => "/ | ||
+ | } | ||
+ | } | ||
+ | ``` | ||
+ | |||
+ | ### 3.2 (Опционально) Фильтры — `20-filter.conf` | ||
+ | |||
+ | Добавьте полезные теги/ | ||
+ | |||
+ | ```conf | ||
+ | filter { | ||
+ | if [fileset][module] == " | ||
+ | mutate { | ||
+ | add_tag => [" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | if [message] =~ / | ||
+ | mutate { add_tag => [" | ||
+ | } | ||
+ | |||
+ | # Пример grok для Nginx (если шлёте логи nginx через file input): | ||
+ | # grok { | ||
+ | # match => { " | ||
+ | # } | ||
+ | } | ||
+ | ``` | ||
+ | |||
+ | ### 3.3 Выход в OpenSearch — `30-output-opensearch.conf` | ||
+ | |||
+ | Вариант для **самоподписанного** TLS на OpenSearch (тестовый стенд): | ||
+ | |||
+ | ```conf | ||
+ | output { | ||
+ | opensearch { | ||
+ | hosts => [" | ||
+ | user => " | ||
+ | password => "< | ||
+ | index => " | ||
+ | ssl => true | ||
+ | ssl_certificate_verification => false | ||
+ | # Не ставим шаблоны от Logstash в OpenSearch | ||
+ | manage_template => false | ||
+ | # Дополнительно | ||
+ | http_compression => true | ||
+ | } | ||
+ | # Для отладки — вывод в stdout в формате JSON (временно) | ||
+ | # stdout { codec => rubydebug } | ||
+ | } | ||
+ | ``` | ||
+ | |||
+ | > В прод-среде **включайте проверку TLS** и указывайте свой CA: | ||
+ | > ```conf | ||
+ | > ssl_certificate_verification => true | ||
+ | > cacert => "/ | ||
+ | > ``` | ||
+ | |||
+ | Сохраните файлы и проверьте конфигурацию: | ||
+ | ```bash | ||
+ | / | ||
+ | ``` | ||
+ | |||
+ | Если `Config Validation Result: OK`, включайте автозапуск и стартуйте: | ||
+ | ```bash | ||
+ | systemctl enable --now logstash | ||
+ | systemctl status logstash --no-pager | ||
+ | journalctl -u logstash -n 200 --no-pager | ||
+ | ``` | ||
+ | |||
+ | --- | ||
+ | |||
+ | ## 4) Настройка отправителя (пример с Filebeat) | ||
+ | |||
+ | Если раньше Filebeat слал напрямую в OpenSearch, переключите его на Logstash. В `/ | ||
+ | |||
+ | ```yaml | ||
+ | # output.elasticsearch: | ||
+ | |||
+ | output.logstash: | ||
+ | hosts: ["< | ||
+ | # Для TLS на входе Logstash включите: | ||
+ | # ssl.certificate_authorities: | ||
+ | # ssl.verification_mode: | ||
+ | ``` | ||
+ | |||
+ | Проверка и запуск: | ||
+ | ```bash | ||
+ | filebeat test config -e | ||
+ | filebeat test output -e | ||
+ | systemctl restart filebeat | ||
+ | journalctl -u filebeat -n 100 --no-pager | ||
+ | ``` | ||
+ | |||
+ | Сгенерируйте тестовую запись и проверьте индекс: | ||
+ | ```bash | ||
+ | logger -t fbtest "hello from filebeat via logstash" | ||
+ | |||
+ | curl -k -u admin:'< | ||
+ | " | ||
+ | ``` | ||
+ | |||
+ | --- | ||
+ | |||
+ | ## 5) Настройка Data View в OpenSearch Dashboards | ||
+ | |||
+ | 1. Откройте **Dashboards → Management → Data Views (Index Patterns)**. | ||
+ | 2. Создайте Data View с шаблоном: | ||
+ | 3. Поле времени: | ||
+ | 4. Проверьте логи в **Discover**. | ||
+ | |||
+ | --- | ||
+ | |||
+ | ## 6) Частые проблемы и решения | ||
+ | |||
+ | ### 6.1 Logstash не может подключиться к OpenSearch (SSL) | ||
+ | **Симптом: | ||
+ | - На тесте временно используйте `ssl_certificate_verification => false`. | ||
+ | - В прод-среде укажите `cacert => "/ | ||
+ | - Проверьте, | ||
+ | |||
+ | ### 6.2 Filebeat не может подключиться к Logstash | ||
+ | **Симптом: | ||
+ | - Проверьте, | ||
+ | - Если включили TLS на входе beats — укажите CA на стороне Filebeat (`ssl.certificate_authorities`). | ||
+ | |||
+ | ### 6.3 Индексы `yellow` на одноузловом кластере | ||
+ | - Для стенда обнулите реплики по умолчанию для шаблона `logstash-*`: | ||
+ | ```bash | ||
+ | curl -k -u admin:'< | ||
+ | -H ' | ||
+ | " | ||
+ | " | ||
+ | }' | ||
+ | ``` | ||
+ | |||
+ | ### 6.4 Производительность Logstash | ||
+ | - Включите сжатие HTTP (`http_compression => true`), настроьте JVM heap Logstash в `/ | ||
+ | - Разделяйте пайплайны (через `/ | ||
+ | - Не злоупотребляйте тяжелыми grok' | ||
+ | |||
+ | --- | ||
+ | |||
+ | ## 7) К прод-среде (кратко) | ||
+ | |||
+ | - **TLS повсюду: | ||
+ | - **Учётные записи/ | ||
+ | - **Индексы/ | ||
+ | - **Мониторинг: | ||
+ | - **Масштабирование: | ||
+ | |||
+ | --- | ||
+ | |||
+ | **Готово.** Теперь Logstash принимает логи (например, |