Uruchomienie kubectl logs
pokazuje mi stderr / stdout jednego kontenera Kubernetes.
Jak mogę uzyskać zagregowane stderr / stdout zestawu podów, najlepiej tych utworzonych przez określony kontroler replikacji?
logging
kubernetes
google-kubernetes-engine
Torsten Bronger
źródło
źródło
Odpowiedzi:
Możesz używać etykiet
źródło
--all-namespaces
.-f
teraz (od Kubernetes 1.12+ /kubectl
1.12+). Również @Shubham - wyświetla wiadomości w otrzymanej kolejności, nie ma tagów ani niczego w wierszach dziennika. Służy to tylko do szybkiego debugowania. Jeśli potrzebujesz więcej szczegółów dziennika, musisz wysłać swoje dzienniki do centralnego systemu rejestrowania, takiego jak EFK, SumoLogic, Datadog itp.Stworzyłem mały skrypt basha o nazwie,
kubetail
który to umożliwia. Na przykład, aby dostosować wszystkie dzienniki dla podów o nazwie „app1”, możesz wykonać:Możesz znaleźć skrypt tutaj .
źródło
brew tap johanhaleby/kubetail && brew install kubetail --with-short-names
szczegółową dokumentacją:kt -h
Niesamowite!Możesz pobrać dzienniki z wielu kontenerów, używając etykiet, jak zasugerował Adrian Ng:
W przypadku, gdy masz kapsułę z wieloma kontenerami, powyższe polecenie zakończy się niepowodzeniem i będziesz musiał określić nazwę kontenera:
Uwaga: jeśli chcesz zobaczyć, które etykiety są dla Ciebie dostępne, poniższe polecenie wyświetli je wszystkie:
... gdzie wynik będzie wyglądał mniej więcej tak
Pamiętaj, że niektóre etykiety mogą nie być udostępniane przez inne pody - wybranie „aplikacji” wydaje się najłatwiejsze
źródło
Aby oprzeć się na poprzedniej odpowiedzi, jeśli dodasz
-f
, możesz dostosować dzienniki.źródło
Wcześniej dostępne rozwiązania nie są optymalne. Sam zespół kubernetes dostarczył jakiś czas temu rozwiązanie o nazwie stern.
Dopasowuje również wyrażenia regularne i domyślnie wykonuje tail i -f (follow). Miłą zaletą jest to, że pokazuje on również kapsułę, która wygenerowała dziennik.
Pobierz plik binarny go-binary dla systemu Linux lub zainstaluj go przez brew dla OSX.
https://kubernetes.io/blog/2016/10/tail-kubernetes-with-stern/
https://github.com/wercker/stern
źródło
Używam tego prostego skryptu, aby uzyskać dziennik z podów wdrożenia:
Streszczenie scenariusza
Użycie: log_deployment.sh "nazwa-wdrożenia".
Skrypt wyświetli następnie dziennik wszystkich podów, które zaczynają się od tej „nazwy wdrożenia”.
źródło
Jedną z opcji jest skonfigurowanie rejestrowania klastra za pośrednictwem Fluentd / ElasticSearch, jak opisano na https://kubernetes.io/docs/user-guide/logging/elasticsearch/ . Gdy logi są w ES, można łatwo zastosować filtry w Kibanie, aby wyświetlić logi z niektórych kontenerów.
źródło
Możesz uzyskać pomoc od
kubectl logs -h
i według informacji,-c
to nazwa kontenera i--tail
pokaże najnowsze wiersze num ,, ale spowoduje to wybranie jednego zasobnika wdrożenia, a nie wszystkich zasobników. Należy o tym pamiętać.Jeśli chcesz wyświetlić dzienniki wszystkich podów, możesz użyć
-l
i określić etykietę, ale jednocześnie-f
nie będzie ona używana.źródło
Możesz to również zrobić za pomocą nazwy usługi.
Najpierw spróbuj znaleźć nazwę usługi odpowiedniego zasobnika, która odpowiada wielu zasobom tej samej usługi.
kubectl get svc
.Następnie uruchom następujące polecenie, aby wyświetlić dzienniki z każdego kontenera.
źródło
W tym przykładzie można zamienić
<namespace>
i,<app-name>
aby uzyskać dzienniki, gdy w poda jest zdefiniowanych wiele kontenerów.źródło
Jeśli strąki mają znaczącą nazwę, można użyć prostego zwykłego starego uderzenia:
Objaśnienie: Zapętlaj przeglądanie uruchomionych podów o nazwie zawierającej „nodejs”. Śledź dziennik każdego z nich równolegle (pojedynczy znak ampersand działa w tle), upewniając się, że jeśli którykolwiek z podów zawiedzie, całe polecenie zostanie zakończone (podwójny znak ampersand). Połącz strumienie z każdego z poleceń ogona w unikalny strumień. Eval jest potrzebny do uruchomienia tego dynamicznie budowanego polecenia.
źródło
Używam tego polecenia.
źródło
Nie jestem pewien, czy to nowa rzecz, ale w przypadku wdrożeń można to zrobić w następujący sposób:
źródło