Slash ทำรายได้ประจำปีทะลุ 150 ล้านดอลลาร์

เรียนรู้เพิ่มเติม

ประเภทความท้าทาย: การแสดงตัวอย่างบันทึกของ Datadog

สร้างลิงก์ไปยังบันทึกที่มีตัวกรองสำหรับ Datadog พร้อมด้วยประเภทข้อมูลแบบ Typescript

ที่ Slash เราชอบสำรวจสิ่งที่เราสามารถทำได้ด้วยระบบประเภทของ Typescript เพื่อทำให้โค้ดของเรามีความปลอดภัยทางประเภทและรักษาได้มากขึ้น แม้ว่าการใช้ความปลอดภัยทางประเภททั้งหมดจะไม่เป็นประโยชน์ในทางปฏิบัติจริงๆ แต่เราพบว่ามันน่าสนใจและสนุก และเมื่อมันไม่ส่งผลกระทบต่อการรักษา เราอาจเก็บมันไว้ในฐานโค้ดของเราเป็น "ไข่อีสเตอร์" บ้างเป็นครั้งคราว

หากคุณมีวิธีแก้ไข กรุณาส่งมาให้เราที่ engineering@slash.com.

ภาพรวม

เราให้คำนิยาม "บันทึกข้อมูลที่มีโครงสร้าง" (structured logs) ในโค้ด และยังกำหนดเมตริกที่เกี่ยวข้องบนพื้นฐานของบันทึกเหล่านั้น ซึ่งช่วยให้เราสามารถสร้างแดชบอร์ดและตั้งค่าการแจ้งเตือนอัตโนมัติได้ บน Datadog การกำหนดเมตริกบนพื้นฐานของบันทึกข้อมูลเรียกว่า เมตริกบันทึก. เมตริกแบบล็อกถูกสร้างขึ้นพร้อมตัวกรองและกฎการรวมข้อมูลเพื่อกำหนดวิธีการดึงเมตริกจากล็อก

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

ความท้าทาย

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

นี่คือของ Datadog เอกสาร เกี่ยวกับวิธีการทำงานของไวยากรณ์การค้นหาในบันทึกของพวกเขา บันทึกที่สามารถค้นหาได้ทั้งหมดยังสามารถเข้ารหัสใน URL ที่พวกเขาเปิดเผยได้อีกด้วย โดยทั่วไปแล้วตัวกรองที่เข้ารหัสใน URL สำหรับบันทึกจะทำงานดังนี้:

  1. URL พื้นฐานคือ https://app.datadoghq.com/logs
  2. มีพารามิเตอร์การค้นหาเพียงหนึ่งตัว คำค้นหา ที่รองรับสตริงที่เข้ารหัส URL ของคำค้นหาทั้งหมด

ด้านล่างนี้แสดงตัวอย่างของรูปแบบข้อมูลนำเข้า -> ข้อมูลส่งออก ตัวอย่างทั้งหมดจะแสดงตัวกรองในรูปแบบสตริงที่ไม่ได้เข้ารหัสตาม URI:

  1. เป้าหมาย: "ใช้ระยะเวลาเท่ากับ 100" -> ผลลัพธ์: query=@duration:100
  2. เป้าหมาย: "ใช้ระยะเวลาที่ยาวนานกว่า 100" -> ผลลัพธ์: query=@duration:>100
  3. เป้าหมาย: "apply http.status_code is not 200" -> ผลลัพธ์: query=-@http.status_code:200
  4. เป้าหมาย: "apply http.status_code is 200 or 400" -> ผลลัพธ์: query=(@http.status_code:200 OR @http.status_code:400)
  5. เป้าหมาย: "การ apply http.route เปรียบเสมือน /api/v1/_" -> ผลลัพธ์: query=@http.route:/api/v1/_

Read more from us