Инструменты пользователя

Инструменты сайта


отправка_логов_через_logstash

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

отправка_логов_через_logstash [2025/09/13 21:42] (текущий)
kirill создано
Строка 1: Строка 1:
 +# Доставка логов в OpenSearch через Logstash (Rocky Linux 8)
  
 +Эта инструкция показывает, как настроить **Logstash** в роли приёмника логов (например, от Filebeat) и отправлять их в ваш кластер **OpenSearch**.  
 +Подходит для стенда из нашей переписки: одноузловой OpenSearch 3.x + Dashboards на Rocky Linux 8.
 +
 +> Все команды выполняются от `root` (или добавляйте `sudo`).  
 +> Для простоты используем самоподписанные сертификаты на тесте и суточные индексы `logstash-YYYY.MM.DD`.
 +
 +---
 +
 +## 0) Что откроем в файрволе
 +
 +На узле с Logstash откройте порт **5044/tcp** (вход от Beats, например Filebeat):
 +```bash
 +firewall-cmd --add-port=5044/tcp --permanent
 +firewall-cmd --reload
 +```
 +
 +---
 +
 +## 1) Подготовка OpenSearch: роль и пользователь для Logstash
 +
 +Создайте роль с правами записи только в индексы `logstash-*`, пользователя и привязку роли:
 +
 +```bash
 +# Роль
 +curl -k -u admin:'<ADMIN_PASSWORD>' -X PUT \
 +  "https://<IP_OpenSearch>:9200/_plugins/_security/api/roles/logstash_writer" \
 +  -H 'Content-Type: application/json' -d '{
 +  "index_permissions": [
 +    { "index_patterns": ["logstash-*"], "allowed_actions": ["crud","create_index"] }
 +  ]
 +}'
 +
 +# Пользователь
 +curl -k -u admin:'<ADMIN_PASSWORD>' -X PUT \
 +  "https://<IP_OpenSearch>:9200/_plugins/_security/api/user/logstash_ingest" \
 +  -H 'Content-Type: application/json' -d '{
 +  "password": "<STRONG_PASSWORD>",
 +  "attributes": {}
 +}'
 +
 +# Привязка роли к пользователю
 +curl -k -u admin:'<ADMIN_PASSWORD>' -X PUT \
 +  "https://<IP_OpenSearch>:9200/_plugins/_security/api/rolesmapping/logstash_writer" \
 +  -H 'Content-Type: application/json' -d '{
 +  "users": ["logstash_ingest"]
 +}'
 +```
 +
 +> На тесте можно использовать `admin`, но для прод-среды всегда создавайте отдельного пользователя с минимальными правами.
 +
 +---
 +
 +## 2) Установка Logstash (Rocky/Alma 8)
 +
 +Добавьте репозиторий Elastic и установите пакет `logstash`:
 +```bash
 +rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
 +cat >/etc/yum.repos.d/elastic-8.x.repo <<'REPO'
 +[elastic-8.x]
 +name=Elastic 8.x
 +baseurl=https://artifacts.elastic.co/packages/8.x/yum
 +gpgcheck=1
 +gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
 +enabled=1
 +autorefresh=1
 +type=rpm-md
 +REPO
 +
 +dnf clean all
 +dnf -y install logstash
 +```
 +
 +### 2.1 Плагин вывода в OpenSearch
 +
 +Рекомендуется установить официальный плагин вывода **logstash-output-opensearch**:
 +```bash
 +/usr/share/logstash/bin/logstash-plugin install logstash-output-opensearch
 +```
 +
 +> Можно использовать и стандартный `elasticsearch`-output, но с OpenSearch бывают нюансы совместимости. Плагин `opensearch` избавляет от них.
 +
 +---
 +
 +## 3) Базовая конфигурация Logstash
 +
 +По умолчанию сервис Logstash читает конфиги из `/etc/logstash/conf.d/*.conf` (через `path.config`). Создадим три файла: input, фильтры (опционально) и output.
 +
 +### 3.1 Вход от Beats (Filebeat) — `10-input-beats.conf`
 +
 +```conf
 +input {
 +  beats {
 +    port => 5044
 +    # При необходимости TLS на входе (для прод-среды):
 +    # ssl => true
 +    # ssl_certificate => "/etc/logstash/certs/logstash.crt"
 +    # ssl_key => "/etc/logstash/certs/logstash.key"
 +  }
 +}
 +```
 +
 +### 3.2 (Опционально) Фильтры — `20-filter.conf`
 +
 +Добавьте полезные теги/поля, распарсьте строки, нормализуйте уровни и т. п.
 +
 +```conf
 +filter {
 +  if [fileset][module] == "system" and [fileset][name] == "auth" {
 +    mutate {
 +      add_tag => ["auth"]
 +    }
 +  }
 +
 +  if [message] =~ /timeout|timed out|connection reset/i {
 +    mutate { add_tag => ["timeout"] }
 +  }
 +
 +  # Пример grok для Nginx (если шлёте логи nginx через file input):
 +  # grok {
 +  #   match => { "message" => "%{NGINXACCESS}" }
 +  # }
 +}
 +```
 +
 +### 3.3 Выход в OpenSearch — `30-output-opensearch.conf`
 +
 +Вариант для **самоподписанного** TLS на OpenSearch (тестовый стенд):
 +
 +```conf
 +output {
 +  opensearch {
 +    hosts => ["https://<IP_OpenSearch>:9200"]
 +    user  => "logstash_ingest"
 +    password => "<STRONG_PASSWORD>"
 +    index => "logstash-%{+YYYY.MM.dd}"
 +    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 => "/etc/pki/ca-trust/source/anchors/opensearch-ca.crt"
 +> ```
 +
 +Сохраните файлы и проверьте конфигурацию:
 +```bash
 +/usr/share/logstash/bin/logstash --path.settings /etc/logstash -t
 +```
 +
 +Если `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. В `/etc/filebeat/filebeat.yml` замените `output.elasticsearch` на `output.logstash`:
 +
 +```yaml
 +# output.elasticsearch:  # отключить/закомментировать
 +
 +output.logstash:
 +  hosts: ["<LOGSTASH_IP>:5044"]
 +  # Для TLS на входе Logstash включите:
 +  # ssl.certificate_authorities: ["/etc/pki/tls/certs/logstash-ca.crt"]
 +  # ssl.verification_mode: full
 +```
 +
 +Проверка и запуск:
 +```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:'<ADMIN_PASSWORD>' \
 +  "https://<IP_OpenSearch>:9200/logstash-*/_search?q=fbtest&pretty"
 +```
 +
 +---
 +
 +## 5) Настройка Data View в OpenSearch Dashboards
 +
 +1. Откройте **Dashboards → Management → Data Views (Index Patterns)**.  
 +2. Создайте Data View с шаблоном: `logstash-*`.  
 +3. Поле времени: `@timestamp`.  
 +4. Проверьте логи в **Discover**.
 +
 +---
 +
 +## 6) Частые проблемы и решения
 +
 +### 6.1 Logstash не может подключиться к OpenSearch (SSL)
 +**Симптом:** в логе `certificate verify failed` или таймаут.
 +- На тесте временно используйте `ssl_certificate_verification => false`.
 +- В прод-среде укажите `cacert => "/путь/до/вашего/CA.crt"` и оставьте проверку включённой.
 +- Проверьте, что порт 9200 доступен из сети Logstash.
 +
 +### 6.2 Filebeat не может подключиться к Logstash
 +**Симптом:** ошибки рукопожатия TLS или `connect: connection refused`.
 +- Проверьте, что Logstash слушает 0.0.0.0:5044 (и открыт порт в firewalld).
 +- Если включили TLS на входе beats — укажите CA на стороне Filebeat (`ssl.certificate_authorities`).
 +
 +### 6.3 Индексы `yellow` на одноузловом кластере
 +- Для стенда обнулите реплики по умолчанию для шаблона `logstash-*`:
 +  ```bash
 +  curl -k -u admin:'<ADMIN_PASSWORD>' -X PUT https://<IP_OpenSearch>:9200/_index_template/logstash \
 +    -H 'Content-Type: application/json' -d '{
 +    "index_patterns": ["logstash-*"],
 +    "template": { "settings": { "index.number_of_replicas": 0 } }
 +  }'
 +  ```
 +
 +### 6.4 Производительность Logstash
 +- Включите сжатие HTTP (`http_compression => true`), настроьте JVM heap Logstash в `/etc/logstash/jvm.options.d/heap.options` (например, `-Xms1g`/`-Xmx1g`).  
 +- Разделяйте пайплайны (через `/etc/logstash/pipelines.yml`), если конфигурации становятся большими.  
 +- Не злоупотребляйте тяжелыми grok'ами; по возможности используйте модульные парсеры на стороне Beats.
 +
 +---
 +
 +## 7) К прод-среде (кратко)
 +
 +- **TLS повсюду:** вход beats на Logstash, выход Logstash → OpenSearch с `cacert` и проверкой цепочки.  
 +- **Учётные записи/роли:** отдельные пользователи и минимальные права.  
 +- **Индексы/политики:** используйте OpenSearch **ISM** для ротации/архивации `logstash-*`.  
 +- **Мониторинг:** heap Logstash, очереди (persistent queue), watermark дисков кластера, снапшоты.  
 +- **Масштабирование:** несколько инстансов Logstash за балансером, beats с `loadbalance: true`.
 +
 +---
 +
 +**Готово.** Теперь Logstash принимает логи (например, от Filebeat по 5044) и пишет их в OpenSearch в индексы `logstash-*`. Если что-то не взлетело — присылайте хвосты `journalctl -u logstash` и мы быстро разберём.
отправка_логов_через_logstash.txt · Последнее изменение: 2025/09/13 21:42 — kirill

DokuWiki Appliance - Powered by TurnKey Linux