Извлечение данных мониторинга Stackdriver TimeSeries для модуля, работающего в кластере k8s в GKE, с помощью API REST - PullRequest
0 голосов
/ 18 сентября 2018

Моя цель - получить временные ряды метрики для модуля, работающего в кластере kubernetes в GKE, с помощью Stackdriver TimeSeries REST API .

Я гарантировал, что Stackdriver отслеживает иведение журнала включено в кластере kubernetes.

В настоящее время я могу получить временные ряды всех доступных ресурсов в кластере , используя следующий фильтр:

metric.type="container.googleapis.com/container/cpu/usage_time" AND resource.labels.cluster_name="<MY_CLUSTER_NAME>"

Чтобы получить временной ряд данного идентификатора модуля , я использую следующий фильтр:

metric.type="container.googleapis.com/container/cpu/usage_time" AND resource.labels.cluster_name="<MY_CLUSTER_NAME>" AND resource.labels.pod_id="<POD_ID>"

Этот фильтр возвращает HTTP 200 OK с пустым телом ответа.Я нашел идентификатор модуля из поля metadata.uid, полученного в ответе следующей команды kubectl:

kubectl get deploy -n default <SERVICE_NAME> -o yaml

Однако, когда я использую идентификатор модуля фонового контейнера , порожденногоот GKE / Stackdriver я получаю значения временных рядов.

Поскольку я могу видеть метрики Stackdriver моего модуля в пользовательском интерфейсе GKE, я считаю, что мне следует также получать значения метрик с помощью REST API.

Мои сомнения / вопросы:

  1. Правильно ли я получаю идентификатор Pod моего модуля, используя kubectl?
  2. Может ли быть какая-то проблема с настройкой / службой кластера?развертывание, из-за которого я не могу получить метрики?
  3. Есть ли другой способ получения временных рядов моего модуля с использованием API REST?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Правильно ли я выбираю идентификатор Pod моего модуля, используя kubectl?

Вы можете использовать JSONpath в качестве вывода с kubectl, в этом случае перебирая Pod и получаяполя metadata.name и metadata.uid:

kubectl get pods -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.metadata.uid}{"\n"}{end}'

, которые будут выводить что-то вроде этого:

nginx-65899c769f-2j775  d4fr5t6-bc2f-11e8-81e8-42010a84011f
nginx2-77b5c9d48c-7qlps 4f5gh6r-bc37-11e8-81e8-42010a84011f

Может быть некоторая проблема с настройкой моего кластера / развертыванием службыиз-за чего я не могу получить метрики?

Как упомянул @Rico в своем ответе, обращение в службу поддержки GCP может стать способом продвижения вперед, если вы не получите дальнейших сведений об устранении неполадок, см.ниже.

Есть ли какой-нибудь другой способ получения временного ряда моего модуля с помощью API REST?

Вы можете использовать Проводник API или МетрикиИсследователь из портала Stackdriver.Есть несколько хороших советов по устранению неполадок здесь со ссылкой на проводник API.В Stackdriver Metrics Explorer довольно просто собрать фильтр, который вы использовали, используя выпадающие списки, чтобы выбрать, например, конкретный pod_id.

, взятый из руководства по устранению неполадок руководства по мониторингу (ссылка выше) относительно пустого HTTP 200ответ на отфильтрованные запросы:

Если ваш вызов API возвращает код состояния 200 и пустой ответ, существует несколько возможностей:

  • Если ваш вызов использует фильтр, тогдафильтр может не соответствовать ничего.Соответствие фильтра чувствительно к регистру.Чтобы устранить проблемы с фильтрами, начните с указания только одного компонента фильтра, такого как metric.type, и посмотрите, получите ли вы результаты.Добавляйте другие компоненты фильтра по одному.
  • Если вы работаете с пользовательской метрикой, возможно, вы не указали проект, в котором определяется ваша пользовательская метрика. *

Я нашел эту ссылку при чтении документации API мониторинга.По этой ссылке вы попадете в проводник API с некоторыми предварительно заполненными полями, измените их соответствующим образом и добавите свой собственный фильтр.

В настоящее время я не тестировал больше с использованием API REST, но, надеюсь, это может продвинуть вас вперед.

0 голосов
/ 19 сентября 2018
  1. Я бы не стал полагаться на kubectl get deploy для идентификаторов pod.Я бы получил их с чем-то вроде kubectl -n default get pods | grep <prefix-for-your-pod> | awk '{print $1}'

  2. Я так не думаю, но лучший способ узнать это - открыть заявку в службу поддержки с GCP, если у вас есть какие-либо сомнения.

  3. Не то чтобы я знал, Stackdriver - это решение для мониторинга в GCP.Опять же, вы можете проверить с поддержкой GCP.Есть и другие инструменты, которые вы можете использовать для получения метрик из Kubernetes, такие как Prometheus .В Интернете есть несколько руководств по настройке Grafana на k8s.Это, например, one .

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

...