nginx — протоколирование PHP API-запроса информации из контейнера Docker

Я работаю над проектом, в котором у меня есть приложение iOs, подключающееся к PHP API. Я хочу регистрировать все входящие запросы к сервису веб-сайта для целей разработки (т.е. мне нужно решение, которое может быть отключено и основано на переменной среды). API запускается в контейнере Docker, который запускается как сервис Docker-Compose.

PHP API не использует какую-либо инфраструктуру MVC.

Мой опыт работы с PHP ограничен, поэтому я знаю, что у меня впереди кое-какие исследования, но в то же время я был бы признателен за любой переход к следующим вопросам:

  • Есть ли библиотека композиторов, которую я могу подключить к своему PHP-коду, который будет записывать в журнал?
  • Могу ли я подключить что-нибудь на nginx или же php-fpm уровень контейнера, чтобы запросы к этим контейнерам регистрировались еще до получения кода PHP?
  • Есть ли что-то, что мне нужно настроить в любом nginx или же php-fpm контейнеры, чтобы убедиться, что журналы следят, когда я запускаю docker-compose up?

Вот мои потребности регистрации:

  • метод запроса
  • URL запроса
  • ПОЛУЧИТЬ параметры запроса, параметры PUT и POST (они будут в формате JSON)
  • код ответа
  • тело ответа
    • Все логи, которые меня интересуют, — это application / json. Тем не менее, я не возражаю против варианта кухонной раковины, где что-либо выходит зарегистрировано.
  • заголовки запроса и ответа
    • Мне не понадобятся эти 99% времени, поэтому они не нужны. Но было бы неплохо настроить их вкл / вкл.

Ниже docker-compose.yml файл.

version: '2'
services:

gearman:
image:gearmand

redis:
image: redis

database:
image: mariadb
environment:
MYSQL_ROOT_PASSWORD: ******
MYSQL_DATABASE: database
volumes:
- dbdata:/var/lib/mysql
ports:
- 3306:3306

sphinx:
image:sphinx
links:
- database

memcached:
image: memcached
ports:
- "11211:11211"
php_fpm:
image:php-fpm
links:
- redis
- memcached
- database
environment:
REDIS_SERVER: redis
DATABASE_HOST: database
RW_DATABASE_HOST: database
RO_DATABASE_HOST0: database
DATABASE_USER: root
DATABASE_PASS: ******
volumes:
- ./website:/var/www/website/
- /var/run

nginx:
image:nginx
links:
- php_fpm
ports:
- "80:80"volumes_from:
- php_fpm

volumes:
dbdata:
driver: local

0

Решение

Контейнер регистрировал, используя все настройки по умолчанию, но мой клиент указывал на другой сервер, но только для того, чтобы оставить след.

Внутри php_fpm контейнера (docker exec -it dev_php_fpm_1 /bin/bash), вы можете cat /etc/php5/fpm/php.ini, который показывает настройки по умолчанию error_log:

; Log errors to specified file. PHP's default behavior is to leave this value
; empty.
; http://php.net/error-log
; Example:
;error_log = php_errors.log
; Log errors to syslog (Event Log on Windows).
;error_log = syslog

Просто пользователь функция error_log написать в логгер ОС по умолчанию.

Зарегистрируйте свой сервис php_fpm с docker logs -f -t dev_php_fpm_1,


Обновить:

В случае, если error_log урезан для ваших целей, вы также можете просто написать функцию

file_put_contents(realpath(dirname(__FILE__)) . './requests.log', $msg, FILE_APPEND);

и затем следите за этим: tail -f ./requests.log — либо изнутри контейнера, либо снаружи контейнера, если вы используете локальные тома.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector