# #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. Это выглядит многообещающе, я собираюсь попробовать