Zobrazení protokolů Pod je často prvním krokem při diagnostice problému s pracovní zátěží vašeho clusteru. Zde je návod, jak použít Kubectl k živému streamování protokolů do vašeho terminálu, což vám umožní zkontrolovat výstup z vaší aplikace.
Začínáme
Ujistěte se, že máte Kubectl nainstalovaný a připojený ke svému clusteru. Soubor Kubeconfig můžete určit nastavením KUBECONFIG
proměnná prostředí ve vašem shellu:
export KUBECONFIG=~/.kube/my-cluster.yaml
Poté pomocí Kubectl vypište své Pody:
kubectl get pods
Nezapomeňte přidat --namespace
příznak, když vaše moduly žijí mimo výchozí jmenný prostor:
kubectl --namespace my-namespace get pods
Přidání dočasného aliasu do vašeho shellu je dobrý způsob, jak zkrátit tento krok, což vám pomůže spustit několik příkazů ve stejném jmenném prostoru:
alias k="kubectl --namespace my-namespace"
k get pods
Přístup k protokolům podu
kubectl logs
příkaz vám umožní zkontrolovat protokoly vytvořené pojmenovaným Pod:
kubectl logs pod-name
Stávající protokoly modulu budou odeslány do vašeho terminálu. Pokud je modul vytvořen z více než jednoho kontejneru, musíte také zadat název kontejneru, který chcete zkontrolovat:
kubectl logs pod-name container-name
Případně nastavte --all-containers
příznak zahrnout čáry log vytvořené kterýmkoli z kontejnerů v modulu. Pozor, můžete vidět podrobný a opakující se výstup, když je tento příznak použit proti zaneprázdněnému modulu:
kubectl logs pod-name --all-containers
Můžete také získat protokoly ze sady podů s daným štítkem. To vám umožní agregovat protokoly z různých modulů za předpokladu, že všechny sdílejí stejný štítek:
kubectl logs -l my-label=my-value --all-containers
Protokoly nepřetržitého streamování
Prostý logs
příkaz vygeneruje aktuálně uložené protokoly modulu a poté se ukončí. Přidejte -f
(--follow
) příznak k příkazu, abyste mohli sledovat protokoly a živě je streamovat do vašeho terminálu.
Kubectl bude vysílat každý nový řádek protokolu do vašeho terminálu, dokud příkaz nezastavíte pomocí Ctrl+C. To je ekvivalentní použití tail -f
se souborem místního protokolu v nekontejnerovém prostředí.
Zobrazení starších protokolů
kubectl logs
nezahrnuje klády vytvořené starými kontejnery, které byly kdysi členy Pod, ale od té doby byly nahrazeny. K těmto protokolům lze přistupovat přidáním -p
(--previous
) příznak.
Kubectl poté zobrazí celý uložený protokol pro Pod, včetně čar, které byly emitovány kontejnery, které byly mezitím ukončeny.
Získávání posledních protokolů
Někdy nemusíte vidět celý stream protokolu. Kubectl podporuje --since
příznak, který povrchy zaznamená řádky emitované po daném čase:
kubectl logs pod-name --since=2h
Tento příkaz zobrazí výstup protokolu z pod-name
který byl vyroben během posledních dvou hodin. Další varianta, --since-time
, podporuje řetězec časového razítka v souladu s RFC3339 namísto výrazu relativního času uvedeného výše.
--tail
příznak je další možností pro zhuštění protokolů. To omezuje počet zobrazených řádků, čímž se vyhnete plnému terminálu, když potřebujete vidět pouze velmi aktuální výstup:
# Shows the last 10 lines of the log
kubectl logs pod-name --tail=10
Kubectl ve výchozím nastavení nezobrazuje časová razítka linek, protože mnoho aplikací je již obsahuje ve svém protokolu. Přidejte --timestamps
příznak, aby Kubectl přidal časová razítka na začátek řádků, když je vaše zátěž neposkytuje.
Názvy kontrolovaných podů a kontejnerů můžete přidat také k řádkům protokolu. Tato funkce se aktivuje pomocí --prefix
vlajka. Lze jej kombinovat s --timestamps
pro zobrazení času vytvoření každého řádku a zdroje, ze kterého pochází.
Přístup k protokolům z jiných typů zdrojů
kubectl logs
pracuje se zdroji nasazení a úloh kromě modulů:
kubectl logs job/my-job
kubectl logs deployment/my-deployment
Získáte protokoly z prvního kontejneru v rámci úlohy nebo nasazení. Použijte --all-containers
příznak k povrchovým protokolům vytvořeným kterýmkoli z odpovídajících kontejnerů. Všechny výše popsané příznaky můžete použít, ať už si prohlížíte modul, nasazení nebo úlohu.
Pokročilejší správa protokolů
Kubectl nezahrnuje způsob, jak filtrovat, vyhledávat nebo transformovat vaše protokoly. Nejlepší je nasměrovat kubectl logs
výstup do zavedených terminálových nástrojů, jako je awk
, grep
nebo sed
pro tento účel.
kubectl logs my-pod | grep search-expression
Podobně použijte existující funkce přesměrování ve vašem prostředí k uložení protokolů do souboru:
kubectl logs my-pod > my-pod-logs.txt
Přehled
Kubectl vám umožňuje přistupovat k protokolům z vašich zdrojů buď na základě kontejnerů, nebo souhrnně. Můžete si zobrazit snímek aktuálně shromážděných protokolů, neustále streamovat nové linky do vašeho terminálu a přistupovat k historickým linkám vydávaným ukončenými kontejnery.
Příkaz je dodáván s některými omezenými možnostmi přizpůsobení, včetně omezovače počtu řádků a zjednodušeného filtrování data. Když je potřeba náročnější analýza, převeďte výstup do příkazů Unixového terminálu, abyste rychle analyzovali své protokoly a našli příčiny chyb ve vašich aplikacích.
Kubectl shromažďuje protokoly ze standardního výstupu a chybových proudů vašich kontejnerů. Je důležité zajistit, abyste výstup do těchto streamů zapsali správně, protože nesprávně nakonfigurovaný kontejner bude mít za následek prázdný výstup při spuštění kubectl logs
.