TGViewer
NetworkAdmin.ru NetworkAdmin.ru @networkadminru · 4.7K subscribers
Post #453 2.96K
✏️ Логи Nginx в JSON: удобство и гибкость

По умолчанию Nginx ведёт логи в текстовом формате, но уже давно умеет писать их в JSON. Однако, в большинстве конфигураций всё ещё используются старые текстовые логи. Если вы до сих пор не перешли на JSON, самое время это сделать – его проще анализировать вручную и обрабатывать в автоматизированных системах.

⚙️ Настройка JSON-логов в Nginx. Включить JSON-формат просто – достаточно добавить новую директиву log_format в конфигурационный файл:


log_format json_combined escape=json '{'
'"time_local":"$time_local",'
'"remote_addr":"$remote_addr",'
'"remote_user":"$remote_user",'
'"request":"$request",'
'"status":"$status",'
'"body_bytes_sent":"$body_bytes_sent",'
'"request_time":"$request_time",'
'"http_referrer":"$http_referer",'
'"http_user_agent":"$http_user_agent"'
'}';


Добавляем в http { } или в настройки виртуального хоста:


access_log /var/log/nginx/access.log json_combined;


После перезапуска Nginx сервер начнёт записывать логи в JSON.

🌟 Почему это удобно?

Если вы используете Zabbix, ELK (Elasticsearch + Logstash + Kibana), Grafana или другие системы мониторинга – обработка JSON-логов упростится, так как для него уже есть готовые парсеры.


Но даже в консоли JSON-логи обрабатывать намного удобнее с помощью jq:

▪️ Вывод всех логов в формате JSON:


jq '.' access.log


▪️ Список всех запрашиваемых URL:


jq '.request' access.log


▪️ Фильтр по коду ответа 404 (показывает всю запись):


jq '. | select(.status=="404")' access.log


▪️ Вывод только URL с кодом 404:


jq '. | select(.status=="404") | .request' access.log


▪️ Добавляем к URL ещё и время запроса:


jq '. | select(.status=="404") | .time_local, .request' access.log


▪️ Вывод значений без кавычек (флаг -r):


jq -r '.request' access.log


🌟 Дополнительные переменные для логов. К стандартным переменным можно добавить полезные параметры:

Метрики запроса и прокси-серверов:

$request_length – длина запроса
$upstream_addr – адрес upstream-сервера
$upstream_status – HTTP-ответ от upstream
$upstream_response_time – время ответа backend'а
$upstream_connect_time – время установки соединения с upstream
$upstream_header_time – время получения HTTP-заголовков от upstream


Безопасность и TLS:

$server_name – имя виртуального хоста
$ssl_protocol – используемый TLS-протокол
$ssl_cipher – алгоритм шифрования


#Nginx #JSON

🧑‍💻 NetworkAdmin
  • 🔥 9
  • 👍 2
More from @networkadminru
  1. Oct 1, 2026✨ Systemd-команды, которые быстро дают информацию о системе У systemd есть несколько коман…
  2. Sep 30, 2026🖥 Get-ADUser: полезные примеры для работы с пользователями Active Directory Get-ADUser -…
  3. Sep 29, 2026🥱 Как быстро разобраться с дисками и маунтами Когда на сервере несколько дисков, LVM, отд…
  4. Sep 28, 2026🔎 TCP keepalive: как находить мертвые соединения до того, как они создадут проблему Иногд…
  5. Sep 25, 2026🤩 Как расшифровать код ошибки Windows через certutil При установке обновлений Windows ран…
  6. Sep 23, 2026💻 Как жестко перезагрузить linux, когда обычный reboot уже не помогает Иногда сервер зави…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →