ใช้ Stackdriver Logging และ Stackdriver Trace สำหรับ Cloud Functions

1. บทนำ

ในโค้ดแล็บนี้ คุณจะได้เรียนรู้วิธีใช้ประโยชน์จากเครื่องมือการบันทึกและการตรวจสอบที่มีให้บริการแก่นักพัฒนาซอฟต์แวร์ทุกคนที่ทำงานกับ Cloud Functions เครื่องมือนี้มาพร้อมกับ Cloud Function ทุกฟังก์ชันที่คุณติดตั้งใช้งานในภาษาที่รองรับทั้งหมด และจะช่วยให้คุณทำงานได้อย่างมีประสิทธิภาพมากขึ้นเมื่อเขียนและใช้งานโค้ดแบบไร้เซิร์ฟเวอร์

5815064fec87444b.png

คุณจะใช้ Cloud Function ที่ทริกเกอร์ด้วย HTTP แต่ทุกอย่างที่คุณครอบคลุมจะใช้ได้กับภาษาอื่นๆ และ Cloud Function ที่ทริกเกอร์ด้วยเหตุการณ์อื่นๆ ด้วย

2. การตั้งค่าและข้อกำหนด

การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง

  1. ลงชื่อเข้าใช้ Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ (หากยังไม่มีบัญชี Gmail หรือ G Suite คุณต้องสร้างบัญชี)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

โปรดจดจำรหัสโปรเจ็กต์ ซึ่งเป็นชื่อที่ไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมด (ชื่อด้านบนมีผู้ใช้แล้วและจะใช้ไม่ได้ ขออภัย) ซึ่งจะเรียกว่า PROJECT_ID ในภายหลังใน Codelab นี้

  1. จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร Google Cloud

การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายมากนัก หรืออาจไม่มีเลย โปรดทำตามวิธีการในส่วน "การล้างข้อมูล" ซึ่งจะแนะนำวิธีปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD

Cloud Shell

แม้ว่าจะใช้ Cloud Functions รวมถึงความสามารถในการบันทึกและการตรวจสอบจากแล็ปท็อปได้ แต่คุณจะต้องใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานใน Google Cloud

เครื่องเสมือนที่ใช้ Debian นี้มาพร้อมเครื่องมือพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานใน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก ซึ่งหมายความว่าคุณจะต้องมีเพียงเบราว์เซอร์เท่านั้นสำหรับโค้ดแล็บนี้ (ใช่แล้ว ใช้ได้ใน Chromebook)

  1. หากต้องการเปิดใช้งาน Cloud Shell จาก Cloud Console เพียงคลิกเปิดใช้งาน Cloud Shell fEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVB7zSwz7p6ItNgx4tXqQjag7BfWPcZN5kP-X3Q (ระบบจะใช้เวลาเพียงไม่กี่นาทีในการจัดสรรและเชื่อมต่อกับสภาพแวดล้อม)

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARe01A

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-J9XBzuUgaz7VvaxNrkP2TAn93Drxccyj2-5zz4AxL-G3hzxZ4PsM5HHQ

นอกจากนี้ Cloud Shell ยังตั้งค่าตัวแปรสภาพแวดล้อมบางอย่างโดยค่าเริ่มต้น ซึ่งอาจมีประโยชน์เมื่อคุณเรียกใช้คำสั่งในอนาคต

echo $GOOGLE_CLOUD_PROJECT

เอาต์พุตของคำสั่ง

<PROJECT_ID>
  1. สุดท้าย ให้ตั้งค่าโซนเริ่มต้นและการกำหนดค่าโปรเจ็กต์
gcloud config set compute/zone us-central1-f

คุณเลือกโซนต่างๆ ได้หลากหลาย ดูข้อมูลเพิ่มเติมได้ที่ภูมิภาคและโซน

3. ทำให้ Cloud Function อย่างง่ายใช้งานได้

หากต้องการมีสิ่งที่จะตรวจสอบ ให้สร้าง Cloud Function "Hello, World" ในเมนูด้านซ้ายของ Google Cloud Console ให้คลิก Cloud Functions แล้วคลิก Create Function

3c13aa20af602aa7.png

ป้อน "hello-monitor" เป็นชื่อของ Cloud Function ใหม่

fa6816c96d6d5b94.png

เก็บค่าเริ่มต้นทั้งหมดสำหรับซอร์สโค้ดไว้ (อย่างไรก็ตาม คุณเลือกภาษา/รันไทม์อื่นได้หากต้องการ)

7aadf164450484e.png

สุดท้าย ให้คลิกสร้าง

dc74cd21000d6c91.png

คุณควรเห็น Cloud Function แสดงพร้อมเครื่องหมายถูกสีเขียวอยู่ข้างๆ ซึ่งหมายความว่าฟังก์ชันพร้อมที่จะเรียกใช้แล้ว

5363a34eb001d5ed.png

4. ทดสอบ Cloud Function และส่งการรับส่งข้อมูลโดยใช้เครื่องมือสร้างภาระงาน

ตอนนี้ฟังก์ชัน Cloud ได้รับการติดตั้งใช้งานเรียบร้อยแล้ว ให้ทดสอบจากบรรทัดคำสั่ง

ก่อนอื่น ให้ใช้ Cloud Shell เพื่อออกคำสั่งต่อไปนี้

$ gcloud functions describe hello-monitor

ซึ่งควรแสดงคำอธิบายของ Cloud Function รวมถึง URL สำหรับ httpsTrigger ซึ่งเป็นปลายทาง HTTP(S) ที่ใช้เรียกใช้ Cloud Function โดยควรมีลักษณะดังนี้ https://<region>-<project-id>.cloudfunctions.net/hello-monitor

ตอนนี้การทริกเกอร์ Cloud Function ควรจะง่ายเหมือนกับการใช้คำสั่ง 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 (คำขอ 5 รายการต่อวินาทีเป็นเวลา 2-3 นาที) ให้ใช้คำสั่งต่อไปนี้

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

5. ไปยังส่วนต่างๆ ของบันทึก

จากมุมมองรายละเอียด Cloud Functions ให้คลิกดูบันทึก

b24157fd3376e6a8.png

ซึ่งจะนำคุณไปยังส่วน Stackdriver Logging ของโปรเจ็กต์ โดยจะแสดงเฉพาะบันทึก Cloud Functions

5a36fa75d2fb0165.png

คำขอทั้งหมดที่ส่งไปยัง Cloud Functions ควรแสดงรหัสสถานะ 200

เมื่อดูบันทึก คุณจะทำสิ่งต่อไปนี้ได้

  • กรองตามระดับบันทึก (ในกรณีของคุณ บันทึกทั้งหมดอยู่ในระดับ debug)
  • เลือกกรอบเวลาที่เฉพาะเจาะจง (แบบสัมพัทธ์หรือแบบสัมบูรณ์)
  • เปิดใช้การสตรีมบันทึก (โดยมี Play 751a4600016f34a7.png ที่ด้านบนของหน้าจอ)
  • คัดลอกลิงก์ไปยังรายการบันทึก (สําหรับแชร์กับสมาชิกในทีม)
  • แสดงรายการบันทึกในบริบทของทรัพยากร
  • ปักหมุดรายการบันทึก (เป็นคิวภาพ)
  • ส่งออกบันทึกไปยัง BigQuery, Cloud Storage หรือ Pub/Sub (หรือดาวน์โหลดเป็นไฟล์ JSON หรือ CSV)

6. อัปเดตฟังก์ชัน

ใช้ Cloud Console เพื่อไปที่มุมมองรายละเอียดฟังก์ชัน และสังเกตการเพิ่มขึ้นที่คุณสร้างด้วยเครื่องมือทดสอบโหลดในจำนวนการเรียกใช้ต่อวินาทีและเวลาในการดำเนินการ

aaee3159bbe395d3.png 7ed347101da5eca0.png

เครื่องมืออีกอย่างที่ละเอียดกว่าในการสังเกตเวลาในการตอบสนองและการเรียก RPC คือ Stackdriver Trace แต่คุณต้องทำการเปลี่ยนแปลงเล็กน้อยใน Cloud Functions ก่อนจึงจะใช้เครื่องมือนี้ได้ ทำสิ่งต่อไปนี้:

  1. เพิ่มแพ็กเกจ node-emoji ที่ช่วยชีวิตเป็นทรัพยากร Dependency
  2. อัปเดตโค้ดฟังก์ชันเพื่อใช้โมดูล node-emoji และเพิ่มเวลาในการตอบสนอง
  3. เพิ่มตัวแปรสภาพแวดล้อมเพื่อเปิดใช้ Stackdriver Trace สำหรับ Cloud Functions

จากรายละเอียดฟังก์ชัน ให้คลิกแก้ไขเพื่อแก้ไขฟังก์ชัน

39b0f8f98b18a6c0.png

แก้ไขไฟล์ package.json เพื่อเพิ่มทรัพยากร Dependency สำหรับแพ็กเกจ 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 Functions ที่ชื่อ 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

ตอนนี้คุณก็พร้อมที่จะสังเกตรายการการติดตามที่สร้างขึ้นโดยไม่ต้องมีการตั้งค่าอื่นๆ และไม่ต้องมีไลบรารีการติดตามที่เฉพาะเจาะจงในโค้ดแล้ว

7. ติดตาม Cloud Function ที่อัปเดต

ใช้เมนูด้านซ้ายเพื่อไปที่รายการการติดตาม (ในส่วน Stackdriver Trace)

576373f38cad6f8.png

คุณควรเห็นข้อมูลที่มีลักษณะคล้ายกับภาพหน้าจอด้านล่าง

44a36b758b49f88f.png

ซึ่งจะทำให้เห็นได้ชัดว่าเวลาในการตอบสนองที่เกิดขึ้นใน Cloud Function นั้นวัดได้ 300 มิลลิวินาที

จุดแต่ละจุดในกราฟคือคำขอที่คุณดูข้อมูลโดยละเอียดได้ เช่น การประทับเวลา, วิธีการและสถานะ HTTP, ป้ายกำกับ, ลิงก์ไปยังรายการบันทึกที่เกี่ยวข้อง และการเรียก RPC ที่ตามมาซึ่ง Cloud Functions ทำ

5815064fec87444b.png

หากต้องการซูมเข้า เพียงคลิกและลากบนกราฟ การเลือกช่วงเวลาที่กำหนดเองในกราฟการติดตาม

หากต้องการซูมออก ให้คลิกเลิกทำซูมที่ด้านบนของหน้า

เนื่องจากคุณได้ติดตั้งใช้งาน Cloud Function เดียว กราฟจึงแสดงเฉพาะGETคำขอใน URI hello-monitor แต่คุณสามารถกรองการติดตามตามเมธอด HTTP (GET, POST, DELETE) ตามสถานะ HTTP (2XX, 3XX) หรือโดยใช้ตัวกรองคำขอ

ไปที่ภาพรวมในเมนูด้านซ้าย

e920cfca2a50899e.png

จากหน้าภาพรวมนี้ คุณจะเห็นร่องรอยล่าสุดและข้อมูลเชิงลึกอื่นๆ

ef5a45647967d275.png

นอกจากนี้ คุณยังสร้างรายงานที่กำหนดเองได้โดยอิงตามชุดค่าผสมของตัวกรองคำขอ URI, วิธี HTTP, สถานะ HTTP และช่วงเวลา และยังช่วยให้คุณเปรียบเทียบมูลค่าที่สร้างขึ้นกับเกณฑ์พื้นฐานตามเวลาได้อีกด้วย

5bd34e9d13b47fb6.png

หากตั้งค่าช่วงเวลาที่ถูกต้องโดยมีจุดข้อมูลเพียงพอ คุณจะสร้างรายงานที่แสดงการเปลี่ยนแปลงเวลาในการตอบสนองที่สำคัญระหว่าง Cloud Functions เริ่มต้นกับฟังก์ชันใหม่ได้

2cc0e9a3212b91bb.png

2e7b1ebf2f0a2b4f.png

คุณสามารถใช้รายงานที่กำหนดเองดังกล่าวเพื่อดูว่าปัญหาด้านประสิทธิภาพเกิดขึ้นเมื่อใด และเพื่อติดตามตัวบ่งชี้ระดับการให้บริการ (SLI) เช่น เวลาในการตอบสนองต่อคำขอของผู้ใช้ปลายทาง

8. ได้เวลาล้างข้อมูลทรัพยากรแล้ว

จบ Codelab แล้ว

แม้ว่าเครื่องมือ Cloud Functions และ Stackdriver จะเป็นแพลตฟอร์มแบบ Serverless ที่ไม่มีค่าใช้จ่ายเมื่อไม่ได้ใช้งาน แต่คุณก็ควรเป็นพลเมืองที่ดีของระบบคลาวด์และลบ Cloud Function เพียงเลือก hello-monitor ในภาพรวมในส่วน Cloud Functions แล้วคลิกลบ

aceb633cf70a4a27.png

9. ขั้นตอนต่อไปคืออะไร

โปรดอ่านข้อมูลเพิ่มเติมต่อไปนี้

/