Cloud Functions Loging and Tracing Codelab

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

ما در اینجا از یک تابع راه‌اندازی HTTP استفاده می‌کنیم، اما هر چیزی که پوشش می‌دهیم برای زبان‌های دیگر و توابع فعال‌شده توسط رویدادهای دیگر (سطل ذخیره‌سازی، pub/sub، و غیره) نیز اعمال می‌شود.

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

اگر قبلاً یک حساب Google (Gmail یا Google Apps) ندارید، باید یک حساب ایجاد کنید . به کنسول Google Cloud Platform ( consol.cloud.google.com ) وارد شوید و یک پروژه جدید ایجاد کنید:

اسکرین شات از 10/02/2016 12:45:26.png

شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژه های 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، از کنسول توسعه‌دهنده به سادگی روی دکمه سمت راست بالای صفحه کلیک کنید (تنها چند لحظه طول می‌کشد تا محیط را تهیه کرده و به آن متصل شوید):

activateCloudShell.png

روی دکمه "شروع Cloud Shell" کلیک کنید:

اسکرین شات 14/06/2017 در ساعت 10.13.43 بعد از ظهر.png

پس از اتصال به پوسته ابری، باید ببینید که قبلاً احراز هویت شده اید و پروژه قبلاً روی 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 خود هستید؟ بررسی کنید که از چه شناسه ای در مراحل راه اندازی استفاده کرده اید یا آن را در داشبورد کنسول جستجو کنید:

Project_ID.png

مهم: در نهایت، منطقه پیش فرض و پیکربندی پروژه را تنظیم کنید:

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 است، اما قبل از اینکه بتوانیم از این ویژگی استفاده کنیم، باید چند تغییر در توابع خود ایجاد کنیم، یعنی:

  1. بسته نجات دهنده node-emoji را به عنوان یک وابستگی اضافه کنید
  2. کد تابع را برای استفاده از ماژول node-emoji به روز کنید و مقداری تأخیر را معرفی کنید
  3. برای فعال کردن 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 انتخاب کنید و روی "حذف" کلیک کنید.

این کار به این نتیجه می رسد که شروع به کار ساده کد لبه با ثبت و ردیابی توابع ابری است!

در اینجا چند مطالعه بعدی وجود دارد:

/