LINUX.ORG.RU
решено ФорумAdmin

Nginx: определить что $upstream_status пуст

 ,


0

1

Есть система сбора логов, в которую отдаются логи Nginx в виде JSON.
В log_format используется

"upstream_status":$upstream_status

Всё хорошо когда в переменной действительно что-то есть(то есть запрос проходил через upstream).
Но когда переменная пустая (то есть запрос отработал без участия upstream) то JSON ломается и вообще всё становится плохо (мне нужно поле в виде числа, поэтому передавать в кавычках не подходит)

Чтобы это решить я склоняюсь использовать два разных шаблона log_format: with_upstream и without_upstream.
Соответственно в шаблоне without_upstream переменных upstream_* вообще не будет, поэтому JSON ломаться не будет и всё станет хорошо.

Для случаев с участием upstream конфиг получается вида:
access_log access.log with_upstream if=$upstream_status

Но как определить что запрос не проходил через upstream?
access_log access.log without_upstream if=???

Попробовал
map $upstream_status $need_log {
    "~^$" 1;
}

Но не взлетело. Посоветуйте же ваши советы

★★★★★

когда в переменной действительно что-то есть(то есть запрос проходил через upstream)

А что там есть? Число? А в каком диапазоне? Отрицательные бывают?

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

deep-purple ★★★★★
()
Ответ на: комментарий от deep-purple

Ну там просто HTTP код.
Засетить интересный вариант, но опасаюсь побочных эффектов, так как директив access_log несколько и ломать остальные логи это крайний случай.

zolden ★★★★★
() автор топика
Ответ на: комментарий от drsm

Блин, спасибо, вот это я тупанулперемудрил

zolden ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.