Введение
Эффективное управление журналами веб-сервера критически важно для поддержания производительности вашего сайта, устранения неполадок и анализа поведения пользователей. Apache — один из самых популярных веб-серверов. Он создаёт журналы доступа и ошибок, содержащие ценную информацию. Для эффективного управления и анализа этих журналов вы можете использовать Logstash для их обработки и отправки в управляемую систему OpenSearch от DigitalOcean для индексации и визуализации.
В этом руководстве мы покажем вам, как установить Logstash на ваш Droplet, настроить его для сбора журналов Apache и отправки их в Managed OpenSearch для анализа.
Предпосылки
- Каплеты с установленным веб-сервером Apache.
- Управляемый кластер OpenSearch
Шаг 1 — Установка Logstash
Logstash можно установить с помощью бинарных файлов или через репозитории пакетов. Для упрощения управления и обновления обычно рекомендуется использовать репозитории пакетов.
В этом разделе мы покажем вам, как установить Logstash на ваш Droplet с помощью APT и менеджера пакетов YUM.
Давайте определим операционную систему:
cat /etc/os-release
Для систем на базе APT (Ubuntu/Debian)
Загрузите и установите открытый ключ подписи:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic-keyring.gpg
Прежде чем продолжить, вам может потребоваться установить пакет apt-transport-https в Debian:
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
Чтобы добавить репозиторий Logstash, используйте метод echo, описанный выше. Не используйте 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. Для обновления и создания файла можно использовать клавишу «t».
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 — Настройте Logstash для отправки журналов в OpenSearch
Конвейер Logstash состоит из трёх основных этапов: ввода, фильтрации и вывода. Конвейеры Logstash используют плагины. Вы можете использовать плагины от сообщества или создавать свои собственные.
- Входные данные: на этом этапе собираются данные из различных источников. Logstash поддерживает несколько плагинов ввода для управления источниками данных, такими как файлы журналов, базы данных, очереди сообщений и облачные сервисы.
- Фильтр: На этом этапе данные обрабатываются и преобразуются, собранные на этапе ввода. Фильтры могут изменять, обогащать и структурировать данные, делая их более полезными и аналитическими.
- Выход: на этом этапе обработанные данные отправляются в пункт назначения. Пунктами назначения могут быть базы данных, файлы и хранилища данных, такие как OpenSearch.
Шаг 3 — Установка плагина Open Search Output
Плагин вывода OpenSearch можно установить, выполнив следующую команду:
/usr/share/logstash/bin/logstash-plugin install logstash-output-opensearch
Более подробную информацию можно найти в этом репозитории logstash-output-opensearch-plugin.
Теперь давайте создадим конвейер:
Создайте новый файл в папке /etc/logstash/conf.d/ с именем apache_pipeline.conf и скопируйте следующее содержимое.
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
}
}
}с именем хоста вашего сервера OpenSearch и Замените на свой пароль OpenSearch.
Давайте разберем представленную выше конфигурацию.
- ВХОД: используется для настройки источника событий. Здесь используется плагин ввода файлов.
- path => “/var/log/apache2/access.log”: указывает путь к файлу журнала доступа Apache, который Logstash должен считывать.
Убедитесь, что служба Logstash имеет доступ к входному пути.
- start_position => “beginning”: указывает, с чего Logstash должен начать чтение файла журнала. “beginning” указывает, что Logstash должен начать обработку файла с начала, а не с конца.
- sincedb_path => “/dev/null”: Указывает путь к файлу sincedb. Файлы sincedb используются Logstash для отслеживания текущего положения в файлах журнала, что позволяет продолжить работу с места остановки в случае перезагрузки или сбоя.
- tags => “apache_access”: присваивает тег событиям, считываемым с этого входа. Теги полезны для идентификации и фильтрации событий в Logstash, часто используются на последующих этапах вывода или фильтрации конфигурации. Мы используем теги для последнего.
- ФИЛЬТР: Используется для обработки событий.
Начиная с условных предложений:
(if "apache_access" in [tags]):
Это проверяет наличие тега apache_access в разделе [tags] входящих событий журнала. Мы используем это условие для применения соответствующего фильтра GROK к журналам доступа и ошибок Apache.
- Фильтр Grok (для журналов доступа Apache):
grok {
match => { "message" => "%{HTTPD_COMBINEDLOG}" }
}Фильтр Grok %{HTTPD_COMBINEDLOG} — это предопределённый шаблон в Logstash, используемый для анализа формата Apache Combined Access Log. Он извлекает такие поля, как IP-адрес, временная метка, HTTP-метод, URI, код состояния и т. д., из тела сообщения о полученных событиях.
- Mutate Filter Remove (необязательно): после анализа журналов Apache мы используем mutate-remove для удаления некоторых полей.
mutate {
remove_field => [ "message","[log][file][path]","[event][original]" ]
}- Другое условие: если тег apache_access отсутствует в [tags], выполняется блок else. Этот блок else содержит ещё один фильтр GROK для журналов ошибок Apache.
grok {
match => { "message" => "%{HTTPD24_ERRORLOG}" }
}
Этот фильтр %{HTTPD24_ERRORLOG} анализирует сообщения, соответствующие формату журнала ошибок Apache. Он извлекает поля, относящиеся к журналам ошибок, такие как временная метка, уровень журнала, сообщение об ошибке и т. д.
Выкройки GROK можно найти здесь: https://github.com/logstash-plugins/logstash-patterns-core/tree/main/patterns Находить.
- ВЫХОД: Плагин отправляет выходные события в определенное место назначения.
Блок вывода начинается с условия if. Здесь мы используем условный оператор.
if "apache_access" in [tags] {}
Если условие используется для направления журналов OpenSearch в два отдельных профиля, apache_error и apache_access.
Давайте проверим плагин OpenSearch Output:
hosts => "https://XXX:25060" Your Open search Hostname
user => "doadmin" Your Open search Username
password => "XXXXX" OpenSearch Password
index => "apache_error" Index name in OpenSearch
ssl_certificate_verification => true Enabled SSL certificate verificationШаг 4 — Запуск Logstash
После настройки конвейера запустите службу Logstash:
systemctl enable logstash.service
systemctl start logstash.service
systemctl status logstash.serviceШаг 5 – Устранение неполадок
Проверьте соединение.
Вы можете убедиться, что Logstash может подключиться к OpenSearch, проверив соединение:
curl -u your_username:your_password -X GET "https://your-opensearch-server:25060/_cat/indices?v"
с именем хоста сервера OpenSearch и , Замените своими учетными данными OpenSearch.
Прием данных
Убедитесь, что данные правильно проиндексированы в OpenSearch:
curl -u your_username:your_password -X GET "http://your-opensearch-server:25060/<your-index-name>/_search?pretty"
с именем хоста сервера OpenSearch и , Замените на ваши учетные данные OpenSearch. Аналогично, Под названием Index.
Конфигурация брандмауэра и сети
Убедитесь, что правила брандмауэра и сетевые настройки разрешают трафик между 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, чтобы проверить, что ваши отчеты правильно индексированы и видны для анализа.
После выполнения этих шагов у вас должна быть рабочая настройка, в которой Logstash собирает логи Apache и отправляет их в OpenSearch.









