Может ли метрика подсчета ответов AppEngine быть сгруппирована по классу ответов?

# #google-cloud-platform #stackdriver #google-cloud-monitoring #monitoring-query-language

Вопрос:

Я пытаюсь создать предупреждение на CGP/stackdriver, используя метрику http/server/response_count для app engine. В этой метрике есть поле response_code, которое я могу сгруппировать по:

 fetch gae_app::appengine.googleapis.com/http/server/response_count
| filter metric.response_code>=500 amp;amp; metric.response_code<600
| every 10m
| group_by [metric.response_code], sum(val())
 

Но, скажем, я хочу объединить все 500 ответов в классе ответов 5xx, а затем объединить в один счетчик для диапазона, можно ли предварительно обработать, чтобы group_by в приведенном выше примере дал один временной ряд, например 5xx? Я заметил, что в одной из метрик балансировщика нагрузки есть «класс response_code_class» такого рода, но это недоступно для этой метрики.

После этого я ищу соотношение 5xx запросов ко всем запросам, возможно ли это вообще с помощью этой метрики?

Ответ №1:

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

 fetch gae_app::appengine.googleapis.com/http/server/response_count
| group_by [metric.response_code],
    sum(if(response_code_class = 500, val(), 0)) / sum(val())
 

Для получения более подробной информации, пожалуйста, обратитесь к примеру группировки.

Комментарии:

1. Это взято для руководства, и я попробовал, но это не работает для моей метрики. Как я уже сказал в своем описании, класса ответа нет, этот пример не работает. Я изменю свое описание, чтобы сказать response_code_class и сделать его более понятным.

2. Вы проверили формат вашего запроса. Я предположил, что только класс response_code_class

3. Пожалуйста, дайте мне знать, если у вас возникнут какие-либо проблемы.

4. класс response_code_class НЕДОСТУПЕН для этой метрики, ваш ответ не работает, это не вопрос о метрике балансировки нагрузки

5. извините за недопонимание в том, что вы можете добавить «движок приложений» вместо «балансировка нагрузки». Я тоже отредактировал свой ответ. Один раз проверьте и дайте мне знать.

Ответ №2:

Ниже приведен запрос, который выполняет следующее:

  • Используйте a group_by для подсчета 5xx ответов в 10-минутном скользящем окне.
  • Таким же group_by образом также подсчитайте все ответы в одном и том же 10-минутном скользящем окне.
  • После group_by этого просто вычислите соотношение двух показателей.
 fetch gae_app
| metric 'appengine.googleapis.com/http/server/response_count'
| group_by [], sliding(10m), [
    countAll: sum(response_count), 
    count5xx: sum(if(response_code>=500 amp;amp; response_code < 600, response_count, 0))]
| value (count5xx / countAll)
| every 1m
 

Скриншот диаграммы, полученной с помощью аналогичного запроса:

Скриншот диаграммы, полученной с помощью аналогичного запроса

Результатом приведенного выше запроса является соотношение 5xx ответов ко всем ответам.

Примечание: если вы хотите вычислить эти соотношения, например, с помощью zone , просто добавьте zone к первому аргументу group_by вот так: group_by [zone], sliding(10m), [countAll: ..., count5xx: ...] | value (count5xx / countAll)

Комментарии:

1. Это выглядит многообещающе, я собираюсь попробовать