Оповещения: ошибки журналов в темах Pub/Sub

1. Введение

Последнее обновление: 21 июня 2023 г.

Оповещение об ошибках в журнале доступности

Оповещения на основе журналов можно использовать для определения доступности приложения путем отслеживания определенных событий или закономерностей в журналах*.* Получая оповещения о сбоях в работе или других проблемах, с которыми сталкиваются пользователи, вы можете предпринять шаги, чтобы минимизировать влияние на ваших пользователей и клиентов. .

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

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

Темы Pub/Sub как канал оповещения

Тему Pub/Sub можно использовать в качестве канала уведомлений Google Cloud Monitoring для отправки оповещений в подписку Pub/Sub. Это позволяет вам интегрировать оповещения Cloud Monitoring с другими системами, включая сторонние службы уведомлений.

Чтобы использовать тему Pub/Sub в качестве канала уведомлений, сначала необходимо создать тему Pub/Sub и подписку Pub/Sub. Затем вам необходимо создать канал уведомлений Cloud Monitoring, который будет использовать тему Pub/Sub в качестве места назначения.

При срабатывании оповещения Cloud Monitoring отправит сообщение в тему Pub/Sub. Подписчик подписки Pub/Sub может затем обработать сообщение и предпринять соответствующие действия.

Что ты построишь

В этой лаборатории кода вы собираетесь развернуть приложение, создать тему Pub/Sub и создать оповещение на основе журнала, которое проверяет наличие ошибок в определенной части приложения и использует тему Pub/Sub в качестве канала уведомлений.

Что вы узнаете

  • Как создать тему Pub/Sub
  • Как создать оповещение на основе журнала

Эта лаборатория кода ориентирована на создание предупреждений об ошибках. Нерелевантные концепции и код приложения замалчиваются и предоставляются для простого копирования и вставки.

Что вам понадобится

  • Учетная запись Google Cloud с разрешениями на:
  • Развертывание приложений Cloud Run
  • Создание тем Pub/Sub
  • Создание оповещений

2. Приступаем к настройке

Выберите или создайте проект Google Cloud

Чтобы выбрать существующий проект, используйте раскрывающийся список:

b35bf95b8bf3d5d8.png

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

  1. Перейдите в консоль Google Cloud Platform .
  2. Нажмите кнопку «Создать проект» .
  3. Введите имя для вашего проекта.
  4. Выберите платежный аккаунт для своего проекта.
  5. Нажмите кнопку «Создать» .

Ваш проект будет создан, и вы попадете на панель управления проектом. Оттуда вы можете начать использовать сервисы Google Cloud.

Вот некоторые дополнительные сведения о каждом этапе:

  • Имя. Имя вашего проекта должно быть уникальным в пределах вашей организации.
  • Платежный аккаунт: вы можете использовать существующий платежный аккаунт или создать новый.
  • Создать: После того, как вы ввели всю необходимую информацию, нажмите кнопку «Создать» , чтобы создать проект.

Дополнительную информацию см. в документации Google Cloud по созданию проектов .

3. Разверните приложение API.

Что представляет собой пример приложения или API?

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

После развертывания API и предположения, что он размещен по адресу https://<somehost>, мы можем получить доступ к конечным точкам API следующим образом:

https://<somehost>/inventory

В нем будут перечислены все позиции продуктов с уровнями имеющихся запасов.

https://<somehost>/inventory/{productid}

Это обеспечит единую запись с идентификатором продукта и уровнем имеющихся запасов для этого продукта.

Возвращаемые данные ответа имеют формат JSON.

Примечание . Это приложение API предназначено только для демонстрационных целей и не представляет собой безопасную и надежную реализацию API. Предполагается, что нам будет доступно быстрое приложение для изучения основной цели лаборатории, то есть Google Cloud Operations.

Примеры данных и запрос/ответ API

Приложение не использует базу данных на серверной стороне, чтобы упростить задачу. Он содержит 3 образца идентификаторов продуктов и уровни их имеющихся запасов.

Идантификационный номер продукта

Уровень имеющихся запасов

Я-1

10

И-2

20

И-3

30

Пример запроса и ответа API показан ниже:

API-запрос

Ответ API

https://<somehost>/inventory

[ { "И-1": 10, "И-2": 20, "И-3": 30 }]

https://<somehost>/inventory/I-1

{ "productid": "I-1", "qty": 10}

https://<somehost>/inventory/I-2

{ "productid": "I-2", "qty": 20}

https://<somehost>/inventory/I-200

{ "productid": I-200, "qty": -1}

Клонировать репозиторий

Хотя Google Cloud можно управлять удаленно с вашего ноутбука, в этой лаборатории вы будете использовать Google Cloud Shell , среду командной строки, работающую в облаке.

В консоли GCP щелкните значок Cloud Shell на верхней правой панели инструментов:

bce75f34b2c53987.png

Подготовка и подключение к среде займет всего несколько минут. Когда все будет готово, вы должны увидеть что-то вроде этого:

f6ef2b5f13479f3a.png

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Всю работу в этой лаборатории можно выполнять с помощью простого браузера.

Настройка gcloud

В Cloud Shell задайте идентификатор проекта и сохраните его как переменную PROJECT_ID.

PROJECT_ID=[YOUR-PROJECT-ID]

project set config gcloud $PROJECT_ID

Теперь выполните следующую команду:

$ git clone https://github.com/rominirani/cloud-code-sample-repository.git

В этой папке будет создана папка под названием cloud-code-sample-repository.

(Необязательно) Запустите приложение в Cloud Shell.

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

  1. В терминале перейдите к версии API Python с помощью следующей команды:

$ cd cloud-code-sample-repository

$ cd python-flask-api

  1. В терминале введите следующую команду (на момент написания Cloud Shell поставляется с установленным Python 3.9.x, и мы будем использовать версию по умолчанию. Если вы планируете запускать его локально на своем ноутбуке, вы можете использовать Python 3.8+. ) :

$ python app.py

  1. Вы можете запустить следующую команду, чтобы запустить сервер Python локально.

1f798fbddfdc2c8e.png46edf454cc70c5a6.png

Нажмите «Просмотр» на порту 8080. 5. Откроется окно браузера. Вы увидите ошибку 404, и это нормально. Измените URL-адрес и измените его, чтобы после имени хоста было /inventory.

Например, на моей машине это выглядит так:

https://8080-cs-557561579860-default.cs-asia-southeast1-yelo.cloudshell.dev/inventory

Это отобразит список предметов инвентаря, как объяснялось ранее:

709d57ee2f0137e4.png

  1. Вы можете остановить сервер сейчас, зайдя в Терминал и нажав Ctrl-C.

Развертывание приложения

Теперь мы развернем это приложение API в Cloud Run. Процесс включал использование клиента командной строки gcloud для запуска команды развертывания кода в Cloud Run .

В терминале введите следующую команду gcloud:

$ gcloud run deploy --source .

Это задаст вам несколько вопросов, некоторые из которых упомянуты ниже:

  1. Имя службы (python-flask-api): используйте это значение по умолчанию или выберите что-то вроде my-inventory-api.
  2. API [run.googleapis.com] не включен в проекте [613162942481]. Хотите включить и повторить попытку (это займет несколько минут)? (да/нет)? Да
  3. Пожалуйста, укажите регион: Выберите 31 (us-west-1)
  4. API [artifactregistry.googleapis.com] не включен в проекте [613162942481]. Хотите включить и повторить попытку (это займет несколько минут)? (да/нет)? Да
  5. Для развертывания из исходного кода требуется репозиторий Artifact Registry Docker для хранения собранных контейнеров. Будет создан репозиторий с именем [cloud-run-source-deploy] в регионе [us-west1].
  6. Хотите продолжить (Да/нет)? Да
  7. Разрешить неаутентифицированные вызовы к [my-inventory-api] (да/нет)? Да

В конечном итоге это запустит процесс получения исходного кода, его контейнеризации, отправки в реестр артефактов, а затем развертывания службы Cloud Run + версии. Вам следует проявить терпение в этом процессе (может занять 3–4 минуты), и вы увидите, что процесс завершится, и вам будет показан URL-адрес службы.

Пример запуска показан ниже:

87ba8dbf88e8cfa4.png

Протестируйте приложение

Теперь, когда мы развернули приложение в Cloud Run, вы можете получить доступ к приложению API следующим образом:

  1. Обратите внимание на URL-адрес службы из предыдущего шага. Например, в моей настройке он отображается как https://my-inventory-api-bt2r5243dq-uw.a.run.app . Назовем это <SERVICE_URL> .
  2. Откройте браузер и получите доступ к следующим трем URL-адресам конечных точек API:
  3. <SERVICE_URL>/inventory
  4. <SERVICE_URL>/inventory/I-1
  5. <SERVICE_URL>/inventory/I-100

Это должно соответствовать спецификациям, которые мы предоставили в предыдущем разделе с примером запроса и ответа API.

Получите подробную информацию об услуге из Cloud Run

Мы развернули нашу службу API в Cloud Run, бессерверной вычислительной среде. Мы можем посетить сервис Cloud Run через консоль Google Cloud в любой момент.

В главном меню перейдите в Cloud Run. Отобразится список служб, которые вы используете в Cloud Run. Вы должны увидеть службу, которую вы только что развернули. В зависимости от выбранного вами имени вы должны увидеть что-то вроде этого:

2633965c4bc957cc.png

Нажмите на название службы, чтобы просмотреть подробности. Детали образца показаны ниже:

33042ae64322ce07.png

Обратите внимание на URL-адрес, который представляет собой не что иное, как URL-адрес службы, который вы можете ввести в браузер и получить доступ к API инвентаризации, который мы только что развернули. Ознакомьтесь с показателями и другими подробностями.

Давайте начнем с Google Cloud Operations Suite.

4. Создайте тему Pub/Sub для получения оповещений.

Чтобы создать тему Pub/Sub, вы можете выполнить следующие шаги в Google Cloud Console :

  1. Найдите Pub/Sub в поле поиска и перейдите к Pub/Sub. 935028bd8f6328ef.png
  2. Откройте вкладку «Темы» , если вы еще этого не сделали. 7fd8bf91386a88fd.png
  3. Нажмите кнопку Создать тему . cd9d197f9023c41b.png
  4. Введите узнаваемое название для своей темы.

173f313b4a3c4934.png

  1. Нажмите кнопку «Создать» . ca9a02477da21a44.png
  2. Скопируйте название темы, используя кнопку со значком копирования. Он понадобится вам для следующего раздела.

20848252ee83df93.png

5. Создайте политику оповещения об ошибках

Изучение журналов ошибок

Чтобы просмотреть журналы ошибок приложения:

Откройте вкладку «Журналирование» .

Откроется интерфейс журнала, в котором вы можете выбрать или отменить выбор различных ресурсов (проект, облачный ресурс Google, имена служб и т. д.), а также уровни журнала для фильтрации сообщений журнала по мере необходимости.

6605b68395185b89.png

Смоделируйте несколько недействительных запросов к службе инвентаризации, предоставив идентификаторы продуктов, которые не являются одними из I-1, I-2 и I-3. Например, неправильный запрос:

https://<SERVICE_URL>/inventory/I-999

Теперь мы будем искать все ПРЕДУПРЕЖДЕНИЯ, сгенерированные нашим API, если в запросе указан неправильный идентификатор продукта.

Создание пользовательской политики оповещения об ошибках на основе журнала

Предположим, мы хотим следить за появлением очень специфического сообщения об ошибке для части приложения. Скажем, если мы заметили большое количество ошибок при поиске идентификаторов продуктов. Эта проблема является симптомом многих возможных проблем (плохая ссылка, несогласованность базы данных или бот, пересчитывающий наш сайт). Хотя было бы трудно или невозможно представить каждую потенциальную причину, приложение, отправляющее это сообщение хотя бы один раз, является проблемой высокого уровня, о которой мы хотим знать. Чтобы предупредить об этом, нам нужно создать политику, основанную на данных в наших журналах ошибок.

  1. В поле запроса вставьте следующие параметры запроса:

ресурс.тип="cloud_run_revision"

textPayload =~ "ВНИМАНИЕ в приложении: получен запрос на инвентаризацию с неверным идентификатором продукта"

Это должно выглядеть примерно так:

f672154cfebf0051.png

  1. Нажмите «Выполнить запрос». Затем вы увидите все поступившие запросы, в которых возникла эта проблема.

77c190e3a2fab6bf.png

  1. Чтобы преобразовать приведенное выше предупреждение в оповещение, нажмите кнопку «Создать оповещение» , которую вы видите в обозревателе журналов прямо под полем запроса справа:

4cd3fcf142189376.png

  1. Откроется форма для создания политики оповещений на основе журнала.

b82446854bad87fc.png

  1. Используйте первоначальный запрос журналов для включения в оповещение:

resource.type="cloud_run_revision"

textPayload =~ "WARNING in app: Received request inventory for incorrect productid"

764227db73ec3de6.png

  1. Установите частоту уведомлений и продолжительность инцидента. Для примера вы можете использовать минимальные значения для каждого:

bb3d96448ec998a1.png

  1. Наконец, вопрос «Кто должен быть уведомлен?» выберите канал уведомлений Pub/Sub, который вы создали ранее:

3593c48c29d4b76c.png

  1. Нажмите «Сохранить». Чтобы просмотреть политику оповещений и управлять ею, посетите страницу «Оповещения» и выберите раздел «Политики»: ca08ea380fb37c91.png

6. Поздравления

Поздравляем, вы успешно настроили проверку работоспособности для отправки оповещений в Pub/Sub!