По умолчанию Nginx ведёт логи в текстовом формате, но уже давно умеет писать их в JSON. Однако, в большинстве конфигураций всё ещё используются старые текстовые логи. Если вы до сих пор не перешли на 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:
jq '.' access.log
jq '.request' access.log
jq '. | select(.status=="404")' access.log
jq '. | select(.status=="404") | .request' access.log
jq '. | select(.status=="404") | .time_local, .request' access.log
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
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍2