1. Введение
В этой лаборатории кода вы научитесь использовать инструменты ведения журналов и мониторинга, доступные всем разработчикам, работающим с облачными функциями. Эти инструменты поставляются с каждой облачной функцией, которую вы развертываете на всех поддерживаемых языках, и должны помочь вам повысить продуктивность при написании и эксплуатации бессерверного кода.
Вы будете использовать облачную функцию, активируемую HTTP, но все, что вы описываете, также применимо к другим языкам и облачным функциям, запускаемым другими событиями.
2. Настройка и требования
Самостоятельная настройка среды
- Войдите в Cloud Console и создайте новый проект или повторно используйте существующий. (Если у вас еще нет учетной записи Gmail или G Suite, вам необходимо ее создать .)
Запомните идентификатор проекта — уникальное имя для всех проектов Google Cloud (имя, указанное выше, уже занято и не подойдет вам, извините!). Позже в этой лаборатории он будет называться PROJECT_ID
.
- Далее вам необходимо включить биллинг в Cloud Console, чтобы использовать ресурсы Google Cloud.
Прохождение этой лаборатории кода не должно стоить много, если вообще стоит. Обязательно следуйте всем инструкциям в разделе «Очистка», в которых рассказывается, как отключить ресурсы, чтобы вам не приходилось нести расходы, выходящие за рамки этого руководства. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .
Облачная оболочка
Хотя облачные функции и их возможности ведения журналов и мониторинга можно использовать удаленно с вашего ноутбука, вы будете использовать Cloud Shell , среду командной строки, работающую в Google Cloud.
Эта виртуальная машина на базе Debian оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Это означает, что все, что вам понадобится для этой лаборатории кода, — это браузер (да, он работает на Chromebook).
- Чтобы активировать Cloud Shell из Cloud Console, просто нажмите «Активировать Cloud Shell».
(подготовка и подключение к среде займет всего несколько минут).
После подключения к Cloud Shell вы увидите, что вы уже прошли аутентификацию и что для проекта уже установлен ваш PROJECT_ID
.
gcloud auth list
Вывод команды
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Вывод команды
[core] project = <PROJECT_ID>
Если по какой-то причине проект не установлен, просто введите следующую команду:
gcloud config set project <PROJECT_ID>
Ищете свой PROJECT_ID
? Узнайте, какой идентификатор вы использовали на этапах настройки, или найдите его на панели управления Cloud Console:
Cloud Shell также по умолчанию устанавливает некоторые переменные среды, которые могут быть полезны при выполнении будущих команд.
echo $GOOGLE_CLOUD_PROJECT
Вывод команды
<PROJECT_ID>
- Наконец, установите зону по умолчанию и конфигурацию проекта.
gcloud config set compute/zone us-central1-f
Вы можете выбрать множество различных зон. Дополнительную информацию см. в разделе «Регионы и зоны» .
3. Разверните простую облачную функцию
Чтобы было что отслеживать, создайте облачную функцию «Hello, World». В левом меню Google Cloud Console нажмите «Облачные функции» , затем нажмите « Создать функцию» .
Введите «hello-monitor» в качестве имени вашей новой облачной функции.
Сохраните все значения по умолчанию для исходного кода. (Однако при желании вы можете выбрать другой язык/среду выполнения.)
Наконец, нажмите «Создать» .
Вы должны увидеть свою облачную функцию с зеленой галочкой рядом с ней, что означает, что она готова к вызову.
4. Протестируйте функцию облака и отправьте трафик с помощью генератора нагрузки.
Теперь, когда облачная функция успешно развернута, протестируйте ее из командной строки.
Сначала, используя Cloud Shell, введите следующую команду:
$ gcloud functions describe hello-monitor
Это должно вернуть описание облачной функции, включая URL-адрес httpsTrigger
, который является конечной точкой HTTP(S) для вызова облачной функции. Он должен выглядеть следующим образом: https://<region>-<project-id>.cloudfunctions.net/hello-monitor.
Запуск функции Cloud теперь должен быть таким же простым, как использование команды curl
по этому URL-адресу.
$ curl https://<region>-<project-id>.cloudfunctions.net/hello-monitor Hello World!
Теперь используйте Vegeta , простой инструмент HTTP-нагрузочного тестирования. Чтобы установить его из Cloud Shell, просто введите следующую команду:
$ go get -u github.com/tsenart/vegeta
Чтобы отправить некоторый трафик в вашу облачную функцию (пять запросов в секунду в течение нескольких минут), используйте следующую команду:
$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \ | vegeta attack -rate=5 -duration=120s \ > results.bin
5. Навигация по журналам
В представлении сведений о облачной функции нажмите « Просмотреть журналы» .
Это должно привести вас к разделу «Журналирование Stackdriver» вашего проекта, где показаны только журналы облачных функций.
Все запросы к вашей облачной функции должны возвращать код состояния 200.
При просмотре журналов вы можете сделать следующее:
- Фильтрация по уровню журнала (в вашем случае все журналы относятся к уровню
debug
). - Выберите конкретный таймфрейм (относительный или абсолютный).
- Включить потоковую передачу журналов (с помощью Play
вверху экрана).
- Скопируйте ссылку на запись журнала (для совместного использования с членами команды).
- Показать запись журнала в контексте ресурса.
- Закрепите запись журнала (как визуальную подсказку).
- Экспортируйте журналы в BigQuery, Cloud Storage или Pub/Sub (или просто загрузите их в виде файлов JSON или CSV).
6. Обновите функцию
Используя облачную консоль, перейдите к представлению сведений о функции и наблюдайте за всплеском количества вызовов в секунду и времени их выполнения, который вы создали с помощью нагрузочного тестера.
Еще один более подробный инструмент для наблюдения за задержкой и вызовами RPC — Stackdriver Trace, но прежде чем вы сможете его использовать, вам необходимо внести несколько изменений в ваши облачные функции. Сделайте следующее:
- Добавьте спасительный пакет
node-emoji
в качестве зависимости. - Обновите код функции, чтобы использовать модуль node-emoji, и добавьте некоторую задержку.
- Добавьте переменную среды, чтобы включить трассировку Stackdriver для облачных функций.
В разделе «Сведения о функции» нажмите «Изменить» , чтобы изменить функцию.
Отредактируйте файл 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
};
Это добавляет случайный смайлик к сообщению, возвращаемому функцией Cloud после паузы в 300 миллисекунд.
Наконец, добавьте переменную среды облачной функции с именем 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
Теперь вы готовы просмотреть список трассировок, созданных без каких-либо дополнительных требований к настройке и без специальной библиотеки трассировки в вашем коде!
7. Отследите обновленную функцию облака.
Используя меню слева, перейдите к списку трассировок (в разделе Stackdriver Trace ).
Вы должны увидеть что-то похожее на следующий снимок экрана:
Это должно сделать совершенно очевидным, что задержка, введенная в вашу облачную функцию, действительно измеряется 300 миллисекундами.
Каждая точка на графике представляет собой запрос, для которого вы можете просмотреть подробную информацию, такую как временная метка, метод и статус HTTP, его метки, ссылка на соответствующую запись журнала и любой последующий вызов RPC, который выполняет облачная функция.
Если вы хотите увеличить масштаб, просто щелкните и перетащите график.
Чтобы уменьшить масштаб, нажмите «Отменить масштаб» вверху страницы.
Поскольку вы развернули одну облачную функцию, на графике показаны только запросы GET
по URI hello-monitor
, но вы можете фильтровать трассировки по методу HTTP (GET, POST, DELETE) по статусу HTTP (2XX, 3XX) или с помощью фильтра запросов. .
Перейдите к Обзору в меню слева:
На этой обзорной странице вы можете найти недавние следы и другую информацию.
Вы также можете найти возможность создавать собственные отчеты на основе комбинации фильтра запроса URI, метода HTTP, состояния HTTP и диапазона времени. Он даже позволяет сравнивать сгенерированные значения с базовой линией времени.
Если вам удастся настроить правильные временные диапазоны с достаточным количеством точек данных, вы сможете создать отчет, показывающий важный сдвиг задержки между исходной функцией облака и новой.
Такой настраиваемый отчет можно использовать для определения момента возникновения проблемы с производительностью и для отслеживания индикатора уровня обслуживания (SLI), например задержки запроса конечного пользователя.
8. Время очистить ресурсы
На этом работа над кодом завершена!
Хотя облачные функции и инструменты Stackdriver представляют собой бессерверные платформы, которые не несут затрат, когда они не используются, будьте добросовестным гражданином облака и удалите свою облачную функцию. Просто выберите hello-monitor
в разделе «Обзор» в разделе «Облачные функции» и нажмите «Удалить» .
9. Что дальше?
Вот кое-что из дальнейшего чтения:
/