เป้าหมายของ Codelab นี้คือการช่วยให้คุณเข้าใจวิธีใช้ประโยชน์จากเครื่องมือการบันทึกและการตรวจสอบที่มีให้สำหรับนักพัฒนา Cloud Functions ทุกคน เครื่องมือเหล่านี้มาพร้อมกับ Cloud Function ทุกฟังก์ชันที่คุณติดตั้งใช้งานในภาษาที่รองรับทั้งหมด และจะช่วยให้คุณทำงานได้อย่างมีประสิทธิภาพมากขึ้นเมื่อเขียนและใช้งานโค้ดแบบไร้เซิร์ฟเวอร์
เราจะใช้ฟังก์ชันที่ทริกเกอร์โดย HTTP ที่นี่ แต่ทุกอย่างที่เรากล่าวถึงยังใช้ได้กับภาษาอื่นๆ และฟังก์ชันที่ทริกเกอร์โดยเหตุการณ์อื่นๆ (ที่เก็บข้อมูล Pub/Sub ฯลฯ) ด้วย
การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง
หากยังไม่มีบัญชี Google (Gmail หรือ Google Apps) คุณต้องสร้างบัญชี ลงชื่อเข้าใช้คอนโซล Google Cloud Platform (console.cloud.google.com) แล้วสร้างโปรเจ็กต์ใหม่โดยทำดังนี้
โปรดจดจำรหัสโปรเจ็กต์ ซึ่งเป็นชื่อที่ไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมด (ชื่อด้านบนถูกใช้ไปแล้วและจะใช้ไม่ได้ ขออภัย) ซึ่งจะเรียกว่า PROJECT_ID
ในภายหลังใน Codelab นี้
จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร Google Cloud
การทำ Codelab นี้ไม่ควรมีค่าใช้จ่ายเกิน 2-3 ดอลลาร์ แต่ก็อาจมีค่าใช้จ่ายมากกว่านี้หากคุณตัดสินใจใช้ทรัพยากรเพิ่มเติมหรือปล่อยให้ทรัพยากรทำงานต่อไป (ดูส่วน "การล้างข้อมูล" ที่ท้ายเอกสารนี้)
ผู้ใช้ใหม่ของ Google Cloud Platform มีสิทธิ์ทดลองใช้ฟรี$300
Google Cloud Shell
แม้ว่าคุณจะใช้ Google Cloud Functions รวมถึงความสามารถในการบันทึกและการตรวจสอบจากแล็ปท็อปได้ แต่ในโค้ดแล็บนี้เราจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์
เครื่องเสมือนที่ใช้ Debian นี้มาพร้อมเครื่องมือพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 5 GB ที่คงอยู่ถาวร และทำงานบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก ซึ่งหมายความว่าคุณจะต้องมีเพียงเบราว์เซอร์เท่านั้นสำหรับโค้ดแล็บนี้ (ใช่แล้ว โค้ดแล็บนี้ใช้ได้ใน Chromebook)
หากต้องการเปิดใช้งาน Google Cloud Shell จากคอนโซลนักพัฒนาแอป ให้คลิกปุ่มที่ด้านขวาบน (ระบบจะจัดสรรและเชื่อมต่อกับสภาพแวดล้อมในเวลาเพียงไม่กี่นาที)
คลิกปุ่ม "เริ่ม Cloud Shell"
เมื่อเชื่อมต่อกับ Cloud Shell แล้ว คุณควรจะเห็นว่าคุณได้รับการตรวจสอบสิทธิ์แล้วและระบบได้ตั้งค่าโปรเจ็กต์เป็น 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
ตรวจสอบว่าคุณใช้รหัสใดในขั้นตอนการตั้งค่า หรือค้นหารหัสในแดชบอร์ดคอนโซล
สำคัญ: สุดท้าย ให้ตั้งค่าการกำหนดค่าโซนและโปรเจ็กต์เริ่มต้น
gcloud config set compute/zone us-central1-f
คุณเลือกโซนต่างๆ ได้หลากหลาย ดูข้อมูลเพิ่มเติมในเอกสารประกอบเกี่ยวกับภูมิภาคและโซน
มาสร้างฟังก์ชัน Cloud "Hello World" เพื่อให้มีสิ่งที่จะตรวจสอบกัน ในเมนูด้านซ้ายของคอนโซล ให้คลิก Cloud Functions แล้วคลิก "Create function
"
ตั้งชื่อฟังก์ชันใหม่ว่า "hello-monitor
" โดยทำดังนี้
... และคงค่าเริ่มต้นทั้งหมดสำหรับซอร์สโค้ด (คุณเลือกภาษา/รันไทม์อื่นได้หากต้องการ)
สุดท้าย ให้สร้างฟังก์ชันโดยใช้ปุ่ม "Create
" ดังนี้
หลังจากนั้นไม่นาน คุณจะเห็นฟังก์ชันแสดงเป็นพร้อมเรียกใช้ (ตามที่ระบุด้วยเครื่องหมายถูกสีเขียว) ดังนี้
ตอนนี้ฟังก์ชัน Cloud ได้รับการติดตั้งใช้งานเรียบร้อยแล้ว เราจะทดสอบจากบรรทัดคำสั่ง
ก่อนอื่น ให้ใช้ Cloud Shell เพื่อออกคำสั่งต่อไปนี้
$ gcloud functions describe hello-monitor
ซึ่งควรแสดงคำอธิบายของฟังก์ชัน รวมถึง URL สำหรับ httpsTrigger
ซึ่งเป็นปลายทาง HTTP(S) ที่ใช้เรียกใช้ฟังก์ชัน โดยควรอยู่ในรูปแบบ https://<region>-<project-id>.cloudfunctions.net/hello-monitor
ตอนนี้การเรียกใช้ฟังก์ชันควรจะง่ายเพียงแค่ curl
'ing URL นี้
$ curl https://<region>-<project-id>.cloudfunctions.net/hello-monitor Hello World!
ตอนนี้เราจะใช้ Vegeta ซึ่งเป็นเครื่องมือทดสอบการโหลด HTTP แบบง่าย หากต้องการติดตั้ง ให้พิมพ์คำสั่งต่อไปนี้จาก Cloud Shell
$ go get -u github.com/tsenart/vegeta
หากต้องการส่งการเข้าชมบางส่วนไปยังฟังก์ชัน Cloud (5 คำขอต่อวินาทีเป็นเวลา 2-3 นาที) ให้ใช้คำสั่งนี้
$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \ | vegeta attack -rate=5 -duration=120s \ > results.bin
จากมุมมองรายละเอียดฟังก์ชัน ให้คลิกเมนูด้านขวา "ดูบันทึก" ดังนี้
ซึ่งจะนำคุณไปยังส่วน Stackdriver Logging ของโปรเจ็กต์ โดยจะแสดงเฉพาะบันทึกของ Cloud Functions
เราหวังว่าคำขอทั้งหมดที่ส่งไปยังฟังก์ชันของคุณจะแสดงรหัสสถานะ 200
โปรแกรมดูบันทึกนี้ช่วยให้คุณทำสิ่งต่อไปนี้ได้
- กรองตามระดับบันทึก (ในกรณีของเรา บันทึกทั้งหมดอยู่ในระดับ
Debug
) - เลือกกรอบเวลาที่เฉพาะเจาะจง (แบบสัมพัทธ์หรือแบบสัมบูรณ์)
- เปิดใช้การสตรีมบันทึก ("ปุ่มเล่น" ที่ด้านบนของหน้าจอ)
- คัดลอกลิงก์ไปยังรายการบันทึก (เพื่อแชร์กับสมาชิกในทีม)
- แสดงรายการบันทึกในบริบทของทรัพยากร
- ปักหมุดรายการบันทึก (เป็นคิวภาพ)
- ส่งออกบันทึกไปยัง BigQuery, Cloud Storage หรือ Cloud Pub/Sub (หรือเพียงดาวน์โหลดในรูปแบบ JSON หรือ CSV)
นอกจากนี้ โปรดทราบว่าเครื่องมือเลือกด้านซ้ายบนยังช่วยให้คุณกรองบันทึกตามฟังก์ชันได้ด้วย นอกจากนี้ คุณยังค้นหาป้ายกำกับหรือค้นหาข้อความแบบเต็มได้ในแถบค้นหาที่ด้านบนของหน้าต่าง ในกรณีของเรา ป้ายกำกับคือ hello-monitor
(ชื่อฟังก์ชัน) รวมถึงตัวระบุการดำเนินการสำหรับคำขอแต่ละรายการ
นอกจากนี้ยังคัดลอกตัวกรองเพื่อแชร์ได้ด้วย (ดูเมนูแบบเลื่อนลงในช่องค้นหา)
ใช้คอนโซลเพื่อไปยังมุมมอง "รายละเอียดฟังก์ชัน" และสังเกตการเพิ่มขึ้นที่เราสร้างขึ้นด้วยเครื่องมือทดสอบการโหลด ทั้งในแง่ของจำนวนการเรียกใช้ต่อวินาทีและเวลาในการดำเนินการ
เครื่องมืออีกอย่างที่ละเอียดกว่าในการสังเกตเวลาในการตอบสนองและการเรียก RPC คือฟีเจอร์ Stackdriver Trace แต่ก่อนที่จะใช้ฟีเจอร์นี้ได้ เราต้องทำการเปลี่ยนแปลงฟังก์ชันบางอย่างก่อน ได้แก่
- เพิ่มแพ็กเกจ
node-emoji
ที่ช่วยชีวิตเป็นทรัพยากร Dependency - อัปเดตโค้ดฟังก์ชันเพื่อใช้โมดูล node-emoji และเพิ่มเวลาในการตอบสนอง
- เพิ่มตัวแปรสภาพแวดล้อมเพื่อเปิดใช้ Stackdriver Trace สำหรับ Cloud Functions
จากหน้า "รายละเอียดฟังก์ชัน" ให้คลิกแก้ไขเพื่อแก้ไขฟังก์ชัน
แก้ไขไฟล์ 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 Functions ที่ชื่อ 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
ตอนนี้เราพร้อมที่จะสังเกตรายการการติดตามที่สร้างขึ้นโดยไม่มีข้อกำหนดในการตั้งค่าอื่นๆ และไม่มีไลบรารีการติดตามที่เฉพาะเจาะจงในโค้ดของคุณแล้ว
ใช้เมนูด้านซ้ายมือเพื่อไปที่รายการการติดตาม (ในส่วน Stackdriver Trace) โดยทำดังนี้
คุณควรเห็นสิ่งที่คล้ายกับภาพหน้าจอนี้
ซึ่งจะทำให้เห็นได้อย่างชัดเจนว่าเวลาในการตอบสนองที่เกิดขึ้นในฟังก์ชันของเราวัดได้ 300 มิลลิวินาที
จุดแต่ละจุดในกราฟนี้คือคำขอที่คุณดูข้อมูลโดยละเอียดได้ เช่น การประทับเวลา เมธอดและสถานะ HTTP ป้ายกำกับ ลิงก์กลับไปยังรายการบันทึกที่เกี่ยวข้อง และการเรียก RPC ที่ตามมาซึ่งฟังก์ชันสร้างขึ้น
หากต้องการซูมเข้า เพียงคลิกและลากบนกราฟ :
หากต้องการซูมออก ให้คลิกปุ่ม "เลิกทำซูม" ที่ด้านบนของหน้า
เนื่องจากเราได้ติดตั้งใช้งานฟังก์ชันเดียว กราฟจึงแสดงเฉพาะคำขอ GET
ใน URI hello-monitor
แต่คุณสามารถกรองการติดตามตามเมธอด HTTP (GET, POST, DELETE, ...) ตามสถานะ HTTP (2XX, 3XX, ...) หรือโดยใช้ตัวกรองคำขอ
ตอนนี้ให้ไปที่ส่วน "ภาพรวม" ของการติดตามในเมนูด้านซ้าย
จากหน้าภาพรวมนี้ คุณจะดูร่องรอยล่าสุดและข้อมูลเชิงลึกอื่นๆ ได้
... รวมถึงความสามารถในการสร้างรายงานที่กำหนดเองตามชุดค่าผสมของตัวกรองคำขอ URI, วิธี HTTP, สถานะ HTTP และช่วงเวลา และยังช่วยให้คุณเปรียบเทียบค่าที่สร้างขึ้นกับเกณฑ์พื้นฐานเวลาได้ด้วย
หากตั้งค่าช่วงเวลาที่ถูกต้องและมีจุดข้อมูลเพียงพอ คุณจะสร้างรายงานที่แสดงการเปลี่ยนแปลงเวลาในการตอบสนองที่สำคัญระหว่างฟังก์ชันเริ่มต้นกับฟังก์ชันใหม่ได้
คุณสามารถใช้รายงานที่กำหนดเองดังกล่าวเพื่อดูว่าปัญหาด้านประสิทธิภาพเกิดขึ้นเมื่อใด รวมถึงติดตามตัวชี้วัดระดับการให้บริการ (SLI) เช่น เวลาในการตอบสนองต่อคำขอของผู้ใช้ปลายทาง
จบ Codelab นี้แล้ว ซึ่งครอบคลุมการทำให้ Cloud Function ใหม่ใช้งานได้ การไปยังส่วนต่างๆ ของบันทึก และการสังเกตร่องรอยคำขอ
แม้ว่าเครื่องมือ Cloud Functions และ Stackdriver จะเป็นแพลตฟอร์มแบบไร้เซิร์ฟเวอร์ซึ่งจะไม่มีค่าใช้จ่ายเมื่อไม่ได้ใช้งาน แต่เพื่อเป็นพลเมืองที่ดีของระบบคลาวด์ เรามาลบฟังก์ชันกัน
เพียงเลือกฟังก์ชัน hello-monitor
ในหน้าภาพรวมของ Cloud Functions แล้วคลิก "ลบ"
จบ Codelab การเริ่มต้นใช้งาน Cloud Functions Logging และการติดตามอย่างง่ายนี้แล้ว
โปรดอ่านข้อมูลเพิ่มเติมต่อไปนี้
- เมตริกตามบันทึกของ Stackdriver Monitoring
- Stackdriver Error Reporting
- ... หรือ Codelab อื่นๆ จากหมวดหมู่ Serverless
/