Извлечь столбец событий k8s c столбец - PullRequest
0 голосов
/ 06 января 2020

Я устраняю неисправности датчиков живучести. Я могу извлечь определенные c записи из события k8s, используя этот подход

k get events --sort-by=.metadata.creationTimestamp | grep Liveness

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

Где я могу найти разделитель, относящийся к этому указанному ресурсу c k8s (События) распечатать вывод kubectl?

Любое другое предложение приветствуется

ОБНОВЛЕНИЕ, пока это лучшие варианты (без использования дополнительных инструментов), удовлетворяющие моим конкретным c потребностям:

k get events -o jsonpath='{range .items[*]}{.involvedObject.name}/{.involvedObject.namespace}: {.message}{"\n"}{end}' | grep Liveness

k get events -o custom-columns=POD:.involvedObject.name,NS:.involvedObject.namespace,MGG:.message | grep Liveness

Ответы [ 3 ]

2 голосов
/ 07 января 2020

в kubernetes есть функция под названием jsonpath

проверить, правильно ли ваш jsonpath указан с помощью этого онлайн-инструмента: https://jsonpath.com/

легко go - json с помощью этого онлайн-инструмента, поэтому вам больше не нужно вводить имена ключей вручную): http://jsonpathfinder.com/

, поэтому ваша команда будет:

k get events --sort-by=.metadata.creationTimestamp --jsonpath '{ .xxxxxx }' 

enter image description here enter image description here

1 голос
/ 07 января 2020

Jsonpath немного ограничен для использования с фильтром и условиями, возможно, для вашего случая jq будет более подходящим.

Я провел тест, используя jq, чтобы отфильтровать выходные данные моего зонда. : Я тестировал использование yaml из этой ссылки

Сообщение об ошибке зонда из этого модуля:

Ошибка проверки жизнеспособности: cat: can ' t открыть '/ tmp / healthy': такого файла или каталога нет

, а путь к этому сообщению в json равен .items[*].message

Использование jq Я могу отфильтровать только message, который содержит «Ошибка проверки работоспособности»: и показывает имя модуля:

k get events --sort-by=.metadata.creationTimestamp -o json | jq -c '.items[] | select(.message|test("Liveness probe failed")) | .metadata.name'

Выход:

"liveness-exec.15e791c17b80a3c1"

Вы можете использовать jq для форматирования сообщения чтобы получить более полезный вывод, с подробностями о пакете.

Попробуйте посмотреть ссылки:

. / jq

фильтровать массив по значениям

Надеюсь, это поможет!

0 голосов
/ 06 января 2020

Вы пытались изменить тип вывода? Если вы используете JSON output («- o json» в конце строки.), Вы можете справиться со своими потребностями, используя небольшой код python.

kubectl get event -n kube-system -o json

Если вы найдете модуль в столбце «ОТ», вы можете показать сообщения.

...