۱. مقدمه
در این آزمایشگاه کد، یاد خواهید گرفت که از ابزارهای ثبت وقایع و نظارت موجود برای همه توسعهدهندگانی که با توابع ابری کار میکنند، استفاده کنید. این ابزارها با هر تابع ابری که در تمام زبانهای پشتیبانیشده مستقر میکنید، ارائه میشوند و باید شما را قادر سازند تا هنگام نوشتن و کار با کد بدون سرور خود، بهرهوری بیشتری داشته باشید.

شما از یک تابع ابری فعالشده توسط HTTP استفاده خواهید کرد، اما هر آنچه که پوشش میدهید برای زبانهای دیگر و توابع ابری فعالشده توسط رویدادهای دیگر نیز صدق میکند.
۲. تنظیمات و الزامات
تنظیم محیط خودتنظیم
- وارد Cloud Console شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. (اگر از قبل حساب Gmail یا G Suite ندارید، باید یکی ایجاد کنید .)
شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژههای Google Cloud (نام بالا قبلاً گرفته شده و برای شما کار نخواهد کرد، متاسفیم!). بعداً در این آزمایشگاه کد به آن PROJECT_ID گفته خواهد شد.
- در مرحله بعد، برای استفاده از منابع گوگل کلود، باید پرداخت را در Cloud Console فعال کنید .
اجرای این آزمایشگاه کد، اگر اصلاً هزینهای نداشته باشد، نباید هزینه زیادی داشته باشد. حتماً دستورالعملهای بخش «پاکسازی» را که به شما نحوه خاموش کردن منابع را آموزش میدهد، دنبال کنید تا پس از این آموزش، متحمل هزینه نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.
پوسته ابری
در حالی که میتوان از توابع ابری و قابلیتهای ثبت وقایع و نظارت آن از راه دور و از طریق لپتاپ استفاده کرد، شما از Cloud Shell ، یک محیط خط فرمان که در Google Cloud اجرا میشود، استفاده خواهید کرد.
این ماشین مجازی مبتنی بر دبیان، تمام ابزارهای توسعه مورد نیاز شما را در خود جای داده است. این ماشین مجازی یک دایرکتوری خانگی ۵ گیگابایتی دائمی ارائه میدهد و در فضای ابری گوگل اجرا میشود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود میبخشد. این بدان معناست که تنها چیزی که برای این آزمایشگاه کد نیاز دارید یک مرورگر است (بله، روی کرومبوک هم کار میکند).
- برای فعال کردن Cloud Shell از کنسول Cloud، کافیست روی Activate 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
شما میتوانید مناطق مختلفی را انتخاب کنید. برای اطلاعات بیشتر، به بخش مناطق و نواحی مراجعه کنید.
۳. یک تابع ابری ساده راهاندازی کنید
برای اینکه چیزی برای نظارت داشته باشید، یک تابع ابری "Hello, World" ایجاد کنید. در منوی سمت چپ کنسول ابری گوگل، روی Cloud Functions کلیک کنید، سپس روی Create Function کلیک کنید.

عبارت "hello-monitor" را به عنوان نام تابع ابری جدید خود وارد کنید.

تمام مقادیر پیشفرض را برای کد منبع نگه دارید. (با این حال، در صورت تمایل میتوانید زبان/زمان اجرای متفاوتی را انتخاب کنید.)

در نهایت، روی ایجاد کلیک کنید.

شما باید تابع ابری خود را با یک علامت سبز در کنار آن مشاهده کنید، به این معنی که آماده فراخوانی است.

۴. تست عملکرد ابر و ارسال ترافیک با استفاده از یک مولد بار
اکنون که تابع ابری با موفقیت مستقر شده است، آن را از خط فرمان آزمایش کنید.
ابتدا، با استفاده از 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
برای ارسال ترافیک به Cloud Function خود (پنج درخواست در ثانیه برای چند دقیقه)، از دستور زیر استفاده کنید:
$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \ | vegeta attack -rate=5 -duration=120s \ > results.bin
۵. در میان گزارشها پیمایش کنید
از نمای جزئیات عملکرد ابری خود، روی مشاهده گزارشها کلیک کنید.

این باید شما را به بخش Stackdriver Logging پروژهتان هدایت کند، که فقط گزارشهای عملکرد ابری شما را نشان میدهد.

همه درخواستها به تابع ابری شما باید کد وضعیت ۲۰۰ را برگردانند.
هنگام مشاهده گزارشها، میتوانید موارد زیر را انجام دهید:
- فیلتر بر اساس سطح لاگ (در مورد شما، همه لاگها در سطح
debugهستند). - یک بازه زمانی خاص (نسبی یا مطلق) را انتخاب کنید.
- فعال کردن پخش گزارش (با پخش)
در بالای صفحه). - پیوندی به ورودی گزارش (برای اشتراکگذاری با اعضای تیم) کپی کنید.
- نمایش یک ورودی لاگ در متن منبع.
- یک ورودی گزارش را (به عنوان یک نشانه بصری) سنجاق کنید.
- گزارشها را به BigQuery، Cloud Storage یا Pub/Sub صادر کنید (یا به سادگی آنها را به صورت فایلهای JSON یا CSV دانلود کنید).
6. Update the function
با استفاده از کنسول ابری، به نمای جزئیات تابع بروید و جهشی را که با تستر بار خود در تعداد فراخوانیها در ثانیه و زمان اجرای آنها ایجاد کردهاید، مشاهده کنید.


یکی دیگر از ابزارهای دقیقتر برای مشاهده تأخیر و تماسهای 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
};
این کار باعث میشود پس از مکث ۳۰۰ میلیثانیه، یک ایموجی تصادفی به پیامی که توسط تابع ابری برگردانده میشود، اضافه شود.
در نهایت، یک متغیر محیطی Cloud Function به نام GOOGLE_CLOUD_TRACE_ENABLED اضافه کنید و به صورت زیر روی true تنظیم کنید:

روی ذخیره کلیک کنید.
به Cloud Shell برگردید و دستور ایجاد بار روی Cloud Function تازه مستقر شده را فراخوانی کنید:
$ 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) یا با استفاده از فیلتر درخواست فیلتر کنید.
در منوی سمت چپ به بخش «نمای کلی» بروید:

از این صفحه مرور کلی، میتوانید ردپاهای اخیر و سایر بینشها را پیدا کنید.

همچنین میتوانید بر اساس ترکیبی از فیلتر درخواست URI، متد HTTP، وضعیت HTTP و محدوده زمانی، گزارشهای سفارشی ایجاد کنید. این ابزار حتی به شما امکان میدهد مقادیر تولید شده را با یک خط مبنای زمانی مقایسه کنید.

اگر بتوانید محدودههای زمانی صحیح را با نقاط داده کافی تنظیم کنید، میتوانید گزارشی تهیه کنید که تغییر مهم تأخیر بین عملکرد ابری اولیه و عملکرد جدید را نشان دهد.


چنین گزارش سفارشی میتواند برای یافتن زمان بروز مشکل در عملکرد و ردیابی یک شاخص سطح سرویس (SLI)، مانند تأخیر درخواست کاربر نهایی، مورد استفاده قرار گیرد.
۸. وقت پاکسازی منابع است
این نتیجهی کدلاگ است!
اگرچه ابزارهای Cloud Functions و Stackdriver پلتفرمهای بدون سرور هستند که در صورت عدم استفاده، هزینهای ندارند، اما شهروند ابری خوبی باشید و Cloud Function خود را حذف کنید. کافیست در قسمت Overview در قسمت Cloud Functions ، گزینه hello-monitor را انتخاب کرده و روی Delete کلیک کنید.

۹. قدم بعدی چیست؟
در اینجا چند نکتهی خواندنی دیگر آمده است:
/