Докер: вход из приложения и с сервера в одном контейнере

Я хочу использовать централизованное средство регистрации журналов, такое как Logentries, но я не хочу, чтобы его агент работал во всех моих контейнерах. Таким образом, я планирую для каждой службы входить в стандартный вывод своего контейнера, который затем передается Logentries через Docker API или контейнер регистрации.

Вопрос: Как мне обработать контейнер, который должен вывести два журнала? Как сохранить их чистыми и разделенными, не вводя другой механизм регистрации?

Сценарий: У меня есть приложение PHP, которое требует трех компонентов: Nginx, PHP-FPM и мой код. Я могу поместить Nginx и PHP-FPM в отдельные контейнеры Docker, чтобы у них были отдельные журналы, так что у нас все хорошо. Но мой PHP должен быть в том же контейнере, что и Nginx, чтобы его можно было обслуживать, верно?
Когда мое приложение должно что-то регистрировать (используя Монолог), Я могу отправить его на стандартный вывод контейнера (например, сделать файл журнала ссылкой на / dev / stdout), но тогда я не могу хранить отдельные журналы для Nginx и моего приложения.

Есть способ сделать это? Или я смотрю на это все неправильно? Есть ли лучший способ запустить Nginx + PHP в Docker?

2

Решение

Не найдя лучшего решения, я закончил вести журнал Laravel / Monolog в файле на смонтированном томе. Агент Logentries затем собирает журнал с хоста контейнера. Это позволяет моему контейнеру оставаться максимально чистым, поскольку я не устанавливаю Supervisor или агент ведения журнала, и это позволяет любому работающему контейнеру получать доступ к журналу с минимальными усилиями.

Ведение журнала в stdout оказалось невозможным, поскольку PHP-FPM переносит каждую строку выходных данных дочернего процесса, чтобы затруднить анализ, а в случае журналов JSON — совершенно бесполезный. (Увидеть https://groups.google.com/forum/#!topic/highload-php-en/VXDN8-Ox9-M)

1

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

Вы проверили Logentries Интеграция с докером?

0

Определенно возможно разделить ваше приложение на два контейнера, на самом деле это рекомендуемый способ сделать это (помните: один процесс на контейнер).

Просто используйте файл docker-compose.yml следующим образом (или запустите их вручную):

services:
app:
build: .
ports:
- 9000

nginx:
image: nginx
ports:
- "80:80"volumes:
- $PWD/nginx.conf:/etc/nginx/conf.d/default.conf

И файл nginx.conf, как это:

server {
listen  80;

location / {
try_files $uri /index.php$is_args$args;
}

location ~ ^/.+\.php(/|$) {
fastcgi_pass app:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}

Используя этот тип конфигурации, теперь у вас будет 2 контейнера, из которых вы можете управлять журналами отдельно, используя средства ведения журнала докера.

0
По вопросам рекламы [email protected]