การแจ้งเตือน: ข้อผิดพลาดจากการบันทึกไปยังหัวข้อ Pub/Sub

1. บทนำ

อัปเดตล่าสุดวันที่ 21 มิ.ย. 2023

การแจ้งเตือนข้อผิดพลาดตามบันทึกสำหรับความพร้อมใช้งาน

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

แม้ว่าการตรวจสอบระยะเวลาทำงานจะให้ภาพรวมทั่วไปเกี่ยวกับความพร้อมใช้งาน แต่การใช้ข้อความแสดงข้อผิดพลาดที่ได้จากบันทึกเป็นตัวบ่งชี้ประเภทความไม่พร้อมใช้งานที่เฉพาะเจาะจงยิ่งขึ้น และเพื่อให้ทราบสัดส่วนของผู้ใช้ที่พบปัญหาอาจแม่นยำกว่า

ข้อผิดพลาดสามารถเกิดขึ้นได้จากหลายสาเหตุ ตั้งแต่ข้อผิดพลาดของผู้ใช้ไปจนถึงการบำรุงรักษาระบบ การอัปเกรด หรือแม้แต่ปัจจัยภายนอกระบบ เช่น สภาพอากาศที่ไม่ดี สิ่งสำคัญในการแจ้งเตือนไม่ใช่การพยายามคาดการณ์สาเหตุที่เป็นไปได้ทั้งหมด แต่ต้องเลือกอาการหลักๆ ที่เป็นจุดเริ่มต้นสำหรับการแก้ปัญหา

หัวข้อ Pub/Sub ในฐานะช่องทางการแจ้งเตือน

หัวข้อ Pub/Sub สามารถใช้เป็นช่องทางการแจ้งเตือนของ Google Cloud Monitoring เพื่อส่งการแจ้งเตือนไปยังการสมัครใช้บริการ Pub/Sub วิธีนี้ช่วยให้คุณผสานรวมการแจ้งเตือน Cloud Monitoring กับระบบอื่นๆ รวมถึงบริการการแจ้งเตือนของบุคคลที่สามได้

หากต้องการใช้หัวข้อ Pub/Sub เป็นช่องทางการแจ้งเตือน ก่อนอื่นคุณต้องสร้างหัวข้อ Pub/Sub และการสมัครใช้บริการ Pub/Sub จากนั้น คุณต้องสร้างช่องทางการแจ้งเตือนของ Cloud Monitoring ที่ใช้หัวข้อ Pub/Sub เป็นปลายทาง

เมื่อมีการทริกเกอร์การแจ้งเตือน Cloud Monitoring จะส่งข้อความไปยังหัวข้อ Pub/Sub จากนั้น ผู้สมัครใช้บริการ Pub/Sub จะประมวลผลข้อความและดำเนินการตามความเหมาะสมได้

สิ่งที่คุณจะสร้าง

ใน Codelab นี้ คุณจะทำให้แอปใช้งานได้ สร้างหัวข้อ Pub/Sub และสร้างการแจ้งเตือนตามบันทึกที่จะตรวจสอบข้อผิดพลาดในส่วนที่เจาะจงของแอป และใช้หัวข้อ Pub/Sub เป็นช่องทางการแจ้งเตือน

สิ่งที่คุณจะได้เรียนรู้

  • วิธีสร้างหัวข้อ Pub/Sub
  • วิธีสร้างการแจ้งเตือนที่อิงตามบันทึก

Codelab นี้มุ่งเน้นไปที่การสร้างการแจ้งเตือนข้อผิดพลาด แนวคิดและโค้ดแอปพลิเคชันที่ไม่เกี่ยวข้องจะปกปิดไว้ และมีไว้เพื่อให้คุณคัดลอกและวางเท่านั้น

สิ่งที่คุณต้องมี

  • บัญชี Google Cloud ที่มีสิทธิ์ในการดำเนินการต่อไปนี้
  • ทำให้แอปพลิเคชัน Cloud Run ใช้งานได้
  • สร้างหัวข้อ Pub/Sub
  • สร้างการแจ้งเตือน

2. การตั้งค่า

เลือกหรือสร้างโปรเจ็กต์ Google Cloud

หากต้องการเลือกโปรเจ็กต์ที่มีอยู่ ให้ใช้เมนูแบบเลื่อนลงดังนี้

b35bf95b8bf3d5d8.png

หากต้องการสร้างโปรเจ็กต์ใหม่ใน Google Cloud ให้ทำตามขั้นตอนต่อไปนี้

  1. ไปที่คอนโซล Google Cloud Platform
  2. คลิกปุ่มสร้างโปรเจ็กต์
  3. ป้อนชื่อโครงการ
  4. เลือกบัญชีสำหรับการเรียกเก็บเงินสำหรับโปรเจ็กต์
  5. คลิกที่ปุ่มสร้าง

ระบบจะสร้างโปรเจ็กต์ขึ้นและระบบจะนำคุณไปยังแดชบอร์ดโปรเจ็กต์ จากนั้นคุณจะเริ่มใช้บริการต่างๆ ของ Google Cloud ได้

ต่อไปนี้คือรายละเอียดเพิ่มเติมบางส่วนเกี่ยวกับแต่ละขั้นตอน

  • ชื่อ: ชื่อโปรเจ็กต์ต้องไม่ซ้ำกันภายในองค์กร
  • บัญชีสำหรับการเรียกเก็บเงิน: คุณจะใช้บัญชีสำหรับการเรียกเก็บเงินที่มีอยู่หรือสร้างบัญชีใหม่ก็ได้
  • สร้าง: เมื่อป้อนข้อมูลที่จำเป็นทั้งหมดแล้ว ให้คลิกปุ่มสร้างเพื่อสร้างโครงการ

โปรดดูข้อมูลเพิ่มเติมในเอกสารประกอบเกี่ยวกับการสร้างโปรเจ็กต์ของ Google Cloud

3. ทำให้แอปพลิเคชัน API ใช้งานได้

แอปพลิเคชันหรือ API ตัวอย่างเกี่ยวกับอะไร

แอปพลิเคชันของเราเป็นแอปพลิเคชัน Inventory API แบบง่ายๆ ที่แสดงปลายทาง REST API พร้อมด้วยการดำเนินการ 2 รายการเพื่อแสดงรายการสินค้าคงคลังและนับจำนวนสินค้าคงคลังของสินค้าที่เฉพาะเจาะจง

เมื่อเราทำให้ API ใช้งานได้และสมมติว่า API โฮสต์อยู่ที่ https://<somehost> เราสามารถเข้าถึงปลายทาง API ได้ดังนี้

https://<somehost>/inventory

ซึ่งจะแสดงรายการผลิตภัณฑ์ทั้งหมดตามระดับสินค้าคงคลังที่มี

https://<somehost>/inventory/{productid}

การดำเนินการนี้จะเป็นเพียงบันทึกเดียวพร้อมด้วยรหัสผลิตภัณฑ์และระดับสินค้าคงคลังที่มีอยู่สำหรับผลิตภัณฑ์นั้น

ข้อมูลการตอบกลับที่แสดงจะเป็นรูปแบบ JSON

หมายเหตุ: แอปพลิเคชัน API นี้ใช้สำหรับการสาธิตเท่านั้น และไม่ได้แสดงถึงการใช้งาน API ที่ปลอดภัยและมีประสิทธิภาพ จุดประสงค์ของห้องทดลองคือการดำเนินการของ Google Cloud เพื่อให้เรามีแอปพลิเคชันที่พร้อมใช้งานได้อย่างรวดเร็ว

ข้อมูลตัวอย่างและคำขอ/การตอบกลับ API

แอปพลิเคชันไม่ได้ขับเคลื่อนโดยฐานข้อมูลที่แบ็กเอนด์เพื่อทำให้สิ่งต่างๆ ง่ายขึ้น ซึ่งมีรหัสผลิตภัณฑ์ตัวอย่าง 3 รหัสและระดับสินค้าคงคลังที่มีขาย

รหัสผลิตภัณฑ์

ระดับสินค้าคงคลังในมือ

I-1

10

I-2

20

I-3

30

ตัวอย่างคำขอและการตอบกลับ API แสดงอยู่ด้านล่าง

คำขอ API

การตอบกลับจาก API

https://&lt;somehost&gt;/inventory

[ { &quot;I-1&quot;: 10, &quot;I-2&quot;: 20, &quot;I-3&quot;: 30 }]

https://&lt;somehost&gt;/inventory/I-1

{ &quot;productid&quot;: &quot;I-1&quot;, &quot;qty&quot;: 10}

https://&lt;somehost&gt;/inventory/I-2

{ &quot;productid&quot;: &quot;I-2&quot;, &quot;qty&quot;: 20}

https://&lt;somehost&gt;/inventory/I-200

{ &quot;productid&quot;: I-200, &quot;qty&quot;: -1}

โคลนที่เก็บ

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

จากคอนโซล GCP ให้คลิกไอคอน Cloud Shell บนแถบเครื่องมือด้านขวาบนดังนี้

bce75f34b2c53987.png

การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมนี้ควรใช้เวลาเพียงครู่เดียว เมื่อเสร็จแล้ว คุณจะเห็นข้อมูลต่อไปนี้

f6ef2b5f13479f3a.png

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

ตั้งค่า gcloud

ใน Cloud Shell ให้กำหนดรหัสโปรเจ็กต์และบันทึกเป็นตัวแปรของ PROJECT_ID

PROJECT_ID=[YOUR-PROJECT-ID]

gcloud config set project $PROJECT_ID

จากนั้นเรียกใช้คำสั่งต่อไปนี้

$ git clone https://github.com/rominirani/cloud-code-sample-repository.git

การดำเนินการนี้จะสร้างโฟลเดอร์ชื่อ cloud-code-sample-repository ในโฟลเดอร์นี้

(ไม่บังคับ) เรียกใช้แอปพลิเคชันบน Cloud Shell

คุณสามารถเรียกใช้แอปพลิเคชันในเครื่องได้โดยทำตามขั้นตอนต่อไปนี้

  1. จากเทอร์มินัล ให้ไปที่ API เวอร์ชัน Python โดยใช้คำสั่งต่อไปนี้

$ cd cloud-code-sample-repository

$ cd python-flask-api

  1. ป้อนคำสั่งต่อไปนี้ในเทอร์มินัล (ในขณะที่เขียน Cloud Shell จะมาพร้อมกับ Python 3.9.x ติดตั้งอยู่ และเราจะใช้เวอร์ชันเริ่มต้น หากวางแผนที่จะเรียกใช้ในเครื่องบนแล็ปท็อป คุณสามารถใช้ Python 3.8 ขึ้นไป) ดังนี้

$ python app.py

  1. คุณเรียกใช้คำสั่งต่อไปนี้เพื่อเริ่มต้นเซิร์ฟเวอร์ Python ในเครื่องได้

1f798fbddfdc2c8e.png 46edf454cc70c5a6.png

คลิก "แสดงตัวอย่าง" บนพอร์ต 8080 5. หน้าต่างเบราว์เซอร์จะเปิดขึ้นมา คุณจะเห็นข้อผิดพลาด 404 ซึ่งไม่เป็นไร แก้ไข URL และเปลี่ยนให้มีแค่ /inventory หลังชื่อโฮสต์

เช่น ในเครื่องของฉันจะมีลักษณะดังนี้

https://8080-cs-557561579860-default.cs-asia-southeast1-yelo.cloudshell.dev/inventory

ซึ่งจะแสดงรายการสินค้าคงคลังตามที่อธิบายไว้ก่อนหน้านี้

709d57ee2f0137e4.png

  1. คุณสามารถหยุดเซิร์ฟเวอร์ได้ในขั้นตอนนี้ โดยไปที่เทอร์มินัลและกด Ctrl-C

ทำให้แอปพลิเคชันใช้งานได้

ตอนนี้เราจะทำให้แอปพลิเคชัน API นี้ใช้งานได้ใน Cloud Run กระบวนการที่เกี่ยวข้องกับการใช้ไคลเอ็นต์บรรทัดคำสั่ง gcloud เพื่อเรียกใช้คำสั่งเพื่อทำให้โค้ดใช้งานได้ใน Cloud Run

ระบุคำสั่ง gcloud ต่อไปนี้จากเทอร์มินัล

$ gcloud run deploy --source .

บทความนี้ถามคำถามหลายข้อและกล่าวถึงประเด็นต่อไปนี้

  1. ชื่อบริการ (python-flask-api): ใช้ชื่อค่าเริ่มต้นนี้หรือเลือกบางอย่าง เช่น my-inventory-api
  2. API [run.googleapis.com] ไม่ได้เปิดใช้ในโปรเจ็กต์ [613162942481] ต้องการเปิดใช้แล้วลองอีกครั้งไหม (ซึ่งจะใช้เวลาสักครู่) (ใช่/ไม่ใช่) Y
  3. โปรดระบุภูมิภาค: เลือก 31 (us-west-1)
  4. API [artifactregistry.googleapis.com] ในโปรเจ็กต์ [613162942481] ต้องการเปิดใช้แล้วลองอีกครั้งไหม (ซึ่งจะใช้เวลาสักครู่) (ใช่/ไม่ใช่) Y
  5. การทำให้ใช้งานได้จากต้นทางต้องใช้ที่เก็บ Artifact Registry Docker เพื่อจัดเก็บคอนเทนเนอร์ที่สร้างขึ้น ระบบจะสร้างที่เก็บชื่อ [cloud-run-source-deploy] ในภูมิภาค [us-west1]
  6. คุณต้องการดำเนินการต่อหรือไม่ (ใช่/ไม่ใช่) Y
  7. อนุญาตการเรียกใช้ที่ไม่ผ่านการตรวจสอบสิทธิ์แก่ [my-inventory-api] (y/N) ไหม Y

ท้ายที่สุดแล้ว การดำเนินการนี้จะเริ่มต้นกระบวนการนำซอร์สโค้ดของคุณ สร้างคอนเทนเนอร์ พุชไปยัง Artifact Registry จากนั้นจึงทำให้บริการ Cloud Run + การแก้ไขใช้งานได้ คุณควรอดใจรอตามกระบวนการนี้ (อาจใช้เวลา 3-4 นาที) และคุณจะเห็นการดำเนินการเสร็จสมบูรณ์แล้วพร้อมกับแสดง URL ของบริการที่ปรากฏ

ตัวอย่างการเรียกใช้จะแสดงที่ด้านล่างนี้

87ba8dbf88e8cfa4.png

ทดสอบแอปพลิเคชัน

เมื่อเราทำให้แอปพลิเคชันใช้งานได้ใน Cloud Run แล้ว คุณจะเข้าถึงแอปพลิเคชัน API ได้ดังนี้

  1. จด URL ของบริการจากขั้นตอนก่อนหน้าไว้ เช่น รหัสจะแสดงเป็น https://my-inventory-api-bt2r5243dq-uw.a.run.app ในการตั้งค่า มาเรียกสิ่งนี้ว่า <SERVICE_URL>
  2. เปิดเบราว์เซอร์และเข้าถึง URL 3 รายการต่อไปนี้สำหรับปลายทาง API
  3. <SERVICE_URL>/inventory
  4. <SERVICE_URL>/inventory/I-1
  5. <SERVICE_URL>/inventory/I-100

ซึ่งควรตรงกับข้อกำหนดที่เราได้แจ้งไว้ในส่วนก่อนหน้านี้ โดยมีตัวอย่างคำขอและการตอบกลับ API

รับรายละเอียดบริการจาก Cloud Run

เราทำให้บริการ API ใช้งานได้กับ Cloud Run ซึ่งเป็นสภาพแวดล้อมการประมวลผลแบบ Serverless เราไปที่บริการ Cloud Run ผ่านคอนโซล Google Cloud ได้ทุกเมื่อ

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

2633965c4bc957cc.png

คลิกชื่อบริการเพื่อดูรายละเอียด รายละเอียดตัวอย่างแสดงอยู่ด้านล่าง

33042ae64322ce07.png

โปรดสังเกต URL ซึ่งไม่ใช่ URL ของบริการที่คุณสามารถเจาะเข้าไปในเบราว์เซอร์และเข้าถึง Inventory API ที่เราเพิ่งทำให้ใช้งานได้ ดูเมตริกและรายละเอียดอื่นๆ

มาเริ่มกันที่ Google Cloud Operations Suite เลย

4. สร้างหัวข้อ Pub/Sub เพื่อรับการแจ้งเตือน

หากต้องการสร้างหัวข้อ Pub/Sub โปรดทำตามขั้นตอนต่อไปนี้ใน Google Cloud Console

  1. ค้นหา Pub/Sub ในช่องค้นหา และไปที่ Pub/Sub 935028bd8f6328ef.png
  2. หากคุณยังไม่ได้อยู่ที่แท็บนี้ ให้คลิกแท็บหัวข้อ 7fd8bf91386a88fd.png
  3. คลิกปุ่มสร้างหัวข้อ cd9d197f9023c41b.png
  4. ป้อนชื่อที่เป็นที่รู้จักสำหรับหัวข้อของคุณ

173f313b4a3c4934.png

  1. คลิกปุ่มสร้าง ca9a02477da21a44.png
  2. คัดลอกชื่อหัวข้อโดยใช้ปุ่มไอคอนคัดลอก เนื่องจากคุณต้องใช้สำหรับส่วนถัดไป

20848252ee83df93.png

5. สร้างนโยบายการแจ้งเตือนสำหรับข้อผิดพลาด

กำลังสำรวจบันทึกข้อผิดพลาด

วิธีดูบันทึกข้อผิดพลาดสำหรับแอปพลิเคชัน

คลิกแท็บการบันทึก

ซึ่งจะแสดงอินเทอร์เฟซบันทึกที่คุณสามารถเลือก/ยกเลิกการเลือกทรัพยากรต่างๆ โดยเฉพาะ (โปรเจ็กต์, ทรัพยากรของ Google Cloud, ชื่อบริการ ฯลฯ) รวมถึงระดับการบันทึกเพื่อกรองข้อความบันทึกได้ตามต้องการ

6605b68395185b89.png

จำลองคำขอที่ไม่ถูกต้อง 2-3 รายการที่ส่งไปยังบริการสินค้าคงคลังโดยระบุรหัสผลิตภัณฑ์ที่ไม่ใช่หนึ่งใน I-1, I-2 และ I-3 เช่น คำขอที่ไม่ถูกต้อง

https://&lt;SERVICE_URL&gt;/inventory/I-999

ตอนนี้เราจะค้นหา WARNINGs ทั้งหมด ที่ API ของเราสร้างขึ้น เมื่อมีการระบุ ID ผลิตภัณฑ์ที่ไม่ถูกต้อง ในการค้นหา

การสร้างนโยบายการแจ้งเตือนตามบันทึกที่กำหนดเองสำหรับข้อผิดพลาด

สมมติว่าเราต้องการเฝ้าระวังข้อความแสดงข้อผิดพลาดที่เจาะจงมากสำหรับส่วนหนึ่งของแอปพลิเคชัน สมมติว่าเราสังเกตเห็นข้อผิดพลาดจำนวนมากในการค้นหารหัสผลิตภัณฑ์ ปัญหานี้เป็นอาการของหลายๆ ปัญหาที่อาจเกิดขึ้น (ลิงก์ไม่ถูกต้อง ฐานข้อมูลไม่สอดคล้องกัน หรือบ็อตที่แจกแจงเว็บไซต์ของเรา) แม้ว่าการคาดเดาสาเหตุที่เป็นไปได้ทั้งหมดอาจเป็นเรื่องยากหรือจะเป็นไปไม่ได้ แต่ใบสมัครที่ส่งข้อความนี้แม้แต่ครั้งเดียวก็เป็นปัญหาระดับสูงที่เราอยากทราบ ในการแจ้งเตือนเรื่องนี้ เราต้องสร้างนโยบายตามข้อมูลในบันทึกข้อผิดพลาดของเรา

  1. ในช่องข้อความค้นหา ให้แทรกพารามิเตอร์การค้นหาต่อไปนี้

resource.type=&quot;cloud_run_revision&quot;

textPayload =~ "คำเตือนในแอป: ได้รับคำขอสินค้าคงคลังสำหรับรหัสผลิตภัณฑ์ที่ไม่ถูกต้อง"

ซึ่งควรมีหน้าตาเช่นนี้

f672154cfebf0051.png

  1. คลิกเรียกใช้การค้นหา จากนั้นจะแสดงคำขอทั้งหมดที่ส่งเข้ามาและที่มีปัญหานี้

77c190e3a2fab6bf.png

  1. หากต้องการแปลงข้อมูลข้างต้นเป็นการแจ้งเตือน ให้คลิกปุ่มสร้างการแจ้งเตือนที่คุณเห็นในเครื่องมือสำรวจบันทึกใต้ช่องการค้นหาทางด้านขวา

4cd3fcf142189376.png

  1. ซึ่งจะเป็นการเปิดแบบฟอร์มเพื่อสร้างนโยบายการแจ้งเตือนตามบันทึก

b82446854bad87fc.png

  1. ใช้การค้นหาเริ่มต้นสำหรับบันทึกเพื่อรวมไว้ในการแจ้งเตือน

resource.type="cloud_run_revision"

textPayload =~ "WARNING in app: Received inventory request for incorrect productid"

764227db73ec3de6.png

  1. กำหนดความถี่ของการแจ้งเตือนและระยะเวลาของเหตุการณ์ ในตัวอย่างนี้ คุณสามารถใช้ค่าต่ำสุดสำหรับแต่ละสิ่งต่อไปนี้ได้

bb3d96448ec998a1.png

  1. สุดท้าย ส่วน "ใครควรได้รับการแจ้งเตือน" เลือกช่องทางการแจ้งเตือน Pub/Sub ที่คุณสร้างไว้ก่อนหน้านี้

3593c48c29d4b76c.png

  1. คลิกบันทึก หากต้องการดูและจัดการนโยบายการแจ้งเตือน ให้ไปที่หน้าการแจ้งเตือน และตรวจสอบภายใต้นโยบาย ca08ea380fb37c91.png

6. ขอแสดงความยินดี

ขอแสดงความยินดี คุณได้กำหนดค่าการตรวจสอบระยะเวลาทำงานให้ส่งการแจ้งเตือนไปยัง Pub/Sub เรียบร้อยแล้ว