Показаны различия между двумя версиями страницы.
| — |
отправка_логов_через_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 принимает логи (например, | ||