Короткий ответ:
Если вы используете Docker, stdout
из каждого контейнера хранятся в /var/lib/docker/containers
. Но Kubernetes также создает структуру каталогов, чтобы помочь вам найти журналы на основе модулей, поэтому вы можете найти журналы контейнеров для каждого модуля, работающего на узле в /var/log/pods/<namespace>_<pod_name>_<pod_id>/<container_name>/
.
Подробный ответ:
Docker перехватывает журналы stdout
из каждого контейнера и сохраняет их в /var/lib/docker/containers
на хосте. Если Kubernetes использует Docker в качестве среды выполнения контейнера, Docker также будет хранить журналы контейнеров в этом месте на узле Kubernetes. Но поскольку мы не запускаем контейнеры непосредственно в Kubernetes (мы запускаем поды), Kubernetes также создает каталоги /var/log/pods/
и /var/log/containers
, чтобы помочь нам лучше организовать файлы журналов на основе подов.
В каждом каталоге внутри /var/log/pods/
хранятся журналы для одного пода, и каждый из них назван с использованием структуры <namespace>_<pod_name>_<pod_id>
.
Вы можете получить идентификатор пода, запустив kubectl get pod -n core gloo-76dffbd956-rmvdz -o jsonpath='{.metadata.uid}'
. Если вы привыкли использовать yq
, вам может показаться, что использовать kubectl get pod <pod_name> -o yaml | yq r - metadata.uid
проще.
В каждом каталоге /var/log/pods/<namespace>_<pod_name>_<pod_id>/
есть несколько каталогов, каждый из которых представляет собой контейнер в поде. Имя этих каталогов равно имени контейнера. Наконец, когда мы заглянем внутрь каталога /var/log/pods/<namespace>_<pod_name>_<pod_id>/<container_name>/
, мы найдем символические ссылки на файлы журналов, хранящиеся Docker внутри /var/lib/docker/containers
.
Точно так же внутри каталога /var/log/containers/
есть символические ссылки на каталог /var/log/pods/<namespace>_<pod_name>_<pod_id>/<container_name>/
. Эти символические ссылки именуются с использованием структуры <pod_name>_<namespace>_<container_id>
.
18.11.2019
LogPath
пусто. Вы знаете, если я пропускаю какой-то конфиг? Как я могу правильно установитьLogPath
? 21.12.2017docker inspect pod-or-sha | jq '.[0].HostConfig.LogConfig'
; отдельно, может быть даже интересно узнать, отличается ли он от остальных, так что:docker inspect $(docker ps -aq) | jq '.[].HostConfig.LogConfig'
22.12.2017.[0].HostConfig.LogConfig
устанавливается на{"Type": "journald","Config": {}}
22.12.2017/var/log/journal/$(cat /etc/machine-id)
, но это просто педантичный ответ, поскольку эти файлы являются двоичными; содержимое журнала доступно черезjournalctl -u ${container_unit}
, но у меня нет опыта, чтобы узнать, что такое${container_unit}
.systemctl list-units
должен предоставить имена единиц контейнера. 22.12.2017