Tengo dos pods ejecutándose para un servicio específico. Quiero obtener registros relacionados con ambos pods y buscar texto específico.
Para eso usé, como se describe aquí :
kubectl logs -l app=my-app -c my-app-container --since=25m | grep -i "search-text" |wc -l
Esto no genera nada, aunque hay texto coincidente para el texto de search-text
Luego probé con deployments
kubectl logs deployment/my-app-deployment -c my-app-container --since=90m | grep -i "search-text" |wc -l
¿Cómo puedo buscar esta cadena específica en todos los pods relacionados?
kubectl logs my-pod-1 -c my-app-container --since=90m | grep -i "search-text" |wc -l , esto da la cuenta adecuada.
Referencias :
Obtenga todos los registros de un contenedor específico en un conjunto de réplicas
cómo obtener registros de implementación de kubernetes
kubectl logs se limitan a ver los registros de un solo pod a la vez. Sin embargo, puede usar el indicador -l para usar un selector (consulta de etiqueta) para filtrar. Por ejemplo:
kubectl logs -l app=nginx -l app=php Use el indicador -c si necesita ver los registros del contenedor. Se pueden encontrar más banderas y ejemplos compatibles aquí .
Cuando pueda ver los registros de los pods/contenedores deseados, es hora de usar grep para filtrar la salida. Por ejemplo, obtuve algunos registros de un Pod:
~$ kubectl logs nginx-app-b8b875889-4nn52 /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Configuration complete; ready for start upy me gustaría ver solo líneas con la palabra "configuración", así que ejecuto:
$ kubectl logs nginx-app-b8b875889-4nn52 | grep configuration /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configurationo si me gustaría contar líneas con la palabra "info" que:
$ kubectl logs nginx-app-b8b875889-4nn52 | grep info |wc -l 2 Se pueden encontrar más detalles en el manual de grep . Tenga en cuenta que si no especifica argumentos como --since= o --tail= y el pod desde el que intenta ver los registros se está ejecutando durante un período de tiempo más largo, los resultados pueden ser engañosos.
Normalmente, también sugeriría usar herramientas de terceros como Stern o Kubetail , que son más poderosas que los simples kubectl logs pero en su caso de uso combina ambas:
kubectl logs -ly:
| grepes el camino a seguir.
EDITAR:
También asegúrese de obtener los recursos adecuados. Según su pregunta, parece que ejecuta kubectl logs deployment/my-app-deployment y kubectl logs my-pod-1 -c my-app-container que no corresponde a la my-app-deployment deployment. Enumere todas las implementaciones, pods y etiquetas para estar seguro de que selecciona el recurso correcto. Usar:
kubectl get deploy,pods --show-labels