Конфигурирование Logstash на Droplet для пересылки журналов Nginx в управляемый OpenSearch

Введение

Содержание веб-серверных логов является необходимым для гладкого func-titionрования вашего сайта, решения проблем и понимания поведения пользователей. Если вы используете Nginx, он генерирует логи доступа и ошибок, насыщенные ценными сведениями. Чтобы управлять и анализировать эти логи, вы можете использовать Logstash для обработки и пересылки их, а также Managed OpenSearch от DigitalOcean для индексации и визуализации данных.

В этом руководстве мы пойдем с вами по пути установки Logstash на Droplet, настроим его для сбора логов Nginx и отправки их в Managed OpenSearch DigitalOcean.

Предварительные требования

Применение

Вы можете использовать эту конфигурацию, если вам нужно:

  • Мониторинг и устранение проблем: Отслеживание показателей производительности и ошибок веб-сервера путем анализа реального времени логов.
  • Анализ производительности: получение Insights о поведении трафика в интернете и метриках сервера.
  • Централизованное ведение логов: агрегирование логов с нескольких серверов Nginx в единый экземпляр OpenSearch для более удобного управления.

Примечание: срок установки должен составлять около 30 минут.

Шаг 1 – установка Logstash на Droplet

Логсташ может быть установлен с помощью бинарных файлов, доступных здесь или репозиториев пакетов, настроенных для вашей операционной системы. Для упрощения управления и обновлений обычно рекомендуется использовать репозитории пакетов. Вы можете использовать менеджер пакетов APT на Debian-основаных системах, таких как Ubuntu, в то время как на Red Hat-основаных системах, таких как CentOS или RHEL, можете использовать yum. оба метода обеспечивают правильную интеграцию Logstash в инфраструктуру управления пакетами вашей системы, упрощая установку и обслуживание.

В этом разделе мы проведем вас через установку Logstash с использованием обоих менеджеров пакетов apt и yum, чтобы убедиться, что вы можете настроить Logstash на вашем Droplet независимо от вашей дистрибутива Linux.

Чтобы найти ОС, запустите следующую команду:

cat /etc/os-release

Для систем на основе APT (Ubuntu/Debian)

1. Закачайте и установите Public Signing Key:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic-keyring.gpg

2. Если apt-transport-https еще не установлен, установите его:

sudo apt-get install apt-transport-https

3. Добавьте и сохраните определение репозитория Logstash в вашу список источников apt:

echo "deb [signed-by=/usr/share/keyrings/elastic-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list

Примечание: Убедитесь, что вы не используете команды add-apt-repository, так как они могут добавить запись deb-src, которая не поддерживается. Если вы встретите ошибку, связанную с записью deb-src, удалите ее из файла /etc/apt/sources.list. Если вы добавили запись deb-src, у вас появится ошибка, похожая на следующую:

Unable to find expected entry 'main/source/Sources' in Release file (Wrong sources.list entry or malformed file)

Если вы просто удалите запись deb-src из файла /etc/apt/sources.list, установка应该正常工作进行。

4. Обновите индекс пакетов, чтобы включить новый репозитарий:

sudo apt-get update

5. Установите Logstash с использованием менеджера пакетов apt:

sudo apt-get install logstash

6. Запустите Logstash и настройте его, чтобы автоматически запускаться при загрузке системы:

sudo systemctl start logstash
sudo systemctl enable logstash

Теперь Logstash установлен и запущен на вашей системе.

Для Систем на базе YUM (CentOS/RHEL)

1. Загрузите и установите общедоступный ключ подписи для репозитария Logstash:

sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

2. Создайте файл репозитария Logstash в каталоге /etc/yum.repos.d/. Например, создайте файл с именем logstash.repo. Вы можете скопировать и вставить ниже содержимое, чтобы создать файл и обновить его содержимое:

sudo tee /etc/yum.repos.d/logstash.repo > /dev/null <<EOF
[logstash-8.x]
name=Elastic repository for 8.x packages
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
EOF

Репозитарий готов для использования.

3. Установите Logstash с использованием менеджера пакетов YUM:

sudo yum install logstash

4. Запустите Logstash и настройте его, чтобы автоматически запускаться при загрузке системы:

sudo systemctl start logstash
sudo systemctl enable logstash

Logstash уже установлен и запущен на вашем системе.

Шаг 2 – Установка модуля вывода Open Search

Вы можете установить модуль вывода OpenSearch, выполнив следующий приказ:

/usr/share/logstash/bin/logstash-plugin install logstash-output-opensearch

Дополнительную информацию о модуле вы можете найти на этом репозитории модуля logstash-output-opensearch.

Шаг 3 – Конфигурация Logstash для отправки журналов Nginx в OpenSearch

Путь Logstash состоит из трех основных стадий: вход, фильтрация и выход. Пути Logstash используют плагины. Вы можете использовать плагины сообщества или создавать свои собственные.

  • Вход: Эта стадия собирает данные с различных источников. Logstash поддерживает множество входных плагинов для работы с источниками данных, такими как логические файлы, базы данных, очередь сообщений и облачные услуги.
  • Фильтрация: Эта стадия обрабатывает и трансформирует данные, собранные на стадии входа. Фильтры могут изменять, дополнять и структурировать данные, чтобы сделать их более полезными и удобными для анализа.
  • Вывод: Эта стадия отправляет обработанные данные в целевую точку. Целевые точки могут включать базы данных, файлы и хранения данных, такие как OpenSearch.

Теперь создадим поток.

1.Создайте файл настройки Logstash в /etc/logstash/conf.d/nginx-to-opensearch.conf следующим содержимым:

input {
  file {
    path => "/var/log/nginx/access.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => ["nginx_access"]
  }
  file {
    path => "/var/log/nginx/error.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => ["nginx_error"]
  }
}
filter {
  if "nginx_access" in [tags] {
    grok {
      match => { "message" => "%{IPORHOST:client_ip} - %{USER:ident} \[%{HTTPDATE:timestamp}\] \"%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:http_version}\" %{NUMBER:response} %{NUMBER:bytes} \"%{DATA:referrer}\" \"%{DATA:user_agent}\"" }
    }
    mutate {
      remove_field => ["message", "[log][file][path]", "[event][original]"]
    }
  } else if "nginx_error" in [tags] {
    grok {
      match => { "message" => "\[%{TIMESTAMP_ISO8601:timestamp}\] \[%{LOGLEVEL:level}\] \[%{DATA:pid}\] \[%{DATA:tid}\] %{GREEDYDATA:error_message}" }
    }
    mutate {
      remove_field => ["message", "[log][file][path]", "[event][original]"]
    }
  }
}
output {
  if "nginx_access" in [tags] {
    opensearch {
      hosts => ["https://<OpenSearch-Hostname>:25060"]
      user => "doadmin"
      password => "<your_password>"
      index => "nginx_access-%{+YYYY.MM.dd}"
      ssl => true
      ssl_certificate_verification => true
    }
  } else if "nginx_error" in [tags] {
    opensearch {
      hosts => ["https://<OpenSearch-Hostname>:25060"]
      user => "doadmin"
      password => "<your_password>"
      index => "nginx_error-%{+YYYY.MM.dd}"
      ssl => true
      ssl_certificate_verification => true
    }
  }
}

Замените:

  • OpenSearch-Hostname на имя хоста вашего сервера OpenSearch.
  • <your_password> на ваш пароль OpenSearch.

2.Примените новые настройки, перезапустив Logstash:

sudo systemctl restart logstash

3.Проверьте логи Logstash, чтобы убедиться, что данные корректно обрабатываются и пересылаются:

sudo tail -f /var/log/logstash/logstash-plain.log

Разбор настройки nginx-to-opensearch.conf

ВВОД

Блок input настраивает два входных потока для чтения журналов:

Журналы Nginx:
Пути:
/var/log/nginx/access.log (для журналов доступа)
/var/log/nginx/error.log (для журналов ошибок)
Положение начала: beginning – Чтение начинается с начала файлов журналов.
Путь к sincedb: /dev/null – Отключает трекинги для непрерывного чтения.
Теги:
["nginx_access"] для журналов доступа
["nginx_error"] для журналов ошибок

Примечание: Убедитесь, что служба Logstash имеет доступ к входным путям.

ФИルЬТР

Блок filter обрабатывает логи на основе их метки:

Обработка логов:
Логи доступа:
Использует фильтр grok, чтобы распарсить формат логов доступа, извлекая поля, такие как client_ip, timestamp, method, request, http_version, response, bytes, referrer и user_agent.
Удаляет исходное поле message и certain metadata поля.

Логи ошибок:
Проверяет наличие метки nginx_error и применяет фильтр grok, чтобы извлечь поля, такие как timestamp, level, pid, tid и error_message.
Также удаляет поля message и metadata поля.

ВЫВОД

Блок output направляет события в OpenSearch на основе их метки:

Распределение в OpenSearch:
Для логов доступа и ошибок определяет:
ホスト: URL OpenSearch экземпляра.
Пользователь: doadmin для аутентификации.
Пароль: Ваш пароль OpenSearch.
Индекс:
nginx_access-%{+YYYY.MM.dd} для логов доступа
nginx_error-%{+YYYY.MM.dd} для логов ошибок
Настройки SSL: Enables SSL и проверку сертификата.

Шаг 4 – Настроить OpenSearch

1.Откройте веб-браузер и перейдите на URL панели управления OpenSearch:

https://<OpenSearch-Hostname>

Замените OpenSearch-Hostname на имя хоста вашего сервера OpenSearch.

2.Создайте шаблон индекса.
a. Слева на панели меню перейдите к разделу Управление > Панель управления > Шаблоны индексов.
b.クリック Создать шаблон индекса в правом верхнем углу.
c. Введите nginx_access-* или nginx_error-* как шаблон индекса для соответствия всем индексам, созданным Logstash, и нажмите кнопку Далее.
d. Click Создать шаблон индекса.

3. Убедитесь, что шаблон индекса успешно создан и доступен в списке шаблонов индексов.

4. Слева на панели меню перейдите к разделу Exploration (Исследование) и выберите созданный вами индекс (nginx_access-* или nginx_error-*). Проверьте, что записи журнала видны и корректно индексированы.

5. СоздайтеVisualizations (Визуализации) и Dashboards (Дашборды). Подробности создания дашборда смотрите в разделе Как создавать дашборд в OpenSearch.

Расчеты

Проверка соединения

Вы можете проверить, может ли Logstash подключиться к OpenSearch, продемонстрировав соединение:

curl -u doadmin:your_password -X GET "https://<OpenSearch-Hostname>:25060/_cat/indices?v"

Замените:

  • OpenSearch-Hostname на имя хоста вашего сервера OpenSearch.
  • <your_password> на ваш пароль OpenSearch.

Приём данных

Вы можете убедиться, что данные правильно идентифицированы в OpenSearch, используя следующий командный ряд curl:

curl -u doadmin:your_password -X GET "http://<OpenSearch-Hostname>:25060/nginx-logs-*/_search?pretty"

Замените:

  • OpenSearch-Hostname на имя хоста вашего сервера OpenSearch.
  • <your_password> на ваш пароль OpenSearch

Фирменная поддержка брандмауэра и сетевых настроек

Убедитесь, что правила брандмауэра и сетевые настройки позволяют трафик между Logstash и OpenSearch через порт 25060.

Заключение

В этом руководстве вы научились настраивать Logstash, чтобы собирать и пересылать логи Nginx в OpenSearch.

Вы просмотрели, как использовать менеджеры пакетов apt или yum, в зависимости от вашей дистрибутива Linux, чтобы запустить Logstash на вашем Drople. Также вы создали и настроили файл конфигурации Logstash, чтобы убедиться, что логи Nginx правильно обрабатываются и отправляются в OpenSearch. Затем вы настроили шаблон индекса в Dashboards OpenSearch, чтобы проверить, идеально ли логи индексируются и доступны для анализа.После выполнения этих шагов у вас должна быть работающая конфигурация, в которой Logstash собирает логи Nginx и отправляет их в OpenSearch. Эта конфигурация позволяет вам использовать мощные инструменты поиска и визуализации OpenSearch для анализа ваших серверных логов.

Если у вас возникли какие-либо проблемы, посмотрите на советы по debugging, которые мы предоставили, и обратитесь к документации Logstash и документации OpenSearch для дополнительной помощи.Regular monitoring will keep your logging system running smoothly and effectively.

Source:
https://www.digitalocean.com/community/tutorials/forward-nginx-logs-to-opensearch-using-logstash