هدف این نرم افزار این است که شما بفهمید چگونه از ابزارهای ثبت و نظارت ارائه شده به همه توسعه دهندگان Cloud Function استفاده کنید. این ابزارها با هر عملکرد Cloud که در همه زبانهای پشتیبانیشده استقرار میدهید ارائه میشوند و باید به شما این امکان را بدهند که هنگام نوشتن و اجرای کدهای بدون سرور خود بهرهوری بیشتری داشته باشید.
ما در اینجا از یک تابع راهاندازی HTTP استفاده میکنیم، اما هر چیزی که پوشش میدهیم برای زبانهای دیگر و توابع فعالشده توسط رویدادهای دیگر (سطل ذخیرهسازی، pub/sub، و غیره) نیز اعمال میشود.
تنظیم محیط خود به خود
اگر قبلاً یک حساب Google (Gmail یا Google Apps) ندارید، باید یک حساب ایجاد کنید . به کنسول Google Cloud Platform ( consol.cloud.google.com ) وارد شوید و یک پروژه جدید ایجاد کنید:
شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژه های Google Cloud (نام بالا قبلاً گرفته شده است و برای شما کار نخواهد کرد، متأسفیم!). بعداً در این آزمایشگاه کد به عنوان PROJECT_ID
خواهد شد.
در مرحله بعد، برای استفاده از منابع Google Cloud، باید صورتحساب را در کنسول Cloud فعال کنید.
گذراندن این کد نباید بیش از چند دلار هزینه داشته باشد، اما اگر تصمیم به استفاده از منابع بیشتری داشته باشید یا اگر آنها را در حال اجرا رها کنید، ممکن است بیشتر باشد (به بخش "پاکسازی" در انتهای این سند مراجعه کنید).
کاربران جدید Google Cloud Platform واجد شرایط استفاده آزمایشی رایگان 300 دلاری هستند.
Google Cloud Shell
در حالی که توابع Google Cloud و قابلیتهای ثبت و نظارت آن را میتوان از راه دور از لپتاپ شما استفاده کرد، در این نرمافزار از Google Cloud Shell استفاده میکنیم، یک محیط خط فرمان که در Cloud اجرا میشود.
این ماشین مجازی مبتنی بر دبیان با تمام ابزارهای توسعه ای که شما نیاز دارید بارگذاری شده است. این یک فهرست اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد و احراز هویت شبکه را بسیار افزایش می دهد. این بدان معناست که تمام چیزی که برای این کد لبه نیاز دارید یک مرورگر است (بله، روی کروم بوک کار می کند).
برای فعالسازی 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 ایجاد کنیم. در منوی سمت چپ کنسول، روی Cloud Functions و سپس " 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
این آدرس اینترنتی باشد:
$ 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
از نمای جزئیات عملکرد خود، روی منوی سمت راست "View Logs" کلیک کنید:
این باید شما را به بخش 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
ما اکنون آماده مشاهده لیست ردیابی های تولید شده بدون نیاز به تنظیمات دیگر و بدون کتابخانه ردیابی خاص در کد شما هستیم!
با استفاده از منوی سمت چپ، به لیست Trace (در زیر Stackdriver Trace) بروید:
شما باید چیزی شبیه به این تصویربرداری از صفحه نمایش را ببینید:
این باید کاملاً واضح باشد که تأخیر معرفی شده در تابع ما در واقع در 300 میلیثانیه اندازهگیری میشود.
هر نقطه در این نمودار درخواستی است که میتوانید اطلاعات دقیقی مانند مهر زمانی، روش و وضعیت HTTP، برچسبهای آن، پیوندی به ورودی گزارش مربوطه و هر فراخوانی RPC بعدی که تابع انجام میدهد را مشاهده کنید:
اگر می خواهید بزرگنمایی کنید، به سادگی روی نمودار کلیک کرده و بکشید:
برای بزرگنمایی، روی دکمه «لغو زوم» در بالای صفحه کلیک کنید.
از آنجایی که ما یک تابع واحد را مستقر کردهایم، نمودار فقط درخواستهای GET
را در URI hello-monitor
نشان میدهد، اما میتوانید ردیابیها را با روش HTTP (GET، POST، DELETE، ...)، با وضعیت HTTP (2XX، 3XX،) فیلتر کنید. ...)، یا با استفاده از فیلتر درخواست.
اکنون به بخش Traces "Overview" در منوی سمت چپ بروید:
از این صفحه نمای کلی می توانید ردیابی های اخیر و سایر اطلاعات را بیابید.
... و همچنین امکان ایجاد گزارش های سفارشی بر اساس ترکیبی از فیلتر درخواست URI، روش HTTP، وضعیت HTTP و محدوده زمانی. حتی به شما امکان می دهد مقادیر تولید شده را با یک خط پایه زمانی مقایسه کنید:
اگر بتوانید محدودههای زمانی صحیح را تنظیم کنید و با نقاط داده کافی، گزارشی تهیه کنید که تغییر تاخیر مهم بین تابع اولیه و تابع جدید را نشان میدهد:
چنین گزارش سفارشی می تواند برای پیدا کردن زمان معرفی یک مشکل عملکرد و همچنین برای ردیابی شاخص سطح خدمات (SLI) مانند تأخیر درخواست کاربر نهایی استفاده شود.
این کار به پایان می رسد.
در حالی که ابزارهای Cloud Functions و Stackdriver پلتفرمهای بدون سرور هستند که در صورت عدم استفاده هزینهای را متحمل نمیشوند، برای اینکه شهروند ابری خوبی باشیم، اجازه دهید عملکرد خود را حذف کنیم.
به سادگی عملکرد hello-monitor
را در صفحه نمای کلی توابع Cloud انتخاب کنید و روی "حذف" کلیک کنید.
این کار به این نتیجه می رسد که شروع به کار ساده کد لبه با ثبت و ردیابی توابع ابری است!
در اینجا چند مطالعه بعدی وجود دارد:
- معیارهای مبتنی بر گزارش پایش Stackdriver
- گزارش خطای Stackdriver
- ... یا کدهای بیشتری از دسته بدون سرور
/