از Stackdriver Logging و Stackdriver Trace برای توابع Cloud استفاده کنید

۱. مقدمه

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

۵۸۱۵۰۶۴fec۸۷۴۴۴b.png

شما از یک تابع ابری فعال‌شده توسط HTTP استفاده خواهید کرد، اما هر آنچه که پوشش می‌دهید برای زبان‌های دیگر و توابع ابری فعال‌شده توسط رویدادهای دیگر نیز صدق می‌کند.

۲. تنظیمات و الزامات

تنظیم محیط خودتنظیم

  1. وارد Cloud Console شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. (اگر از قبل حساب Gmail یا G Suite ندارید، باید یکی ایجاد کنید .)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aTQz5GpG0T

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5 OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژه‌های Google Cloud (نام بالا قبلاً گرفته شده و برای شما کار نخواهد کرد، متاسفیم!). بعداً در این آزمایشگاه کد به آن PROJECT_ID گفته خواهد شد.

  1. در مرحله بعد، برای استفاده از منابع گوگل کلود، باید پرداخت را در Cloud Console فعال کنید .

اجرای این آزمایشگاه کد، اگر اصلاً هزینه‌ای نداشته باشد، نباید هزینه زیادی داشته باشد. حتماً دستورالعمل‌های بخش «پاکسازی» را که به شما نحوه خاموش کردن منابع را آموزش می‌دهد، دنبال کنید تا پس از این آموزش، متحمل هزینه نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.

پوسته ابری

در حالی که می‌توان از توابع ابری و قابلیت‌های ثبت وقایع و نظارت آن از راه دور و از طریق لپ‌تاپ استفاده کرد، شما از Cloud Shell ، یک محیط خط فرمان که در Google Cloud اجرا می‌شود، استفاده خواهید کرد.

این ماشین مجازی مبتنی بر دبیان، تمام ابزارهای توسعه مورد نیاز شما را در خود جای داده است. این ماشین مجازی یک دایرکتوری خانگی ۵ گیگابایتی دائمی ارائه می‌دهد و در فضای ابری گوگل اجرا می‌شود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود می‌بخشد. این بدان معناست که تنها چیزی که برای این آزمایشگاه کد نیاز دارید یک مرورگر است (بله، روی کروم‌بوک هم کار می‌کند).

  1. برای فعال کردن Cloud Shell از کنسول Cloud، کافیست روی Activate Cloud Shell کلیک کنید. fEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVB7zSwz7p6ItNgx4tXqQjag7BfWPcZN5kP-X3Q (فقط چند لحظه طول می‌کشد تا آماده شود و به محیط متصل شود).

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARe01A

اسکرین شات 2017-06-14 ساعت 10.13.43 PM.png

پس از اتصال به 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 جستجو کنید:

R7chO4PKQfLC3bvFBNZJALLTUiCgyLEq_67ECX7ohs_0ZnSjC7GxDNxWrJJUaoM53LnqA BYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93Drxccyj2-5zz4AxL-G3hzxZ4PsM5HHQ

Cloud Shell همچنین برخی از متغیرهای محیطی را به طور پیش‌فرض تنظیم می‌کند که ممکن است هنگام اجرای دستورات بعدی مفید باشند.

echo $GOOGLE_CLOUD_PROJECT

خروجی دستور

<PROJECT_ID>
  1. در نهایت، منطقه پیش‌فرض و پیکربندی پروژه را تنظیم کنید.
gcloud config set compute/zone us-central1-f

شما می‌توانید مناطق مختلفی را انتخاب کنید. برای اطلاعات بیشتر، به بخش مناطق و نواحی مراجعه کنید.

۳. یک تابع ابری ساده راه‌اندازی کنید

برای اینکه چیزی برای نظارت داشته باشید، یک تابع ابری "Hello, World" ایجاد کنید. در منوی سمت چپ کنسول ابری گوگل، روی Cloud Functions کلیک کنید، سپس روی Create Function کلیک کنید.

3c13aa20af602aa7.png

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

fa6816c96d6d5b94.png

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

7aadf164450484e.png

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

dc74cd21000d6c91.png

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

5363a34eb001d5ed.png

۴. تست عملکرد ابر و ارسال ترافیک با استفاده از یک مولد بار

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

ابتدا، با استفاده از 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

۵. در میان گزارش‌ها پیمایش کنید

از نمای جزئیات عملکرد ابری خود، روی مشاهده گزارش‌ها کلیک کنید.

b24157fd3376e6a8.png

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

5a36fa75d2fb0165.png

همه درخواست‌ها به تابع ابری شما باید کد وضعیت ۲۰۰ را برگردانند.

هنگام مشاهده گزارش‌ها، می‌توانید موارد زیر را انجام دهید:

  • فیلتر بر اساس سطح لاگ (در مورد شما، همه لاگ‌ها در سطح debug هستند).
  • یک بازه زمانی خاص (نسبی یا مطلق) را انتخاب کنید.
  • فعال کردن پخش گزارش (با پخش) 751a4600016f34a7.png در بالای صفحه).
  • پیوندی به ورودی گزارش (برای اشتراک‌گذاری با اعضای تیم) کپی کنید.
  • نمایش یک ورودی لاگ در متن منبع.
  • یک ورودی گزارش را (به عنوان یک نشانه بصری) سنجاق کنید.
  • گزارش‌ها را به BigQuery، Cloud Storage یا Pub/Sub صادر کنید (یا به سادگی آنها را به صورت فایل‌های JSON یا CSV دانلود کنید).

6. Update the function

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

aaee3159bbe395d3.png7ed347101da5eca0.png

یکی دیگر از ابزارهای دقیق‌تر برای مشاهده تأخیر و تماس‌های RPC، Stackdriver Trace است، اما قبل از استفاده از آن، باید چند تغییر در عملکردهای ابری خود ایجاد کنید. موارد زیر را انجام دهید:

  1. بسته‌ی نجات‌بخش node-emoji را به عنوان یک وابستگی اضافه کنید.
  2. کد تابع را به‌روزرسانی کنید تا از ماژول node-emoji استفاده کند و مقداری تأخیر ایجاد کند.
  3. یک متغیر محیطی برای فعال کردن Stackdriver Trace برای توابع ابری اضافه کنید.

از جزئیات تابع ، برای تغییر تابع ، روی ویرایش کلیک کنید.

39b0f8f98b18a6c0.png

فایل 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 تنظیم کنید:

9205bd277b76aa21.png

روی ذخیره کلیک کنید.

به Cloud Shell برگردید و دستور ایجاد بار روی Cloud Function تازه مستقر شده را فراخوانی کنید:

$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \
   | vegeta attack -rate=5 -duration=120s \
   > results.bin

اکنون آماده‌اید تا فهرست ردپاهای تولید شده را بدون هیچ الزام تنظیمات دیگری و بدون هیچ کتابخانه‌ی ردگیری خاصی در کد خود مشاهده کنید!

۷. تابع ابری به‌روزرسانی‌شده را ردیابی کنید

با استفاده از منوی سمت چپ، به فهرست ردیابی (زیر عنوان Stackdriver Trace ) بروید.

576373f38cad6f8.png

شما باید چیزی شبیه به تصویر زیر را ببینید:

۴۴a۳۶b۷۵۸b۴۹f۸۸f.png

این باید کاملاً واضح باشد که تأخیر معرفی شده در عملکرد ابری شما در واقع 300 میلی ثانیه اندازه گیری شده است.

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

۵۸۱۵۰۶۴fec۸۷۴۴۴b.png

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

برای کوچک‌نمایی، روی لغو بزرگنمایی در بالای صفحه کلیک کنید.

از آنجا که شما یک تابع ابری واحد را مستقر کرده‌اید، نمودار فقط درخواست‌های GET را در URI مربوط به hello-monitor نشان می‌دهد، اما می‌توانید ردیابی‌ها را با روش HTTP (GET، POST، DELETE) بر اساس وضعیت HTTP (2XX، 3XX) یا با استفاده از فیلتر درخواست فیلتر کنید.

در منوی سمت چپ به بخش «نمای کلی» بروید:

e920cfca2a50899e.png

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

ef5a45647967d275.png

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

5bd34e9d13b47fb6.png

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

2cc0e9a3212b91bb.png

2e7b1ebf2f0a2b4f.png

چنین گزارش سفارشی می‌تواند برای یافتن زمان بروز مشکل در عملکرد و ردیابی یک شاخص سطح سرویس (SLI)، مانند تأخیر درخواست کاربر نهایی، مورد استفاده قرار گیرد.

۸. وقت پاکسازی منابع است

این نتیجه‌ی کدلاگ است!

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

aceb633cf70a4a27.png

۹. قدم بعدی چیست؟

در اینجا چند نکته‌ی خواندنی دیگر آمده است:

/