У меня есть базовое развертывание nginx, обслуживающее статический контент, работающий в кластере GKE. Я настроил ведение журнала Stackdriver для кластера в соответствии с инструкциями здесь (я включил ведение журнала для существующего кластера), а также включил функцию мониторинга Stackdriver Kubernetes, объясненную здесь . Кажется, что само ведение журнала работает нормально, поскольку я вижу журналы из nginx в Stackdriver.
Я пытаюсь создать некоторые метрики на основе журнала, например количество выполненных запросов 2xx, но все, что я получаю в записях журнала в Stackdriver, - это поле textPayload
. Насколько я понимаю, включение Stackdriver Monitoring в кластере раскручивает некоторые агенты Fluentd (что я вижу, если я запускаю kubectl get pods -n kube-system
), и у них должен быть по умолчанию включен анализатор журнала nginx (согласно документации здесь ). Однако ни одна из записей журнала, отображаемых в Stackdriver, не имеет поля jsonPayload
, которое должно быть там для структурированных журналов.
Я использую стандартную log_format
конфигурацию для nginx и проверил, что стандартный синтаксический анализатор nginx может анализировать журналы, которые пишет мое приложение (я скопировал регулярное выражение плагина анализатора Fluentd nginx по умолчанию и запись в журнале от моего приложения до этого инструмента и он смог разобрать запись)
Я уверен, что что-то упустил, но не могу понять, что.
Edit:
Для справки, вот мой формат журнала NGINX:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent"';
И я до сих пор пробовал следующее:
- Обновите мой кластер k8s с версии 1.11.5 до 1.11.6 (из-за проблемы со структурированным ведением журнала в версии 1.11.4, которая была исправлена в 1.11.6)
- Понижение с версии 1.11.6 до 1.11.3
- Создайте новый кластер с консолью GCP (версия 1.10.9) с включенными опциями Stackdriver Monitoring и Stackdriver Logging и разверните на нем мое приложение. По-прежнему нет
jsonPayload
поля, только textPayload
.
Пока что ни один из них не решил это.