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

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

เกี่ยวกับ Codelab นี้

subjectอัปเดตล่าสุดเมื่อ ต.ค. 7, 2020
account_circleเขียนโดย Googler

1 บทนำ

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

5815064fec87444b.png

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

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

การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก

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

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

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

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

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

Cloud Shell

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

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

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

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARe01A

Screen Shot 14-06-2017 เวลา 22.13.43 น.

เมื่อเชื่อมต่อกับ 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 ในเมนูด้านซ้ายของ Google Cloud Console ให้คลิก Cloud Functions แล้วคลิกสร้างฟังก์ชัน

3c13aa20af602aa7.png

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

fa6816c96d6d5b94.png

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

7aadf164450484e.png

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

dc74cd21000d6c91.png

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

5363a34eb001d5ed.png

4 ทดสอบ Cloud Function และส่งการรับส่งข้อมูลโดยใช้ตัวสร้างโหลด

เมื่อทำให้ Cloud Function ใช้งานได้เรียบร้อยแล้ว ให้ทดสอบจากบรรทัดคำสั่ง

ก่อนอื่นให้ใช้คำสั่งต่อไปนี้โดยใช้ 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 นาที) ให้ใช้คำสั่งต่อไปนี้

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

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

คลิกดูบันทึกจากมุมมองรายละเอียดของ Cloud Function

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 ให้ไปที่มุมมองรายละเอียดฟังก์ชัน แล้วสังเกตการเพิ่มขึ้นอย่างรวดเร็วที่คุณสร้างขึ้นด้วยผู้ทดสอบการโหลดของจำนวนการเรียกใช้ต่อวินาทีและเวลาดำเนินการ

aaee3159bbe395d3.png 7ed347101da5eca0.png

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

  1. เพิ่มแพ็กเกจ node-emoji แบบประหยัดค่าใช้จ่ายเป็นทรัพยากร Dependency
  2. อัปเดตรหัสฟังก์ชันเพื่อใช้โมดูลอีโมจิของโหนดและแนะนำเวลาในการตอบสนอง
  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 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

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

7 ติดตาม Cloud Function ที่อัปเดตแล้ว

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

576373f38cad6f8.png

คุณควรจะเห็นสิ่งที่คล้ายกับภาพหน้าจอต่อไปนี้

44a36b758b49f88f.png

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

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

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 Function เริ่มต้นและฟังก์ชันใหม่ได้

2cc0e9a3212b91bb.png

2e7b1ebf2f0a2b4f.png

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

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

Codelab จบลงเพียงเท่านี้

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

aceb633cf70a4a27.png