В этой заметке речь пойдёт об использовании сервиса для анализа логов под названием Logentries. Мы разберём основные способы отправки данных в Logentries и подробно рассмотрим настройку сервера с Debian 7 и связкой Nginx + PHP-FPM.
Но, прежде всего, несколько замечаний о самом Logentries.
На сегодняшний день это далеко не единственный сервис анализа логов, но он один из самых популярных. Кроме того, у таких сервисов основные возможности вроде поиска, фильтрации, создания уведомлений и т.п. очень похожи. Обычно отличается интерфейс, тарифные планы и набор дополнительных функций.
В бесплатном варианте Logentries предоставляет возможность отправить до 5ГБ логов в месяц и при этом время хранения составляет 7 дней. В платном варианте эти лимиты увеличиваются, а также появляются дополнительные функции (подробнее).
Если вы раньше не пользовались подобными сервисами, то очень рекомендую посмотреть видеоролики на официальном сайте. Они небольшие, но дают хорошее представление о возможностях системы.
Способы отправки логов
Logentries поддерживает несколько методов передачи данных:
1) С помощью специальной программы (агента). Это один из самых простых вариантов с точки зрения настройки. Вы только устанавливаете программу и выбираете логи, которые нужно отправлять в Logentries. Но устанавливать на «боевом» сервере сторонний софт не желательно и, кроме того, нужно будет следить за его обновлениями.
2) С помощью syslog (rsyslog). Эта утилита установлена в большинстве linux-дистрибутивов. Тут вы только настраиваете отправку нужных логов.
3) С помощью библиотек. В этом случае вы сможете отправлять сообщения прямо из приложения, без сохранения в файловой системе. Библиотеки написаны для большинства распространённых языков, в том числе Java, PHP, Python, JavaScript/HTML5 и других.
Первые два варианта можно подойдут, если вы используете VPS или выделенный сервер. Т.е. у вас должен быть доступ к консоли, иначе вы просто не сможете сделать нужных настроек. Правда, сейчас у многих PaaS сервисов (например, Heroku, AppFog, CloudControl) уже реализована поддержка Logentries, и вам нужно её просто активировать в админке.
В общем, с серьёзными ограничениями вы столкнётесь только на shared хостинге. В этом случае у вас будет возможность отправлять сообщения из приложения, логи веб сервера отправить не получится.
Примечание. Подробнее почитать об отправке данных можно в статье Log Management 101 – Where Do Logs Come From?.
Рассмотрим подробно второй вариант – отправку с помощью rsyslog
Примеры настройки показаны для Debian 7, но для большинства linux дистрибутивов подход будет аналогичным.
Шаг 1. Регистрируемся в Logentries.
Это бесплатно 🙂
Шаг 2. Создаём логи.
Здесь я имею в виду, что нужно нажать кнопку «Add new log» в админке Logentries, а не создать log файл на сервере. Обычно каждому log файлу соответствует отдельный лог в админке, хотя можно данные из нескольких log файлов «слить» в один лог.
Шаг 3. Выбираем syslog
После этого появится инструкция по настройке rsyslog на вашем сервере.
В ней предлагается внести правки в /etc/rsyslog.conf
, но, на мой взгляд, удобнее создать файл в директории /etc/rsyslog.d/
. Я обычно создаю отдельные конфигурационные файлы под каждый лог, в этом случае они не содержат много настроек и с ними удобно работать.
Шаг 4. Создаём конфигурационный файл для лога Nginx.
sudo touch /etc/rsyslog.d/nginx_access.conf
и копируем в него настройки из инструкции. Обратите внимание, эти настройки уже содежрат token
нового лога.
token
определяет в какой лог будут попадать сообщения от вашего сервера. Т.е. если вы по каким-то причинам хотите чтобы данные из нескольких логов попадали в один лог Logentries, то нужно просто указать для этих файлов один и тот же token
.
Шаг 5. Проверяем передачу данных
Для этого перезапускаем rsyslog и отправляем тестовое сообщение
sudo service rsyslog restart logger -t test Hello there Logentries
Через некоторое время (обычно меньше минуты) страница (в админке Logentries) обновиться и вы попадёте на страницу просмотра логов.
Последним сообщением в логе будет «test: Hello there Logentries».
Теперь мы убедились, что rsyslog передаёт сообщения Logentries.
Примечание. Logentries автоматически формирует названия для логов. Их можно изменить на вкладке Settings.
Шаг 6. Выбираем лог файл.
В файле /etc/rsyslog.conf
(перед подключением rsyslog.d
) добавляем строку:
$Modload imfile
И заменяем содержимое /etc/rsyslog.conf/nginx_access.conf
$template NginxTemplate,"LOGENTRIES_ACCESS_LOG_TOKEN %HOSTNAME% %syslogtag%%msg%\n" $InputFileName /var/log/nginx/access.log $InputFileTag $InputFileStateFile stat-nginx-access $InputFileSeverity info $InputFileFacility local4 $InputFilePollInterval 10 $InputRunFileMonitor local4.* @@data.logentries.com:10000;NginxTemplate
Убедитесь, что лог файл находится именно в директории /var/log/nginx/
.
Вместо LOGENTRIES_ACCESS_LOG_TOKEN
нужно указать реальный token. Его всегда можно посмотреть в админке Logentries.
Перезапускаем rsyslog
sudo service rsyslog restart
И через некоторое время у вас должны появиться данные в админке Logentries.
Шаг 7. Подключаем error.log
Повторяем шаги 2-6. Только теперь в создаём конфиг файл для лога с ошибками /etc/rsyslog.conf/nginx_error.conf
$template NginxError,"LOGENTRIES_ERROR_LOG_TOKEN %HOSTNAME% %syslogtag%%msg%\n" $InputFileName /var/log/nginx/error.log $InputFileTag $InputFileStateFile stat-nginx-error $InputFileSeverity info $InputFileFacility local6 $InputFilePollInterval 1 $InputRunFileMonitor local6.* @@data.logentries.com:10000;NginxError
Не забываем перезапустить rsyslog
sudo service rsyslog restart
Примечание. Если у вас возникли проблемы с настройкой rsyslog, я очень рекомендую посмотреть официальную документацию. Возможно, в будущем разработчики Logentries сделают какие-то изменения.
Заключение
Как видите, использование rsyslog не зависит от типа логов, которые вы передаёте. Т.е. вы спокойно можете заменить логи nginx из данного примера на логи apache. Главное правильно укажите размещение файлов и token’ы.
Happy logging 🙂