LINUX.ORG.RU

Писать логи из docker на хост

 , ,


1

2

Как писать логи из докера наружу? Самое простое решение — запускать его командой

docker run  --mount=type=bind,source=/var/log/apache2/,destination=/var/log/apache2-docker/ {image_name}

А что будет, если одновременно запустить несколько экземпляров? Будут писать в один файл вперемешку? Или как-то разрулят?

И умеет ли syslog-ng штатно обслуживать такую ситуацию, когда несколько виртуальных машин пишут логи на хост? По каким ключевым словам искать? А то я не могу определить, когда документация говорит о логах самого Докера, а когда о логах программ в гостевой системе.

★★

Это не виртуальная машина, выбрось докер на помойку, перекрестись и в chroot поставь что тебе нужно, создай каталоги v1_log v2_log v3_log и смонтируй их в /var чрутов mount -o bind /home/v1_log/ /home/$USER/chroot1/var и так далее

Deleted ()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от MadMax

https://docs.docker.com/v17.09/engine/admin/logging/view_container_logs/

После длительной совместной медитации над этой страницей, мы с коллегами пришли к выводу, что страница — про логи самого докера, и к логам приложений в нём отношения не имеет. Мы ошиблись?

Писать лог Апача в stdout из докера не проблема. Но как его потом ловить syslog-ом хоста?

olegd ★★ ()
Ответ на: комментарий от Pyzia

docker != виртуальная машина

Для рассматриваемого вопроса разница непринципиальна. Как его обозвать, чтобы все поняли? И главное, как выкладывать наружу логи?

olegd ★★ ()

А что будет, если одновременно запустить несколько экземпляров?

Проверь. ) Или первый залочит файл и будет писать единолично, или кашу всей толпой запишут.

И умеет ли syslog-ng штатно обслуживать такую ситуацию, когда несколько виртуальных машин пишут логи на хост?

С каких пор этот набор костылей над cgroups и chroot смог запускать виртуальные машины? И при чём тут сислог? Ты же напрямую собрался монтировать директорию для каждого контейнера и писать изнутри? Сислог про это ничего даже не узнает.

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

shell-script ★★★★★ ()
Последнее исправление: shell-script (всего исправлений: 1)
Ответ на: комментарий от shell-script

Проверь.

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

И можно ли в начале каждой строки лога добавлять, например, имя хоста? «Каша», где строки с разных машин чётко различаются была бы идеальным вариантом.

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

Про логи апача ищи документацию по 'apache logformat', я сейчас конфигов на память не помню.

А под кашей я имел ввиду то, что возможна ситуация, что у тебя строки смешаются. Но надо проверять.

shell-script ★★★★★ ()

Или как-то разрулят?

Нет, не разрулят. Магии нет, и код будет работать так, как написан.

Скорее всего, код не был написан с расчётом на твой сценарий, поэтому записи могут быть вразнобой. Если повезёт, то каждая отдельная строчка будет записана каким-то одним процессом. Если не повезёт, строчки могут быть перемешаны: начало строки от одного процесса, потом туда вклинивается запись от другого. Парсить это нормально ты не сможешь.

На случай «я попробовал, и у меня всё нормально»: многопоточные программы тоже работают, если из них мьютексы убрать. Большую часть времени даже нормально.

i-rinat ★★★★★ ()

Чем апач принципиально отличается от любого другого приложения с логами?

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

gadzira ()