Como monitorar logs de pods do Kubernetes em pace actual com Stern
Stern é uma ferramenta de código aberto que facilita o streaming de logs do Kubernetes em pace actual para o seu terminal. Você pode usar o Stern para monitorar logs de vários contêineres simultaneamente, oferecendo uma visão combinada da atividade dentro dos pods.
Por que usar Stern?
O Kubectl oferece tailing de log integrado usando o kubectl logs
comando. Embora isso possa funcionar bem em casos simples, não há suporte para agregar logs de várias fontes com filtragem adicional dos resultados. Isso pode dificultar o uso quando você precisar monitorar vários pods ou estiver trabalhando com dados detalhados.
A Stern oferece uma experiência de logs do Kubernetes com suporte de primeira classe para vários pods e contêineres. Cada contêiner em seu fluxo de log é colorido de forma exclusiva para que você possa identificar rapidamente as linhas rolando à sua frente. Stern permite selecionar os pods a serem incluídos usando consultas complexas criadas a partir de expressões regulares.
Também há recursos de filtragem integrados para selecionar logs com base no carimbo de knowledge/hora, standing do contêiner e seletor do Kubernetes. Neste artigo, mostraremos como usar todos esses recursos para acelerar o acesso aos seus logs do Kubernetes.
Começando
Stern é distribuído como binários pré-compilados para Home windows, macOS e Linux na página de lançamentos do GitHub do projeto. Selecione o obtain apropriado para o seu sistema e adicione o binário ao seu PATH
. Os usuários do macOS podem optar por instalar by means of Homebrew executando brew set up stern
.
Stern u.s. seus arquivos de configuração existentes do Kubernetes para se conectar ao seu cluster. Será o padrão para carregar .kube/config
. Use o --kubeconfig
sinalizar ou definir o KUEBCONFIG
variável de ambiente se precisar alterar esse caminho.
Os contextos do Kubernetes também são perfeitamente suportados. Adicione o --context
sinalizador para especificar um contexto específico em seu arquivo de configuração carregado atualmente. Você também pode usar o --namespace
sinalizador para selecionar manualmente um namespace em seu cluster. Stern irá apenas finalizar logs de objetos dentro do contexto e namespace indicados; a --all-namespaces
sinalizador pode ser usado para transmitir logs de todo o cluster.
Uso básico
A sintaxe básica de Stern precisa de apenas um argumento:
stern api-server
Forneça um nome de pod para transmitir logs originados de contêineres nesse pod. Este uso desmente o verdadeiro poder de Stern; o nome do pod é apenas um exemplo de consulta de pod.
Consultas de pod
Stern u.s. consultas de pod para determinar os fluxos de log a serem exibidos. As consultas são expressões regulares para que você possa montar seleções avançadas de pods usando a sintaxe padrão.
o stern api-server
exemplo acima corresponderá a qualquer Pod contendo api-server
em seu nome. Se você mudou isso para stern .*-server
você verá logs originados de todos os seus pods com nomes que terminam em -server
. Isso permite que você monte rapidamente fluxos de log que agregam linhas de vários componentes em sua pilha.
As consultas afetam apenas o Pods que são selecionados. Stern inclui automaticamente os logs de todos os contêineres nesses Pods. Você pode controlar isso usando o opcional --container
sinalizador que aceita outro regex definindo nomes de contêiner aceitáveis para incluir.
stern .*-server --container .*-0
Da mesma forma, você pode excluir contêineres específicos usando o --exclude-container
flag e um regex:
stern .*-server --exclude-container .*-helper
Seletores de rótulo também são suportados. Colocou o --selector
sinalizador com um regex definindo rótulos para corresponder aos pods. Este padrão para .*
incluindo todos os pods que correspondem à consulta unique.
stern .*-server --selector app-version=v1.*
Filtragem com base no estado do contêiner
O padrão Stern mostra apenas os logs dos contêineres em execução. Use o --container-state
sinalizador para obter linhas registradas por contêineres em um estado diferente. Ele suporta operating
, ready
e terminated
parâmetros:
# Display logs from stopped boxes stern .*-server --container-state terminated
Filtrando Linhas de Log Individuais
Depois de selecionar o conjunto certo de pods e contêineres, você pode passar para a filtragem dos dados de log reais. Stern oferece algumas opções para reduzir o ruído e ajudá-lo a se concentrar em dados significativos:
--since
– Obtenha logs escritos dentro de um período de pace relativo legível por humanos, já que5m
ou1h
.--tail
– Obtenha muitas dessas linhas de log para começar. Padrões para-1
(sem limite), então seu terminal é preenchido com todos os logs pré-existentes antes que a saída de cauda ao vivo comece.--exclude
– Excluir linhas de log que correspondam a essa expressão common. Você pode usar esse sinalizador várias vezes; as condições serão combinadas como uma cláusula lógica “e”.
Veja um exemplo de busca de uma seleção limitada de logs significativos recentes de um serviço da cyber web:
stern web-server --since 1h --tail 100 --exclude .*GET /robots.txt.*
Usando modelos de saída
Stern normalmente apresenta linhas de log usando o seguinte formato:
<namespace identify> <pod identify> <container identify> <unique log line>
Este formato é personalizável usando o --template
bandeira. A sintaxe de template Cross é suportada para acessar o Namespace
, PodName
, ContainerName
e Message
variáveis dentro do seu formatador:
stern .*-server --template 'Namespace: .Namespace Pod: .PodName - .Message'
Às vezes, você pode querer ler as linhas de log sem nenhuma formatação further. Usando --output uncooked
mostrará as mensagens simples como estão, produzindo uma saída semelhante ao Kubectl.
Uma opção alternativa é --output json
para obter dados de log em um formato mais adequado para consumo programático. Ele emitirá um fluxo de objetos JSON com message
, namespace
, podName
e containerName
propriedades.
Stern pode anexar automaticamente carimbos de knowledge e hora a cada linha de log se você incluir o --timestamps
bandeira. Isso está desativado por padrão, pois muitos servidores populares adicionam essas informações antes que uma mensagem seja emitida.
Finalmente, Stern apoia um --color
sinalizador que pode ser usado para forçar ou desabilitar o uso de saída colorida. Ele aceita auto
, by no means
ou at all times
como seu valor. A última opção é útil se o programa não detectar corretamente o TTY do seu shell.
Resumo
Stern é uma ferramenta de conveniência do Kubernetes que torna os logs do Pod mais úteis e acessíveis. Você pode facilmente manter abas em vários pods e contêineres com sua saída colorida, seletores complexos e formatos de saída personalizáveis.
Stern é projetado para rastreamento de log em pace actual como parte de um processo ativo de depuração ou monitoramento. Se você estiver procurando agregação, indexação e armazenamento de longo prazo, geralmente é melhor integrar um sistema de observabilidade dedicado ao seu cluster. Plataformas como Prometheus e Elastic Stack fornecem recursos de inspeção histórica para aumentar os fluxos de log ao vivo mostrados por Stern.
Fonte da Notícia: www.howtogeek.com