NetworkAdmin.ru
4.77K subscribers
224 photos
26 videos
2 files
511 links
Авторский блог про сетевое и системное администрирование.

Сайт: networkadmin.ru
Реклама: @dad_admin
Биржа: https://telega.in/c/networkadminru
Download Telegram
✏️ Логи 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
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍2