Grep для определенного текста из нескольких модулей kubernetes

У меня работают два модуля для конкретной службы. Я хочу получить журналы, относящиеся к обоим модулям, и проверить конкретный текст.

Для этого я использовал, как описано, здесь:

kubectl logs -l app=my-app -c my-app-container --since=25m | grep -i "search-text" |wc -l

Это ничего не выводит, даже если есть соответствующий текст для search-text

Потом попробовал с deployments

kubectl logs deployment/my-app-deployment -c my-app-container --since=90m | grep -i "search-text" |wc -l

Как я могу найти эту конкретную строку во всех связанных модулях?

kubectl logs my-pod-1 -c my-app-container --since=90m | grep -i "search-text" |wc -l, это дает правильный счет.

Использованная литература :

Получить все журналы из определенного контейнера в реплике установите
как получить журналы развертывания из кубернетов


person Sachith Muhandiram    schedule 17.02.2021    source источник
comment
можно сначала проверить вывод этого: kubectl logs -l app=my-app -c my-app-container --since=25m? возвращает ли он ожидаемые журналы?   -  person Krishna Chaurasia    schedule 17.02.2021
comment
@KrishnaChaurasia Да, есть выход.   -  person Sachith Muhandiram    schedule 17.02.2021
comment
вы можете использовать это, чтобы получить контейнеры для всех контейнеров, соответствующих метке: kubectl logs -l app=my-app --all-containers | grep "time" | wc   -  person Krishna Chaurasia    schedule 17.02.2021
comment
@KrishnaChaurasia Он дает 0 на выходе   -  person Sachith Muhandiram    schedule 17.02.2021
comment
не уверены, что может быть не так, проверьте, дает ли grep результат для какой-либо другой строки или нет, чтобы убедиться, что шаблон, который вы ищете, не требует экранирования с помощью `\`.   -  person Krishna Chaurasia    schedule 17.02.2021
comment
@KrishnaChaurasia Да, я проверил с DEBUG, я нашел кое-что интересное. grep -i "DEBUG" показывает больше записей, но когда я добавляю grep "time" | wc -l, всегда отображается 10   -  person Sachith Muhandiram    schedule 17.02.2021
comment
Давайте продолжим это обсуждение в чате.   -  person Krishna Chaurasia    schedule 17.02.2021
comment
@SachithMuhandiram Тебе удалось заставить его работать?   -  person Wytrzymały Wiktor    schedule 19.02.2021
comment
@ WytrzymałyWiktor Нет, все тот же   -  person Sachith Muhandiram    schedule 19.02.2021
comment
Понятно. Рассматривали ли вы возможность использования более мощного инструмента для отслеживания журналов, такого как Stern или Kubetail? Они так же просты в использовании, как и простой kubectl logs, и предоставляют больше возможностей, которые, как я вижу, могут удовлетворить ваш вариант использования.   -  person Wytrzymały Wiktor    schedule 19.02.2021
comment
@ WytrzymałyWiktor, к сожалению, это рабочий сервер, и для некоторых предупреждений это необходимо. Вот почему мы не можем использовать другие инструменты.   -  person Sachith Muhandiram    schedule 19.02.2021


Ответы (1)


kubectl logs можно просматривать журналы только одного модуля за раз. Однако вы можете использовать флаг -l, чтобы использовать селектор (запрос метки) для фильтрации. Например:

kubectl logs -l app=nginx -l app=php 

Используйте флаг -c, если вам нужно просмотреть логи контейнера. Дополнительные поддерживаемые флаги и примеры можно найти здесь.

Когда вы сможете просматривать журналы из желаемых модулей / контейнеров, пора использовать grep для фильтрации вывода. Например, я получил несколько логов из модуля:

~$ 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 up

и я хотел бы видеть только строки с конфигурацией слова, поэтому я выполняю:

$ kubectl logs nginx-app-b8b875889-4nn52 | grep configuration
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration

или если я хочу подсчитать строки со словом info, чем:

$ kubectl logs nginx-app-b8b875889-4nn52 | grep info |wc -l
2

Более подробную информацию можно найти в руководстве по grep. Имейте в виду, что если вы не укажете такие аргументы, как --since= или --tail= и модуль, журналы которого вы пытаетесь просмотреть, работает в течение некоторого более длительного периода времени, результаты могут вводить в заблуждение.

Обычно я также предлагаю использовать сторонние инструменты, такие как Stern или Kubetail, которые более эффективны, чем простые kubectl logs, но в вашем варианте использования сочетаются оба:

  • kubectl logs -l

а также:

  • | grep

это путь.

РЕДАКТИРОВАТЬ:

Также убедитесь, что вы используете нужные ресурсы. Из вашего вопроса кажется, что вы запускаете kubectl logs deployment/my-app-deployment, а затем kubectl logs my-pod-1 -c my-app-container, что не соответствует развертыванию my-app-deployment. Составьте список всех развертываний, модулей и меток, чтобы быть уверенным, что вы выбираете нужный ресурс. Использовать:

kubectl get deploy,pods --show-labels 
person Wytrzymały Wiktor    schedule 03.03.2021
comment
@SachithMuhandiram Я сделал небольшое изменение, которое может вас заинтересовать. Пожалуйста, взгляните. - person Wytrzymały Wiktor; 22.03.2021