Debian где логи nginx

Обновлено: 06.07.2024

Логи сайта — это системные журналы, позволяющие получить информацию о посещении сайта ботами и пользователями, а также выявить скрытые проблемы на сервере — ошибки, битые ссылки, медленные запросы от сервера и многое другое.

Важные логи сайта

Расположение логов

Важно обратить внимание, что местоположение логов сайта по умолчанию зависит от используемого типа оболочки и может быть изменено администратором.

Стандартные пути до Error.log

Nginx

Php-Fpm

Apache (CentOS)

Apache (Ubuntu, Debian)

Стандартные пути до Access.log

Nginx

Php-Fpm

Apache (CentOS)

Apache (Ubuntu, Debian)

Чтение записей в логах

Записи в логах имеют структуру: одно событие – одна строка .

Записи в разных логах имеют общие черты, но количество подробностей отличается. Далее будут приведены примеры строк из разных системных журналов.

Примеры записей

Error.log

В приведенном примере:

Access.log

В приведенном примере:

Просмотр логов сервера с помощью команды tail

Выполнить просмотр логов в Linux можно с помощью команды tail . Данный инструмент позволяет смотреть записи в логах, выводя последние строки из файла. По умолчанию tail выводит 10 строк.

Первый вариант использования Tail

Аргумент «-f» позволяет команде делать просмотр событий в режиме реального времени, в ожидании новых записей в лог файлах. Для прерывания процесса следует нажать сочетание клавиш «Ctrl+C».

На место переменной «/var/log/syslog» в примере следует подставить актуальный адрес до нужных системных журналов.

Второй вариант использования Tail

В Linux логи веб-сервера не ведутся до бесконечности, поскольку это усложняет их дальнейший анализ. При преодолении лимита записей, система переименует переполненный строками файл журнала и отправит в «архив». Вместо старого файла создастся новый, но с прежним названием.

Если будет использоваться аргумент «-f», команда продолжит отслеживание старого, переименованного журнала. Данный метод делает невозможным просмотр логов в реальном времени, поскольку файл более не актуален.

При использовании аргумента «-F», команда, после окончания записи старого журнала, перейдёт к чтению нового файла с логами. В таком случае просмотр логов в режиме реального времени продолжится.

Аналог команды Tail

Отличие команды tailf от предыдущей заключается в том, что она не обращается к файлу и файловой системе в период, когда запись логов не происходит. Это экономит ресурсы системы и заряд, если используется нестационарное устройство — ноутбук, смартфон или планшет.

Недостаток данного способа — проблема с чтением больших файлов. Если системный журнал достаточно большой, возникает вероятность отказа в работе программы.

Изменение стандартного количества строк для вывода

Как и отмечалось выше, по умолчанию выводится 10 строк. Если требуется увеличить или уменьшить их количество, в команду добавляется аргумент «-n» и необходимое число строк.

При использовании данной команды будут показаны последние 100 строк журнала.

Просмотр логов с помощью ISPManager

Если на сервере установлен ISPManager, логи можно легко читать, используя приведенный ниже алгоритм.

Программы для анализа логов

Анализировать журналы с большим количеством данных вручную не только сложно, но и чревато ошибками. Для упрощения работы с лог файлами было создано большое количество сервисов и утилит.

Инструменты для анализа логов делятся на два основных типа — статические и работающие в режиме реального времени.

Статические программы

Данный тип выполняет работу только с извлеченными логами, но обеспечивает быструю сортировку данных.

WebLog ExpertWebLog Expert

Возможности
  • Предоставление информации об активность сайта, количестве посетителей, доступ к файлам, URL страницы, ссылающиеся страницы, информацию о пользователе (браузер и операционная система).
  • Создание отчётов в формате HTML (.html), PDF (.pdf), CSV (.csv).
  • Поддерживает анализ логов Nginx, Apache, ISS.
  • Чтение файлов даже в архивах ZIP (.zip), GZ (.gz).

Web Log Explorer

Web Log Explorer
Возможности

Программы для анализа в режиме реального времени

Эти инструменты встраиваются в программную среду сервера, анализируют данные в реальном времени и записывают непрерывный отчёт.

GoAccess

GoAccess
Возможности
  • Автоматическая генерация отчёта в формате HTML (.html), JSON (.json), CSV (.csv).
  • При подключении к серверу через SSH, возможен анализ в браузере и в терминале
  • Поддержка почти всех форматов (Apache, Nginx, Amazon S3, Elastic Load Balancing, CloudFront и др.).

Logstash

Logstash
Возможности
  • Постоянная генерация отчёта в файл JSON (.json).
  • Получение и анализ информации из нескольких источников.
  • Возможность пересылать журналы с помощью Filebeat.
  • Поддержка анализа системных журналов.
  • Поддерживается большое количество форматов: от Apache до Log4j (Java).

Ведения логов медленных запросов сервера

Анализ данного лога позволяет определить на какие типы запросов сервер отвечает долго. В идеале задержка должна составлять не более 1 секунды.

На некоторых типах оболочек (MySQL, PHP-FPM) ведение данного лога по умолчанию отключено. Процесс запуска и ведения зависит от сервера.

MySQL

Если сервер управляется с помощью MySQL, то необходимо создать каталог и сам файл для ведения журнала с помощью команд:

Стоит изменить владельца файла, чтобы избежать дальнейших проблем с записью логов. Делается это командой:

После выполнения предыдущих действий, нужно совершить вход в командную строку MySQL под учётной записью суперпользователя:

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

  • slow_query_log — запускает ведение журналов медленных запросов.
  • slow_launch_time — указывает максимальную задержку отклика, после которой статистика запроса попадёт в журнал. В данном случае запись в логи происходит при преодолении откликом порога 2 секунды.
  • slow_query_log_file — задаёт путь до используемого журнала.

Проверить статус и параметры ведения лога медленных запросов можно командой:

Выход из консоли MySQL выполняется командой:

После выполнения всех предыдущих действий, можно просмотреть логи сервера. Для этого в терминале вводится:

PHP-FPM

Для ведения журнала на данной оболочке, необходимо отредактировать параметры в конфигурационном файле. Для этого в терминале вводится команда:

Далее нужно найти строки:

  • request_slowlog_timeout = 10s — параметр, позволяющий указать задержку, с которой запись о длительном запросе попадёт в журнал.
  • slowlog = /var/log/php-fpm/www-slow.log — параметр, указывающий путь до актуального файла логирования (.log).

После применения изменений, необходимо перезагрузить сервер PHP-FPM. Для этого в консоль вводится команда:

Просмотр логов запускается командой:

Анализ логов медленных запросов

Логи медленных запросов могут за незначительное время вырасти до огромных размеров. Для сортировки и отображения повторяющихся запросов рекомендуется использовать программу MySQLDumpSlow.

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

Ведение логов в Logrotate

На больших ресурсах журналы могут достигать огромных размеров, поэтому нужно своевременно архивировать или очищать логи. С помощью утилиты Logrotate можно управлять ведением журналов: настроить период ротации (архивирование старого журнала и создание нового), период и количество хранения журналов и многое другое.

Изначально программа отсутствует в системе. Ниже приведены команды для инсталляции Logrotate из официальных репозиториев.

Ubuntu, Debian:

CentOS:

После установки необходимо проверить путь для будущих конфигурационных файлов. Для правильной работы они должны находится в папке «logrotate.d». Проверить данный параметр можно открыв конфигурационный файл командой:

В директории «RPM packages drop log rotation information into this directory» должна присутствовать строка:

Теперь создаётся конфигурационный файл «rsyslog.conf». В нём будет находиться конфигурацию по работе с логами. Для создания файла в терминале вводится команда:

В окне терминала откроется текстовой редактор. Теперь нужно внести конфигурацию, как указано в образце. В качестве примера будет использоваться журнал посещений «Access.log» (Nginx).

Теперь остаётся только запустить Logrotate. Для этого вводится команда:

Для проверки правильности работы программы в терминале можно ввести команду:

Файлы логов — первое место, где нужно искать ошибки. Особенно если это касается веб-сервера. В Nginx всего два основных лога: error_log и access_log .

Лог ошибок error_log

Логирование ошибок Nginx происходит в определенный файл, stderr или syslog. Он собирает все ошибки, которые произошли во время работы веб-сервера. По умолчанию он включен глобально:

error_log logs/error.log error;
Записываются только ошибки в файл по указанному пути

error_log logs/error.log warn;
Записываются ошибки уровня warn, error crit, alert, emerg

Лог доступа access_log

Лог доступа Nginx по умолчанию размещен в директории logs/access.log . В него записываются данные о запросах пользователей, как только эти запросы обработаны. Для изменения директории расположения лога используется директива access_log :

access_log logs/access.log combined;
Используется комбинированный формат

В расширенном виде access_log можно настроить по своим требованиям:

Задается пользовательский формат с записью времени подключения, TTFB, TTLB, времени обработки запроса

Также можно исключить ненужную информацию из лога:

Запись в syslog

Перенаправляет информацию в syslog

Включение режима debug

При необходимости можно включить Nginx debug-режим записи логов, который обеспечивает расширенную информацию и полезен при решении серьезных проблем:

error_log logs/error.log debug;

Можно включить только для нужной секции или отдельных клиентов соединений

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

Highload нужны авторы технических текстов. Вы наш человек, если разбираетесь в разработке, знаете языки программирования и умеете просто писать о сложном!
Откликнуться на вакансию можно здесь .

Как перезапустить nginx после обновления конфигурации

Уменьшение размера картинок при сохранении качества

Как и зачем используется заголовок Cache-control

Что такое Etag и как его настроить в Nginx

301 redirect в Nginx'e

Причины и методы исправления ошибки Gateway Timeout, Nginx

Как настроить Nginx на максимальную эффективность

Архитектурные принципы высоконагруженных приложений

Основы оптимизации работы Web сервера

Как использовать try_files в настройках Nginx'a

Где находится nginx.conf и пример настроек

Работа приложения с несколькими бэкендами при помощи Nginx

Как пофиксить ошибку "110: connection timed out" while reading response header from upstream

Причины возникновения ошибки Ошибка 502 bad gateway в Nginx и методы исправления

Примеры применения Javascript в Nginx'e

Использование Nginx, как кэширующего сервера

Как решить ошибку upstream sent too big header while reading response header from upstream в Nginx

Знание того, как настраивать и читать журналы, очень полезно при устранении неполадок сервера или приложений, поскольку они предоставляют подробную информацию об отладке.

Nginx записывает свои события в журналы двух типов: журналы доступа и журналы ошибок. Журналы доступа записывают информацию о клиентских запросах, а журналы ошибок записывают информацию о проблемах сервера и приложений.

В этой статье рассказывается, как настроить и прочитать журналы доступа и ошибок Nginx.

Настройка журнала доступа

Каждый раз, когда клиентский запрос обрабатывается, Nginx генерирует новое событие в журнале доступа. Каждая запись события содержит отметку времени и включает различную информацию о клиенте и запрошенном ресурсе. Журналы доступа могут показать вам местоположение посетителей, страницу, которую они посещают, сколько времени они проводят на странице и многое другое.

Самый простой синтаксис директивы access_log следующий:

Если формат журнала не указан, Nginx использует предопределенный комбинированный формат, который выглядит следующим образом:

Чтобы использовать новый формат, укажите его имя после файла журнала, как показано ниже:

Хотя журнал доступа предоставляет очень полезную информацию, он занимает дисковое пространство и может повлиять на производительность сервера. Если на вашем сервере мало ресурсов и у вас загруженный веб-сайт, вы можете отключить журнал доступа. Чтобы сделать это, установите значение access_log директиву off :

Настройка журнала ошибок

Параметр log_level устанавливает уровень ведения журнала. Ниже перечислены уровни в порядке их серьезности (от низкого до высокого):

Если параметр log_level не указан, по умолчанию используется error .

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

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

Расположение файлов журнала

По умолчанию в большинстве дистрибутивов Linux, таких как Ubuntu , CentOS и Debian , журналы доступа и ошибок расположены в каталоге /var/log/nginx .

Чтение и понимание файлов журнала Nginx

Вы можете открывать и анализировать файлы журнала, используя стандартные команды, такие как cat , less , grep , cut , awk и т. Д.

Вот пример записи из файла журнала доступа, в котором используется стандартный формат журнала Nginx для объединения:

Давайте разберемся, что означает каждое поле записи:

Используйте команду tail для просмотра файла журнала в режиме реального времени:

Выводы

Файлы журналов содержат полезную информацию о проблемах с сервером и о том, как посетители взаимодействуют с вашим сайтом.

Nginx позволяет настроить журналы доступа и ошибок в соответствии с вашими потребностями.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Системные администраторы, да и обычные пользователи Linux, часто должны смотреть лог файлы для устранения неполадок. На самом деле, это первое, что должен сделать любой сисадмин при возникновении любой ошибки в системе.

Расположение логов по умолчанию

Большинство файлов логов Linux находятся в папке /var/log/ вы можете список файлов логов для вашей системы с помощью команды ls:


Ниже мы рассмотрим 20 различных файлов логов Linux, размещенных в каталоге /var/log/. Некоторые из этих логов встречаются только в определенных дистрибутивах, например, dpkg.log встречается только в системах, основанных на Debian.

Просмотр логов в Linux

Чтобы посмотреть логи на Linux удобно использовать несколько утилит командной строки Linux. Это может быть любой текстовый редактор, или специальная утилита. Скорее всего, вам понадобятся права суперпользователя для того чтобы посмотреть логи в Linux. Вот команды, которые чаще всего используются для этих целей:

Я не буду останавливаться подробно на каждой из этих команд, поскольку большинство из них уже подробно рассмотрены на нашем сайте. Но приведу несколько примеров. Просмотр логов Linux выполняется очень просто:

Смотрим лог /var/log/dmesg, с возможностью прокрутки:


Просмотр логов Linux, в реальном времени:

tail -f /var/log/dmesg

Открываем лог файл dmesg:

Первые строки dmesg:

Выводим только ошибки из /var/log/messages:

grep -i error /var/log/dmesg


Кроме того, посмотреть логи на linux можно и с помощью графических утилит. Программа Журналы может быть использована для удобного просмотра и отслеживания системных журналов на ноутбуке или персональном компьютере с Linux.


Вы можете установить программу в любой системе с установленным X сервером. Также для просмотра логов может использоваться любой графический тестовый редактор.

Кроме того, у каждого сервиса есть свой лог файл, который можно посмотреть с помощью утилиты journalctl.

Выводы

В каталоге /var/log вы можете найти всю необходимую информацию о работе Linux. Из сегодняшней статьи вы достаточно узнали, чтобы знать где искать, и что искать. Теперь просмотр логов в Linux не вызовет у вас проблем. Если остались вопросы, задавайте в комментариях!

При администрировании сервера часто возникает необходимость отследить работу и состояние сервиса. Одним из наиболее важных источников информации для администратора являются логи, которые содержат данные о всех событиях в сети.

Логи веб-сервера (например, Nginx) хранят важную информацию о каждой попытке получить доступ к ресурсам через веб-сервер. Каждый посетитель сайта, открытое изображение или загруженный файл регистрируется в логе. Также в логах регистрируются ошибки. Для удобства работы рекомендуется поддерживать структуру логов.

Данное руководство поможет настроить модуль логирования Nginx и создать отдельные лог-файлы для виртуальных хостов. Также вы научитесь добавлять в стандартные логи дополнительную информацию о запросах (в данном случае это будет время обслуживания запроса).

Требования

  • Сервер Debian 8 (инструкции по начальной настройке сервера – здесь).
  • Пользователь с доступом к sudo.
  • Предустановленный веб-сервер Nginx (чтобы установить Nginx, читайте эту статью).

1: Создание тестовых файлов

Сначала нужно создать несколько тестовых файлов в каталоге сайта, который поддерживает Nginx.

Далее в этом руководстве вы узнаете, как изменять конфигурацию логов и добавить в них полезную информацию (например, продолжительность обработки каждого запроса). Научиться работать с логами, настраивать их и понять разницу между различными запросами вам помогут тестовые файлы разных размеров (на передачу которых уйдёт разное количество времени).

Создайте файл 1mb.test размером в один мегабайт в каталоге сайта:

sudo truncate -s 1M /var/www/html/1mb.test

Затем создайте ещё два файла размером в 10 и 100 мегабайт:

sudo truncate -s 10M /var/www/html/10mb.test
sudo truncate -s 100M /var/www/html/100mb.test

Также для работы понадобится пустой файл:

sudo touch /var/www/html/empty.test

2: Стандартные настройки логов

Модуль log встроен в ядро Nginx, потому его не нужно устанавливать.

Конфигурация модуля по умолчанию включает только основные настройки.

На свежем сервере Nginx регистрирует запросы в двух отдельных файлах:

  • /var/log/nginx/error.log (лог ошибок);
  • /var/log/nginx/access.log (лог, в котором хранится информация о запросах).

Чтобы увидеть, как выглядит стандартная строка лога access.log, запросите пустой файл:

HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: Fri, 09 Dec 2016 23:05:18 GMT
Content-Type: application/octet-stream
Content-Length: 0
Last-Modified: Fri, 09 Dec 2016 23:05:13 GMT
Connection: keep-alive
ETag: "584b38a9-0"
Accept-Ranges: bytes

Этот ответ содержит следующие данные:

Теперь проверьте файл access.log.

sudo tail /var/log/nginx/access.log

В файле будет примерно такая запись:

127.0.0.1 - - [30/Jun/2016:14:10:15 -0400] "GET /empty.test HTTP/1.1" 200 0 "-" "curl/7.47.0"

Nginx использует комбинированный формат логов; это стандартизированный формат логов доступа, который используется популярными веб-серверами для обеспечения интероперабельности. В этом формате все данные отделяются одним пробелом; черточки указывают на недостающие фрагменты информации.

Рассмотрим по порядку категории, присутствующие в файле:

Как видите, даже простая запись в логе access предоставляет много полезной информации о запросе. Однако на данный момент в файле отсутствует важный фрагмент данных – имя хоста в пути к файлу (localhost).

3: Настройка дополнительного лога запросов

Теперь попробуйте переопределить настройки логов Nginx по умолчанию (имеется в виду использование одного лога запросов для регистрации всех запросов). Создайте дополнительный лог для стандартного виртуального хоста (server-блока), который поставляется с Nginx.

Рекомендуется использовать отдельный лог для каждого виртуального хоста – это позволяет отделить запросы одного сайта от другого. Более того, отдельные логи будут гораздо меньше, а потому их проще анализировать.

Откройте виртуальный хост Nginx по умолчанию в редакторе:

sudo nano /etc/nginx/sites-available/default

Найдите блок server:

Добавьте в него следующие две строки:

Директива access_log задаёт путь к логу запросов, а error_log указывает путь к логу ошибок. Эти файлы хранятся в одном каталоге со стандартными логами Nginx (/var/log/nginx).

Примечание: Если на одном сервере размещено несколько сайтов, можно использовать описательные имена логов (например, домены).

Сохраните и закройте файл.

Чтобы поддерживать отдельные логи для каждого виртуального хоста, вы должны применять предложенные выше настройки в новых виртуальных хостах Nginx.

Обновите настройки Nginx:

sudo systemctl restart nginx.service

Чтобы протестировать новую настройку, снова отправьте запрос:

Теперь проверьте новый лог-файл:

sudo tail /var/log/nginx/default-access.log

4: Пользовательский формат логов

Теперь настройте пользовательский формат логов, поместив в них дополнительную информацию.

Примечание: В руководстве показано, как добавить в лог время обработки запроса.

Сначала нужно определить новый формат. Nginx позволяет устанавливать форматам уникальные имена.

Чтобы определить новый формат логов, создайте конфигурационный файл timed-log-format.conf в каталоге дополнительных конфигураций Nginx.

sudo nano /etc/nginx/conf.d/timed-log-format.conf

Вставьте в файл:

log_format timed '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" $request_time';

Сохраните и закройте его.

Директива log_format определяет новый формат лога. За ней следует уникальный идентификатор формата (в данном случае используется timed, но вы можете использовать любой другой).

Далее идёт сам формат. Для удобства он разделён на три строки. Для отображения информации о запросах Nginx использует переменные, перед которыми стоит символ $. Вместо них веб-сервер добавит в лог нужную информацию о запросах.

Этот формат почти полностью повторяет стандартный формат логов, но есть одно отличие: переменная $request_time в конце. Nginx использует эту переменную для регистрации времени обработки запроса.

Теперь у вас есть пользовательский формат логов, который называется timed. Но пока что этот формат не используется хостами. Настройте стандартный виртуальный хост для поддержки этого формата.

sudo nano /etc/nginx/sites-available/default

Найдите блок server и добавьте имя нового формата в директиву access_log:

Сохраните и закройте файл.

sudo systemctl restart nginx.service

5: Тестирование новых настроек

Убедитесь, что всё работает должным образом. Для этого снова отправьте запрос curl всем тестовым файлам:

Вы увидите, что на выполнение каждой последующей команды уходит всё больше времени.

sudo tail /var/log/nginx/default-access.log

Теперь в логе будет больше строк. Последние четыре записи относятся к сделанным только что запросам:

127.0.0.1 - - [09/Dec/2016:23:07:02 +0000] "GET /empty.test HTTP/1.1" 200 0 "-" "curl/7.38.0"
127.0.0.1 - - [09/Dec/2016:23:08:28 +0000] "GET /empty.test HTTP/1.1" 200 0 "-" "curl/7.38.0" 0.000
127.0.0.1 - - [09/Dec/2016:23:08:28 +0000] "GET /1mb.test HTTP/1.1" 200 1048576 "-" "curl/7.38.0" 0.000
127.0.0.1 - - [09/Dec/2016:23:08:28 +0000] "GET /10mb.test HTTP/1.1" 200 10485760 "-" "curl/7.38.0" 0.302
127.0.0.1 - - [09/Dec/2016:23:08:39 +0000] "GET /100mb.test HTTP/1.1" 200 68516844 "-" "curl/7.38.0" 7.938

Обратите внимание: каждая запись содержит новый путь, а размер запроса постоянно увеличивается. Особенно важно последнее выделенное число. Это – время обработки запроса в миллисекундах.

Теперь виртуальный хост Nginx поддерживает пользовательский формат логов.

Заключение

Время обработки запроса в логе Nginx очень полезно при обслуживании динамических веб-сайтов. Этот показатель поможет обнаружить узкие места сайта и быстро найти запрос, на обработку которого уходит много времени.

Переменная $request_time – это только одна из многих доступных переменных Nginx. Другие переменные позволяют дополнить лог важными данными (например, добавить заголовок ответа).

Читайте также: