Цель этой лаборатории кода — помочь вам понять, как использовать инструменты ведения журналов и мониторинга, предлагаемые всем разработчикам облачных функций. Эти инструменты поставляются с каждой облачной функцией, которую вы развертываете на всех поддерживаемых языках, и должны позволить вам быть более продуктивными при написании и работе с вашим бессерверным кодом.
Здесь мы будем использовать функцию, активируемую HTTP, но все, что мы рассмотрим, также применимо к другим языкам и к функциям, запускаемым другими событиями (сегмент хранилища, публикация/подписка и т. д.).
Самостоятельная настройка среды
Если у вас еще нет учетной записи Google (Gmail или Google Apps), вы должны создать ее. Войдите в консоль Google Cloud Platform ( console.cloud.google.com ) и создайте новый проект:
Запомните идентификатор проекта, уникальное имя для всех проектов Google Cloud (имя выше уже занято и не будет работать для вас, извините!). Позже в этой кодовой лаборатории он будет упоминаться как PROJECT_ID
.
Затем вам нужно включить выставление счетов в облачной консоли, чтобы использовать ресурсы Google Cloud.
Прохождение этой кодовой лаборатории не должно стоить вам больше нескольких долларов, но может стоить больше, если вы решите использовать больше ресурсов или оставите их работающими (см. раздел «Очистка» в конце этого документа).
Новые пользователи Google Cloud Platform имеют право на бесплатную пробную версию стоимостью 300 долларов США .
Облачная оболочка Google
Хотя Google Cloud Functions и его возможности ведения журналов и мониторинга можно использовать удаленно с вашего ноутбука, в этой кодовой лаборатории мы будем использовать Google Cloud Shell , среду командной строки, работающую в облаке.
Эта виртуальная машина на основе Debian загружена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог размером 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Это означает, что все, что вам нужно для этой лаборатории кода, — это браузер (да, он работает на Chromebook).
Чтобы активировать Google Cloud Shell, в консоли разработчика просто нажмите кнопку в правом верхнем углу (подготовка и подключение к среде займет всего несколько минут):
Нажмите кнопку «Запустить Cloud Shell»:
После подключения к облачной оболочке вы должны увидеть, что вы уже прошли аутентификацию и что проект уже настроен на ваш 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
? Проверьте, какой идентификатор вы использовали на этапах настройки, или найдите его на панели управления консоли:
ВАЖНО: Наконец, установите зону по умолчанию и конфигурацию проекта:
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, но прежде чем мы сможем использовать эту функцию, нам нужно внести несколько изменений в наши функции, а именно:
- Добавьте спасительный пакет
node-emoji
в качестве зависимости - Обновите код функции, чтобы использовать модуль node-emoji и ввести некоторую задержку.
- Добавьте переменную среды, чтобы включить 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 завершена!
Вот некоторые последующие чтения:
- Stackdriver Мониторинг метрик на основе журнала
- Отчеты об ошибках Stackdriver
- ... или больше лабораторий кода из категории Serverless
/