Запуск kubectl logs
показывает мне stderr / stdout одного контейнера Kubernetes.
Как я могу получить агрегированный stderr / stdout набора модулей, предпочтительно созданных определенным контроллером репликации?
logging
kubernetes
google-kubernetes-engine
Торстен Бронгер
источник
источник
Ответы:
Вы можете использовать ярлыки
источник
--all-namespaces
.-f
сейчас (начиная с Kubernetes 1.12+ /kubectl
1.12+). Также @Shubham - он отображает сообщения в порядке получения, в строках журнала нет тегов или чего-либо еще. Это просто для быстрой отладки. Если вам нужны более подробные сведения о журнале, вам необходимо отправить свои журналы в центральную систему журналов, такую как EFK, SumoLogic, Datadog и т. Д.Я создал небольшой сценарий bash,
kubetail
который делает это возможным. Например, чтобы отслеживать все журналы для модулей с именем «app1», вы можете:Вы можете найти сценарий здесь .
источник
brew tap johanhaleby/kubetail && brew install kubetail --with-short-names
подробной документации:kt -h
Отлично!Вы можете получить журналы из нескольких контейнеров, используя метки, как предложил Адриан Нг:
Если у вас есть модуль с несколькими контейнерами, указанная выше команда завершится ошибкой, и вам нужно будет указать имя контейнера:
Примечание. Если вы хотите увидеть, какие метки вам доступны, следующая команда перечислит их все:
... где результат будет выглядеть примерно так
Обратите внимание, что некоторые ярлыки могут не использоваться другими модулями - выбор «приложение» кажется самым простым.
источник
Чтобы опираться на предыдущий ответ, если вы добавите,
-f
вы можете отслеживать журналы.источник
Предоставленные ранее решения не так оптимальны. Сама команда kubernetes некоторое время назад предложила решение под названием stern.
Он также соответствует регулярным выражениям и по умолчанию выполняет tail и -f (follow). Приятным преимуществом является то, что он показывает вам модуль, который также создал журнал.
Возьмите go-binary для Linux или установите через brew для OSX.
https://kubernetes.io/blog/2016/10/tail-kubernetes-with-stern/
https://github.com/wercker/stern
источник
Я использую этот простой сценарий, чтобы получить журнал из модулей развертывания:
Суть сценария
Использование: log_deployment.sh «имя-развертывания».
Затем скрипт покажет журнал всех модулей, которые начинаются с этого «имя-развертывания».
источник
Один из вариантов - настроить ведение журнала кластера через Fluentd / ElasticSearch, как описано на https://kubernetes.io/docs/user-guide/logging/elasticsearch/ . Как только журналы находятся в ES, в Kibana легко применять фильтры для просмотра журналов из определенных контейнеров.
источник
Вы можете получить помощь от
kubectl logs -h
и в соответствии с информацией,-c
- это имя контейнера, и--tail
будет отображаться последнее число строк ,, но при этом будет выбран один модуль развертывания, а не все модули. Об этом нужно помнить.Если вы хотите показать журналы всех модулей, вы можете использовать
-l
и указать метку, но в то же время-f
она не будет использоваться.источник
Вы также можете сделать это по имени службы.
Сначала попробуйте найти имя службы соответствующего модуля, которое соответствует нескольким модулям одной службы.
kubectl get svc
,Затем выполните следующую команду, чтобы отобразить журналы из каждого контейнера.
источник
В этом примере вы можете заменить
<namespace>
и,<app-name>
чтобы получить журналы, когда в Pod определено несколько контейнеров.источник
Если поды названы осмысленно, можно использовать простой Plain Old Bash:
Explanation: Цикл по запущенным модулям с именем, содержащим "nodejs". Ведите журнал для каждого из них параллельно (одиночный амперсанд работает в фоновом режиме), гарантируя, что в случае сбоя любого из модулей вся команда завершится (двойной амперсанд). Объедините потоки каждой из хвостовых команд в уникальный поток. Eval необходим для запуска этой динамически созданной команды.
источник
Я использую эту команду.
источник
Не уверен, что это что-то новое, но с развертыванием можно сделать это так:
источник