Пересылка логов Apache в OpenSearch через Logstash

Введение

эффективное управление логами веб-сервера является crucial для поддержания performanced вашего сайта, решения проблем и insights поведения пользователей. Apache является одним из наиболее popular web-серверов. Он генерирует логи доступа и ошибок, содержащие ценную информацию. Чтобы эффективно управлять и анализировать эти логи, вы можете использовать Logstash для обработки и forwarding их к Managed OpenSearch для indexing и visualization.

в этой учебной поделе, мы вас guidance через установку Logstash на Droplet, настройка его для collection ваших Apache логов и отправка их к Managed OpenSearch для analysis.

Предупреждения

  1. Droplet/s с установленным Apache Webserver.
  2. Managed OpenSearch Cluster

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

Logstash может быть установлен с использованием бинарных файлов или через репозитории пакетов. Чтобы упростить управление и обновления, обычно рекомендуется использовать репозитории пакетов.

В этом разделе мы вас проведём по установке Logstash на вашем Dropleте с использованием both APT и YUM менеджеров пакетов.

Давайте определим ОС:

cat /etc/os-release

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

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

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

В Debian вам может потребоваться установить пакет apt-transport-https перед продолжением:

sudo apt-get install apt-transport-https

Сохраните определение репозитория в /etc/apt/sources.list.d/elastic-8.x.list:

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

Используйте метод echo описанный выше, чтобы добавить репозиторий Logstash. Не используйте add-apt-repository, так как это добавит запись deb-src, но мы не предоставляем исходный пакет. Если вы добавили запись 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 и установка должна работать как ожидалось.

Выполните sudo apt-get update и репозиторий готов для использования. Вы можете установить его следующим образом:

sudo apt-get update && sudo apt-get install logstash

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

Скачайте и установите общедоступный ключ подписи:

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

Добавьте следующий код в ваш файл /etc/yum.repos.d/logstash.repo. Вы можете использовать команду `tee` для обновления и создания файла.

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

Ваш репозитарий готов для использования. Вы можете установить его с помощью:

sudo yum install logstash

Для дополнительной информации, пожалуйста, обратитесь к руководству Установка Logstash.

Шаг 2 – Configuring Logstash to Send Logs to OpenSearch

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

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

  • Фильтр: Этап обработки и преобразования собранных данных во время этапа ввода. Фильтры могут модифицировать, дополнять и структурировать данные, делая их более полезными и легкими для анализа.

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

Шаг 3 – Установка плагина вывода Open Search

Плагин вывода OpenSearch можно установить, выполнив следующую команду:

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

Больше информации можно найти в этом репозитории logstash-output-opensearch-plugin.

Теперь давайте создадим пайплайн:

/etc/logstash/conf.d/
apache_pipeline.conf
“`ruby
input {
file {
path => “/var/log/apache2/access.log”
start_position => “beginning”
}
}
“`

input {
  file {
    path => "/var/log/apache2/access.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => "apache_access"
  }

  file {
    path => "/var/log/apache2/error.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => "apache_error"
  }
}

filter {
  if "apache_access" in [tags] {
    grok {
        match => { "message" => "%{HTTPD_COMBINEDLOG}" }
    }
    mutate {
        remove_field => [ "message","[log][file][path]","[event][original]" ]
      }
   } else {
   grok {
        match => { "message" => "%{HTTPD24_ERRORLOG}" }
    }
   }
}

output {
  if "apache_access" in [tags] {
  opensearch {
    hosts       => "https://<OpenSearch-Hostname>:25060"
    user        => "doadmin"
    password    => "<your_password>"
    index       => "apache_access"
    ssl_certificate_verification => true
  }

  } else {
  opensearch {
    hosts       => "https://<OpenSearch-Hostname>:25060"
    user        => "doadmin"
    password    => "<your_password>"
    index       => "apache_error"
    ssl_certificate_verification => true
  }
  }
}

  • ИНПУТ: используется для настройки источника событий. Здесь используется плагин `file` для источника.

  • путь => “/var/log/apache2/access.log” : указывает на путь к файлу журнала доступа Apache, который Logstash будет читать.

    Убедитесь, что служба Logstash имеет доступ к исходному пути.

  • позиция_start => “beginning” : определяет, откуда Logstash должен начать чтение файла журнала.VALUE “beginning” указывает, что Logstash должен начать обработку файла с начала, а не с конца.

  • путь_к_файлу_sincedb => “/dev/null”: Указывает путь к файлу sincedb. Файлы sincedb используются Logstash для управления текущим местом в лог-файлах, что позволяет ему продолжать работу сразу после перезапуска или сбоев.

  • тегов => “apache_access”: Присваивает тег событиям, которые считываются с этого входа. Теги удобны для идентификации и фильтрации событий в Logstash, и их часто используют в потоках вывода или фильтрации конфигурации. Мы используем теги в последнем
  • ФИЛЬТР: используется для обработки событий.

    Начиная с условиями:

    (if "apache_access" in [теги]):
    

    Это проверяет, существует ли тэг apache_access в поле [теги] входящих лог-событий. Мы используем это условие, чтобы применить соответствующий FILTER GROK для апач-доступа и ошибочных логов.

  • Грок фильтр (для логов Apache Access):

    grok {
        match => { "message" => "%{HTTPD_COMBINEDLOG}" }
    }
    

    Грок фильтр %{HTTPD_COMBINEDLOG} является предопределенным шаблоном в Logstash, используемым для разбора формата логов доступа Apache combined. Это вытаскивает поля, такие как IP-адрес, время, метод HTTP, URI, код статуса и т.д., из поля сообщения входящих событий.

  • Мутация фильтр Удалить (необязательно): После разбора логов Apache, мы используем мутацию-удалить для удаления определённых полей.

    mutate {
        remove_field => [
            "message",
            "[log][file][path]",
            "[event][original]"
        ]
    }
    
  • Другая условие: блок else выполняется, если тэг apache_access отсутствует в [tags]. Этот блок else содержит еще один фильтр GROK для логов ошибок Apache.

    grok {
        match => { "message" => "%{HTTPD24_ERRORLOG}" }
    }
    

    Этот фильтр GROK %{HTTPD24_ERRORLOG} обрабатывает сообщения, соответствующие формату логов ошибок Apache. Он вытаскивает поля, связанные с логами ошибок, такие как метка времени, уровень логирования, сообщение ошибки и т. д.

    Паттерны GROK можно найти по адресу: https://github.com/logstash-plugins/logstash-patterns-core/tree/main/patterns.

  • ВЫВОД:Plugin выдает события в определенное место назначения.

    Блок ВЫВОДА начинается с условия if. Мы здесь используем условные операторы if

    <код>if "apache_access" in [тегов] {}
    

    Это условие if используется для направления логов в OpenSearch в два различных индекса, apache_error и apache_access.

    Посмотрим на плагин ВЫВОД OpenSearch:

    <код>узлы            => "https://XXX:25060"  Имя хоста вашего Open search
    пользователь         => "doadmin"            Имя пользователя вашего Open search
    пароль             => "XXXXX"              Пароль OpenSearch
    индекс            => "apache_error"       Имя индекса в OpenSearch
    верificация_ SSL_сертификата => true     Включена проверка SSL-сертификата
    

Шаг 4 – Запуск Logstash

После настройки потока, запустите службу Logstash:

systemctl enable logstash.service
systemctl start logstash.service
systemctl status logstash.service

Шаг 5 -Debugging

Проверка подключения

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

curl -u your_username:your_password -X GET "https://your-opensearch-server:25060/_cat/indices?v"

Замените your-opensearch-server на имя хоста вашего сервера OpenSearch и your_username, your_password на ваши учетные данные OpenSearch.

Обработка данных

Убедитесь, что данные корректно индексируются в OpenSearch:

curl -u your_username:your_password -X GET "http://your-opensearch-server:25060/<your-index-name>/_search?pretty"

Замените your-opensearch-server на имя хоста вашего сервера OpenSearch, your_username, your_password на ваши учетные данные OpenSearch. Также замените your-index-name на имя вашего индекса.

Файрвол и Конфигурация сети

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

Логи

Логи для Logstash можно найти в /var/log/logstash/logstash-plain.log

Для получения подробной информации смотрите Решение проблем.

Заключение

В этом руководстве мы прошли через настройку Logstash для сбора и пересылки логов Apache в OpenSearch. Вот краткий обзор того, что мы обсудили:

Установка Logstash: Мы рассмотрели, как использовать менеджеры пакетов APT или YUM, в зависимости от вашего дистрибутива Linux, для установки Logstash на ваш Droplet.

Конфигурация Logstash: Мы создали и настроили файл конфигурации Logstash, чтобы убедиться, что логи Apache правильно анализируются и отправляются в OpenSearch.

Проверка в OpenSearch: Мы настроили шаблон индекса в OpenSearch Dashboards, чтобы подтвердить, что ваши логи правильно индексируются и доступны для анализа.

Сделав эти шаги, вы теперь должны иметь функциональную установку, где Logstash собирает логи Apache и отправляет их в OpenSearch.

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