Лаборатория ведения журналов и трассировки облачных функций

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

Здесь мы будем использовать функцию, активируемую HTTP, но все, что мы рассмотрим, также применимо к другим языкам и к функциям, запускаемым другими событиями (сегмент хранилища, публикация/подписка и т. д.).

Самостоятельная настройка среды

Если у вас еще нет учетной записи Google (Gmail или Google Apps), вы должны создать ее. Войдите в консоль Google Cloud Platform ( console.cloud.google.com ) и создайте новый проект:

Скриншот от 10 февраля 2016 г., 12:45:26.png

Запомните идентификатор проекта, уникальное имя для всех проектов Google Cloud (имя выше уже занято и не будет работать для вас, извините!). Позже в этой кодовой лаборатории он будет упоминаться как PROJECT_ID .

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

Прохождение этой кодовой лаборатории не должно стоить вам больше нескольких долларов, но может стоить больше, если вы решите использовать больше ресурсов или оставите их работающими (см. раздел «Очистка» в конце этого документа).

Новые пользователи Google Cloud Platform имеют право на бесплатную пробную версию стоимостью 300 долларов США .

Облачная оболочка Google

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

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

Чтобы активировать Google Cloud Shell, в консоли разработчика просто нажмите кнопку в правом верхнем углу (подготовка и подключение к среде займет всего несколько минут):

активироватьCloudShell.png

Нажмите кнопку «Запустить Cloud Shell»:

Снимок экрана 14.06.2017, 10.13.43 PM.png

После подключения к облачной оболочке вы должны увидеть, что вы уже прошли аутентификацию и что проект уже настроен на ваш PROJECT_ID :

gcloud auth list

Вывод команды

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

Вывод команды

[core]
project = <PROJECT_ID>

Cloud Shell также устанавливает некоторые переменные среды по умолчанию, которые могут быть полезны при выполнении будущих команд.

echo $GOOGLE_CLOUD_PROJECT

Вывод команды

<PROJECT_ID>

Если по какой-то причине проект не установлен, просто введите следующую команду:

gcloud config set project <PROJECT_ID>

Ищете свой PROJECT_ID ? Проверьте, какой идентификатор вы использовали на этапах настройки, или найдите его на панели управления консоли:

Project_ID.png

ВАЖНО: Наконец, установите зону по умолчанию и конфигурацию проекта:

gcloud config set compute/zone us-central1-f

Вы можете выбрать множество различных зон. Подробнее читайте в документации по регионам и зонам .

Чтобы было что мониторить, давайте создадим облачную функцию Hello World. В левом меню консоли нажмите «Облачные функции», затем « Create function »:

Назовите вашу новую функцию « hello-monitor »:

... и сохраните все значения по умолчанию для исходного кода (однако вы можете выбрать другой язык/среду выполнения, если хотите):

Наконец, создайте функцию с помощью кнопки « Create »:

Через некоторое время вы должны увидеть, что ваша функция готова к вызову (обозначается зеленой галочкой):

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

Сначала, используя Cloud Shell, введите следующую команду:

$ gcloud functions describe hello-monitor

Это должно вернуть описание функции, включая URL-адрес для httpsTrigger , который является конечной точкой HTTP (S) для вызова функции. Он должен иметь вид: https://<region>-<project-id>.cloudfunctions.net/hello-monitor

Запуск функции теперь должен быть таким же простым, как curl этого URL-адреса:

$ curl https://<region>-<project-id>.cloudfunctions.net/hello-monitor
Hello World!

Теперь мы будем использовать Vegeta , простой инструмент для нагрузочного тестирования HTTP. Чтобы установить его из Cloud Shell, просто введите эту команду:

$ go get -u github.com/tsenart/vegeta

Чтобы отправить некоторый трафик в вашу облачную функцию (5 запросов в секунду в течение пары минут), используйте эту команду:

$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \
   | vegeta attack -rate=5 -duration=120s \
   > results.bin

В представлении сведений о функции щелкните правое меню «Просмотр журналов»:

Это должно привести вас к разделу Stackdriver Logging вашего проекта, где будут показаны только ваши журналы облачных функций:

Надеемся, что все запросы к вашей функции возвращают код состояния 200.

Используя этот просмотрщик журналов, вы можете:

  • фильтровать по уровню журнала (в нашем случае все журналы уровня Debug )
  • выберите конкретный таймфрейм (относительный или абсолютный)
  • включить потоковую передачу логов (кнопка «воспроизведение» вверху экрана)
  • скопируйте ссылку на запись в журнале (для обмена с членами команды)
  • показать запись журнала в контексте ресурса
  • закрепить запись в журнале (в качестве визуальной подсказки)
  • экспортировать журналы в BigQuery, Cloud Storage или Cloud Pub/Sub (или просто скачать их в формате JSON или CSV)

Также обратите внимание, что в верхнем левом селекторе вы можете фильтровать журналы по функциям. Вы также можете выполнять поиск по меткам или полнотекстовый поиск в строке поиска в верхней части окна. В нашем случае это hello-monitor (имя функции), а также идентификатор выполнения для каждого запроса.

Фильтры также можно копировать для совместного использования (см. раскрывающееся меню в поле поиска):

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

Еще одним более подробным инструментом для наблюдения за задержкой и вызовами RPC является функция Stackdriver Trace, но прежде чем мы сможем использовать эту функцию, нам нужно внести несколько изменений в наши функции, а именно:

  1. Добавьте спасительный пакет node-emoji в качестве зависимости
  2. Обновите код функции, чтобы использовать модуль node-emoji и ввести некоторую задержку.
  3. Добавьте переменную среды, чтобы включить Stackdriver Trace для облачных функций.

На странице «Сведения о функции» нажмите «Изменить», чтобы изменить функцию:

Отредактируйте файл package.json , чтобы добавить зависимость для пакета node-emoji :

{
  "name": "sample-http",
  "version": "0.0.1",
  "dependencies": {
    "node-emoji": "^1.8.1"
  }
}

Отредактируйте фактическую функцию, изменив содержимое index.js на следующее:

const emoji = require('node-emoji');

exports.helloWorld = (req, res) => {
  let message = req.query.message || req.body.message || 'Hello World!';

  // add some latency, functions are too quick!
  setTimeout(function() {
     message += emoji.random().emoji;  
     res.status(200).send(message);
  }, (3 * 100));  // 300ms
  
};

Это добавит случайный смайлик к сообщению, возвращаемому функцией после паузы в 300 миллисекунд.

Наконец, добавьте переменную среды Cloud Function с именем GOOGLE_CLOUD_TRACE_ENABLED и установите значение true следующим образом:

Не забудьте нажать Сохранить!

Теперь вернитесь в Cloud Shell и вызовите команду для создания некоторой нагрузки на только что развернутую функцию:

$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \
   | vegeta attack -rate=5 -duration=120s \
   > results.bin

Теперь мы готовы просмотреть список трассировок, созданных без каких-либо других требований к настройке и без специальной библиотеки трассировок в вашем коде!

Используя левое меню, перейдите к списку трассировки (в Stackdriver Trace):

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

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

Каждая точка на этом графике — это запрос, для которого вы можете просмотреть подробную информацию, такую ​​как метка времени, метод и статус HTTP, его метки, обратную ссылку на соответствующую запись в журнале и любой последующий вызов RPC, который делает функция:

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

Чтобы уменьшить масштаб, нажмите кнопку «Отменить масштабирование» в верхней части страницы.

Поскольку мы развернули одну функцию, на графике отображаются только запросы GET по URI hello-monitor , но вы можете фильтровать трассировки по методу HTTP (GET, POST, DELETE, ...), по статусу HTTP (2XX, 3XX, ...) или с помощью фильтра запросов.

Теперь перейдите в раздел Traces «Обзор» в левом меню:

На этой обзорной странице вы можете найти последние трассировки и другую информацию.

... а также возможность создавать настраиваемые отчеты на основе комбинации фильтра запроса URI, метода HTTP, состояния HTTP и диапазона времени. Он даже позволяет сравнивать сгенерированные значения с базовым временем:

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

Такой настраиваемый отчет можно использовать для обнаружения проблем с производительностью, а также для отслеживания индикатора уровня обслуживания (SLI), такого как задержка запроса конечного пользователя.

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

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

Просто выберите функцию hello-monitor на странице обзора облачных функций и нажмите «удалить».

На этом эта простая лабораторная работа по началу работы с ведением журналов и трассировками Cloud Functions завершена!

Вот некоторые последующие чтения:

/