Я хочу использовать централизованное средство регистрации журналов, такое как Logentries, но я не хочу, чтобы его агент работал во всех моих контейнерах. Таким образом, я планирую для каждой службы входить в стандартный вывод своего контейнера, который затем передается Logentries через Docker API или контейнер регистрации.
Вопрос: Как мне обработать контейнер, который должен вывести два журнала? Как сохранить их чистыми и разделенными, не вводя другой механизм регистрации?
Сценарий: У меня есть приложение PHP, которое требует трех компонентов: Nginx, PHP-FPM и мой код. Я могу поместить Nginx и PHP-FPM в отдельные контейнеры Docker, чтобы у них были отдельные журналы, так что у нас все хорошо. Но мой PHP должен быть в том же контейнере, что и Nginx, чтобы его можно было обслуживать, верно?
Когда мое приложение должно что-то регистрировать (используя Монолог), Я могу отправить его на стандартный вывод контейнера (например, сделать файл журнала ссылкой на / dev / stdout), но тогда я не могу хранить отдельные журналы для Nginx и моего приложения.
Есть способ сделать это? Или я смотрю на это все неправильно? Есть ли лучший способ запустить Nginx + PHP в Docker?
Не найдя лучшего решения, я закончил вести журнал Laravel / Monolog в файле на смонтированном томе. Агент Logentries затем собирает журнал с хоста контейнера. Это позволяет моему контейнеру оставаться максимально чистым, поскольку я не устанавливаю Supervisor или агент ведения журнала, и это позволяет любому работающему контейнеру получать доступ к журналу с минимальными усилиями.
Ведение журнала в stdout оказалось невозможным, поскольку PHP-FPM переносит каждую строку выходных данных дочернего процесса, чтобы затруднить анализ, а в случае журналов JSON — совершенно бесполезный. (Увидеть https://groups.google.com/forum/#!topic/highload-php-en/VXDN8-Ox9-M)
Вы проверили Logentries Интеграция с докером?
Определенно возможно разделить ваше приложение на два контейнера, на самом деле это рекомендуемый способ сделать это (помните: один процесс на контейнер).
Просто используйте файл 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 контейнера, из которых вы можете управлять журналами отдельно, используя средства ведения журнала докера.