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