از Stackdriver Logging و Stackdriver Trace برای توابع Cloud استفاده کنید
درباره این codelab
1. مقدمه
در این کد لبه، یاد خواهید گرفت که از ابزارهای ثبت و نظارت در دسترس همه توسعه دهندگانی که با توابع ابری کار می کنند، استفاده کنید. ابزارها با هر تابع Cloud که در همه زبانهای پشتیبانیشده استقرار میدهید ارائه میشوند و باید به شما این امکان را بدهند که هنگام نوشتن و اجرای کدهای بدون سرور خود، بهرهوری بیشتری داشته باشید.
شما از یک تابع ابری راهاندازی شده با HTTP استفاده خواهید کرد، اما هر چیزی که پوشش میدهید برای زبانهای دیگر و عملکردهای ابری که توسط رویدادهای دیگر راهاندازی شدهاند نیز اعمال میشود.
2. راه اندازی و الزامات
تنظیم محیط خود به خود
- به کنسول Cloud وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. (اگر قبلاً یک حساب Gmail یا G Suite ندارید، باید یک حساب ایجاد کنید .)
شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژه های Google Cloud (نام بالا قبلاً گرفته شده است و برای شما کار نخواهد کرد، متأسفیم!). بعداً در این آزمایشگاه کد به عنوان PROJECT_ID
نامیده خواهد شد.
- در مرحله بعد، برای استفاده از منابع Google Cloud، باید صورتحساب را در Cloud Console فعال کنید .
اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. حتماً دستورالعملهای موجود در بخش «تمیز کردن» را دنبال کنید که به شما توصیه میکند چگونه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.
پوسته ابری
در حالی که میتوان از Cloud Functions و قابلیتهای ثبت و نظارت آن از راه دور از لپتاپ استفاده کرد، شما از Cloud Shell ، یک محیط خط فرمان که در Google Cloud اجرا میشود، استفاده خواهید کرد.
این ماشین مجازی مبتنی بر دبیان با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این دایرکتوری اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد شبکه و احراز هویت را بسیار افزایش می دهد. این بدان معنی است که تمام چیزی که برای این کد لبه نیاز دارید یک مرورگر است (بله، روی کروم بوک کار می کند).
- برای فعال کردن Cloud Shell از Cloud Console، کافی است روی 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
شما می توانید مناطق مختلفی را انتخاب کنید. برای اطلاعات بیشتر، به مناطق و مناطق مراجعه کنید.
3. استقرار یک تابع ساده ابری
برای اینکه چیزی برای نظارت داشته باشید، یک تابع ابری "Hello, World" ایجاد کنید. در منوی سمت چپ Google Cloud Console، روی Cloud Functions کلیک کنید، سپس روی Create Function کلیک کنید.
"hello-monitor" را به عنوان نام عملکرد جدید Cloud خود وارد کنید.
تمام پیش فرض ها را برای کد منبع حفظ کنید. (با این حال، در صورت تمایل می توانید زبان/زمان اجرا متفاوتی را انتخاب کنید.)
در نهایت روی Create کلیک کنید.
باید عملکرد Cloud خود را با یک علامت سبز در کنار آن مشاهده کنید، که به این معنی است که آماده فراخوانی است.
4. عملکرد Cloud را تست کنید و با استفاده از یک مولد بار ترافیک را ارسال کنید
اکنون که Cloud Function با موفقیت اجرا شد، آن را از خط فرمان آزمایش کنید.
ابتدا با استفاده از Cloud Shell دستور زیر را صادر کنید:
$ gcloud functions describe hello-monitor
این باید توضیحی از عملکرد Cloud، از جمله یک 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 خود (پنج درخواست در ثانیه برای چند دقیقه)، از دستور زیر استفاده کنید:
$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \ | vegeta attack -rate=5 -duration=120s \ > results.bin
5. در لاگ ها حرکت کنید
از نمای جزئیات عملکرد Cloud، روی View Logs کلیک کنید.
این باید شما را به بخش Stackdriver Logging پروژه شما هدایت کند و فقط گزارشهای Cloud Function را به شما نشان دهد.
همه درخواستها به Cloud Function شما باید یک کد وضعیت 200 برگردانند.
هنگام مشاهده گزارش ها، می توانید موارد زیر را انجام دهید:
- بر اساس سطح گزارش فیلتر کنید (در مورد شما، همه گزارشها در سطح
debug
هستند). - یک بازه زمانی خاص (نسبی یا مطلق) را انتخاب کنید.
- پخش گزارش را فعال کنید (با Play
در بالای صفحه نمایش).
- پیوندی را به ورودی گزارش کپی کنید (برای اشتراک گذاری با اعضای تیم).
- نمایش یک ورودی گزارش در زمینه منبع.
- پین کردن یک ورودی گزارش (به عنوان یک نشانه بصری).
- گزارشها را به BigQuery، Cloud Storage یا Pub/Sub صادر کنید (یا به سادگی آنها را به عنوان فایلهای JSON یا CSV دانلود کنید).
6. عملکرد را به روز کنید
با استفاده از Cloud Console، به نمای Function details بروید و اسپایکی را که با بار آزمایشگر خود ایجاد کرده اید در تعداد فراخوانی ها در ثانیه و زمان اجرای آنها مشاهده کنید.
ابزار دقیقتر دیگر برای مشاهده تأخیر و تماسهای 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 پس از توقف 300 میلی ثانیه ای باز می گردد اضافه می کند.
در نهایت، یک متغیر محیطی Cloud Function به نام GOOGLE_CLOUD_TRACE_ENABLED
اضافه کنید و به صورت زیر روی true
تنظیم کنید:
روی ذخیره کلیک کنید.
به Cloud Shell برگردید و فرمان ایجاد مقداری بار در تابع Cloud تازه مستقر شده را به خاطر بیاورید:
$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \ | vegeta attack -rate=5 -duration=120s \ > results.bin
اکنون شما آماده مشاهده لیست ردیابی های تولید شده بدون نیاز به راه اندازی دیگر و هیچ کتابخانه ردیابی خاصی در کد خود هستید!
7. تابع Cloud به روز شده را ردیابی کنید
با استفاده از منوی سمت چپ، به لیست Trace (در زیر Stackdriver Trace ) بروید.
شما باید چیزی شبیه به اسکرین شات زیر ببینید:
این باید کاملاً واضح باشد که تأخیر معرفی شده در عملکرد ابری شما در واقع در 300 میلی ثانیه اندازه گیری می شود.
هر نقطه روی نمودار درخواستی است که میتوانید اطلاعات دقیقی مانند مهر زمانی، روش و وضعیت HTTP، برچسبهای آن، پیوندی به ورودی گزارش مربوطه، و هر تماس RPC بعدی که تابع Cloud انجام میدهد را مشاهده کنید.
اگر می خواهید بزرگنمایی کنید، به سادگی روی نمودار کلیک کرده و بکشید.
برای کوچکنمایی، روی لغو بزرگنمایی در بالای صفحه کلیک کنید.
از آنجا که شما یک تابع Cloud را مستقر کرده اید، نمودار فقط درخواست های GET
در URI hello-monitor
نشان می دهد، اما می توانید ردیابی ها را با روش HTTP (GET، POST، DELETE) با وضعیت HTTP (2XX، 3XX) یا با استفاده از فیلتر درخواست فیلتر کنید. .
در منوی سمت چپ به نمای کلی بروید:
از این صفحه نمای کلی، می توانید ردیابی های اخیر و سایر اطلاعات را بیابید.
همچنین می توانید توانایی ایجاد گزارش های سفارشی را بر اساس ترکیبی از فیلتر درخواست URI، روش HTTP، وضعیت HTTP و محدوده زمانی پیدا کنید. حتی به شما امکان می دهد مقادیر تولید شده را با یک خط پایه زمانی مقایسه کنید.
اگر بتوانید محدوده زمانی صحیح را با نقاط داده کافی تنظیم کنید، می توانید گزارشی تهیه کنید که تغییر زمان تأخیر مهم بین عملکرد Cloud اولیه و عملکرد جدید را نشان می دهد.
چنین گزارش سفارشی می تواند برای پیدا کردن زمان معرفی یک مشکل عملکرد و برای ردیابی شاخص سطح خدمات (SLI)، مانند تأخیر درخواست کاربر نهایی استفاده شود.
8. زمان پاکسازی منابع است
این کار به پایان می رسد.
در حالی که ابزارهای Cloud Functions و Stackdriver پلتفرمهای بدون سرور هستند که در صورت عدم استفاده هزینهای را متحمل نمیشوند، شهروند ابری خوبی باشید و عملکرد Cloud خود را حذف کنید. به سادگی hello-monitor
در قسمت Overview در قسمت Cloud Functions انتخاب کنید و روی Delete کلیک کنید.