Cómo monitorear los registros de pods de Kubernetes en tiempo real con Stern

Stern es una herramienta de código abierto que facilita la transmisión de registros de Kubernetes en tiempo real a su terminal. Puede usar Stern para monitorear registros de múltiples contenedores simultáneamente, lo que le brinda una vista combinada de la actividad dentro de los pods.

Índice de contenidos
  1. ¿Por qué usar popa?
  2. Empezando
  3. Uso básico
  4. Consultas de pods
  5. Filtrado basado en el estado del contenedor
  6. Filtrado de líneas de registro individuales
  7. Uso de plantillas de salida
  8. Resumen

¿Por qué usar popa?

Kubectl ofrece seguimiento de registros integrado utilizando el kubectl logs dominio. Aunque esto puede funcionar bien en casos simples, carece de soporte para agregar registros de múltiples fuentes con un mayor filtrado de los resultados. Esto puede hacer que sea engorroso de usar cuando necesita monitorear varios Pods o está trabajando con datos detallados.

imagen de la herramienta de visor de registros de Kubernetes, Stern

Stern ofrece una experiencia de registros de Kubernetes con soporte de primera clase para múltiples pods y contenedores. Cada contenedor en su flujo de registro tiene un color único para que pueda identificar rápidamente las líneas que se desplazan frente a usted. Stern le permite seleccionar los Pods para incluir mediante consultas complejas creadas a partir de expresiones regulares.

También hay capacidades de filtrado integradas para seleccionar registros según la marca de tiempo, el estado del contenedor y el selector de Kubernetes. En este artículo, le mostraremos cómo usar todas estas funciones para acelerar el acceso a sus registros de Kubernetes.

Empezando

Stern se distribuye como binarios precompilados para Windows, macOS y Linux en la página de versiones de GitHub del proyecto. Seleccione la descarga apropiada para su sistema y agregue el binario a su PATH. Los usuarios de macOS pueden optar por instalar a través de Homebrew en su lugar ejecutando brew install stern.

Stern usa sus archivos de configuración de Kubernetes existentes para conectarse a su clúster. Por defecto se cargará .kube/config. Utilizar el --kubeconfig marcar o establecer el KUEBCONFIG variable de entorno si necesita cambiar esta ruta.

Los contextos de Kubernetes también se admiten a la perfección. Añade el --context bandera para especificar un contexto particular dentro de su archivo de configuración actualmente cargado. También puede utilizar el --namespace marca para seleccionar manualmente un espacio de nombres en su clúster. Stern solo seguirá los registros de los objetos dentro del contexto y el espacio de nombres indicados; la --all-namespaces El indicador se puede usar para transmitir registros de todo el clúster.

Uso básico

La sintaxis básica de Stern solo necesita un argumento:

stern api-server

Proporcione un nombre de pod para transmitir registros que se originen en contenedores en ese pod. Sin embargo, este uso desmiente el verdadero poder de Stern; el nombre del Pod es solo un ejemplo de un consulta de pod.

Consultas de pods

Stern utiliza consultas de Pod para determinar los flujos de registros que emergen. Las consultas son expresiones regulares para que pueda ensamblar selecciones avanzadas de pods utilizando la sintaxis estándar.

los stern api-server ejemplo anterior coincidirá con cualquier Pod que contenga api-server en su nombre Si cambiaste esto a stern .*-serververía registros que se originan en todos sus pods con nombres que terminan en -server. Esto le permite ensamblar rápidamente flujos de registro que agregan líneas de múltiples componentes en su pila.

Las consultas solo afectan al vainas que son seleccionados. Stern incluye automáticamente registros de todos los contenedores dentro de esos Pods. Puede controlar esto usando el opcional --container indicador que acepta otra expresión regular que define nombres de contenedores aceptables para incluir.

stern .*-server --container .*-0

De manera similar, puede excluir contenedores específicos usando el --exclude-container bandera y una expresión regular:

stern .*-server --exclude-container .*-helper

Los selectores de etiquetas también son compatibles. Selecciona el --selector marca con una expresión regular que define etiquetas con las que hacer coincidir los Pods. Esto por defecto es .*incluidos todos los pods que coincidan con la consulta original.

stern .*-server --selector app-version=v1.*

Filtrado basado en el estado del contenedor

Por defecto, Stern solo muestra los registros de los contenedores en ejecución. Utilizar el --container-state bandera para obtener líneas registradas por contenedores en un estado diferente. es compatible running, waitingy terminated parámetros:

# Show logs from stopped containers
stern .*-server --container-state terminated

Filtrado de líneas de registro individuales

Una vez que haya seleccionado el conjunto correcto de pods y contenedores, puede pasar a filtrar los datos de registro reales. Stern le brinda algunas opciones para reducir el ruido y ayudarlo a concentrarse en datos significativos:

  • --since - Obtenga registros escritos dentro de un marco de tiempo relativo legible por humanos, ya que como 5m o 1h.
  • --tail - Obtenga muchas de estas líneas de registro para empezar. Predeterminado a -1 (sin límite), por lo que su terminal se llena con todos los registros preexistentes antes de que comience la salida con cola en vivo.
  • --exclude - Excluir líneas de registro que coincidan con esta expresión regular. Puede usar esta bandera varias veces; las condiciones se combinarán como una cláusula "y" lógica.

Este es un ejemplo de obtención de una selección limitada de registros significativos recientes de un servicio web:

stern web-server --since 1h --tail 100 --exclude .*GET /robots.txt.*

Uso de plantillas de salida

Stern normalmente presenta líneas de registro utilizando el siguiente formato:

<namespace name> <pod name> <container name> <original log line>

Este formato es personalizable usando el --template bandera. Se admite la sintaxis de plantillas Go para acceder a la Namespace, PodName, ContainerNamey Message variables dentro de su formateador:

stern .*-server --template 'Namespace: {{.Namespace}} Pod: {{.PodName}} - {{.Message}}'

A veces, es posible que desee leer las líneas de registro sin ningún formato adicional. Usando --output raw mostrará los mensajes sin formato tal cual, produciendo un resultado similar al de Kubectl.

Una opción alternativa es --output json para obtener datos de registro en un formato que sea más adecuado para el consumo programático. Emitirá una secuencia de objetos JSON con message, namespace, podNamey containerName propiedades.

Stern puede anteponer automáticamente marcas de tiempo a cada línea de registro si incluye el --timestamps bandera. Esto está desactivado de forma predeterminada, ya que muchos servidores populares agregan esta información ellos mismos, antes de que se emita un mensaje.

Finalmente, Stern apoya una --color indicador que se puede usar para forzar o deshabilitar el uso de salida coloreada. acepta auto, nevero always como su valor. La última opción es útil si el programa no detecta correctamente el TTY de su shell.

Resumen

Stern es una herramienta de conveniencia de Kubernetes que hace que los registros de Pod sean más útiles y accesibles. Puede controlar fácilmente múltiples Pods y contenedores con su salida coloreada, selectores complejos y formatos de salida personalizables.

Stern está diseñado para seguimiento de registros en tiempo real como parte de un proceso activo de depuración o monitoreo. Si está buscando agregación, indexación y almacenamiento a largo plazo, generalmente es mejor integrar un sistema de observabilidad dedicado con su clúster. Las plataformas como Prometheus y Elastic Stack brindan capacidades de inspección histórica para aumentar las transmisiones de registros en vivo que muestra Stern.

Descubre más contenido

Subir Change privacy settings