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

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

درباره این codelab

subjectآخرین به‌روزرسانی: اکتبر ۷, ۲۰۲۰
account_circleنویسنده: یکی از کارمندان Google

1. مقدمه

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

5815064fec87444b.png

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

2. راه اندازی و الزامات

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

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

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJHHXieCvXw5 Zw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aTQz5GpG0T

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3UUUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3UUUO1A8CXUF

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

  1. در مرحله بعد، برای استفاده از منابع Google Cloud، باید صورت‌حساب را در Cloud Console فعال کنید .

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

پوسته ابری

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

این ماشین مجازی مبتنی بر دبیان با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این دایرکتوری اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد شبکه و احراز هویت را بسیار افزایش می دهد. این بدان معنی است که تمام چیزی که برای این کد لبه نیاز دارید یک مرورگر است (بله، روی کروم بوک کار می کند).

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

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1NYAd

Screen Shot 2017-06-14 at 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_0ZnSjC7GxDNxWrJJUaoM53LnqABYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93DrxZHQ4PhZ5

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

echo $GOOGLE_CLOUD_PROJECT

خروجی فرمان

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

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

3. استقرار یک تابع ساده ابری

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

3c13aa20af602aa7.png

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

fa6816c96d6d5b94.png

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

7aadf164450484e.png

در نهایت روی Create کلیک کنید.

dc74cd21000d6c91.png

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

5363a34eb001d5ed.png

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 کلیک کنید.

b24157fd3376e6a8.png

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

5a36fa75d2fb0165.png

همه درخواست‌ها به Cloud Function شما باید یک کد وضعیت 200 برگردانند.

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

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

6. عملکرد را به روز کنید

با استفاده از Cloud Console، به نمای Function details بروید و اسپایکی را که با بار آزمایشگر خود ایجاد کرده اید در تعداد فراخوانی ها در ثانیه و زمان اجرای آنها مشاهده کنید.

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 پس از توقف 300 میلی ثانیه ای باز می گردد اضافه می کند.

در نهایت، یک متغیر محیطی Cloud Function به نام GOOGLE_CLOUD_TRACE_ENABLED اضافه کنید و به صورت زیر روی true تنظیم کنید:

9205bd277b76aa21.png

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

به 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 ) بروید.

576373f38cad6f8.png

شما باید چیزی شبیه به اسکرین شات زیر ببینید:

44a36b758b49f88f.png

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

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

5815064fec87444b.png

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

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

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

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

e920cfca2a50899e.png

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

ef5a45647967d275.png

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

5bd34e9d13b47fb6.png

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

2cc0e9a3212b91bb.png

2e7b1ebf2f0a2b4f.png

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

8. زمان پاکسازی منابع است

این کار به پایان می رسد.

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

aceb633cf70a4a27.png