เนมสเปซคืออะไร
ทุกสิ่งที่เกิดขึ้นในแอปพลิเคชันที่ตรวจสอบด้วย AppSignal จะถูกบันทึกภายใต้เนมสเปซ เนมสเปซทำงานเหมือนโฟลเดอร์ การจัดกลุ่มเหตุการณ์ ปัญหา และการตรวจสอบข้อมูลเป็นส่วนๆ ที่จัดการได้
โดยค่าเริ่มต้น ทุกแอปพลิเคชันจะเริ่มต้นด้วยเนมสเปซเริ่มต้นสามรายการ:web
, background
และ frontend
.
- เนมสเปซเว็บเก็บคำขอ HTTP ทั้งหมดของคุณ ในเฟรมเวิร์กที่เน้น MVC เช่น Rails หรือ Sinatra ซึ่งรวมถึงการดำเนินการควบคุมด้วย
- เนมสเปซพื้นหลังเก็บกิจกรรมจากงานเบื้องหลัง ไลบรารี และงาน
- เนมสเปซส่วนหน้าจะบันทึกเหตุการณ์ที่ส่งโดย AppSignal สำหรับการผสานรวม JavaScript
AppSignal จับคู่เหตุการณ์ที่เข้ามาโดยใช้กฎในตัวต่อแอปพลิเคชันและต่อการผสานรวม อย่างไรก็ตาม คุณสามารถเปลี่ยนการแมปเหล่านี้ได้ทุกเมื่อ หรือแม้แต่สร้างเนมสเปซใหม่เพื่อสร้างแบบจำลองโครงสร้างแอปพลิเคชันของคุณ
ลองใช้เนมสเปซใน Ruby
ลองใช้เนมสเปซในแอปพลิเคชัน Ruby on Rails (ROR) หลังจากสร้างโครงการ Rails ใหม่ด้วย rails new
และตั้งค่าการรวมราง คุณจะพบ web
เนมสเปซในแดชบอร์ดของคุณ
AppSignal จะแสดงเนมสเปซทันทีที่ได้รับธุรกรรมจากตัวควบคุมใดๆ
เนมสเปซเริ่มต้นที่เหลือจะไม่ปรากฏจนกว่าจะมีกิจกรรมบางอย่างอยู่ในนั้น มาเพิ่มบางอย่างในเนมสเปซพื้นหลังเพื่อทำให้สิ่งต่างๆ น่าสนใจยิ่งขึ้น นี่คือลักษณะที่แดชบอร์ดดูแลหลังจากเพิ่ม Sidekiq ให้กับโปรเจ็กต์ (ตรวจสอบโค้ดในที่เก็บตัวอย่าง)
AppSignal กำหนดการดำเนินการให้กับเนมสเปซพื้นหลังเนื่องจากรู้จัก Sidekiq เป็นตัวประมวลผลงาน AppSignal ทำงานร่วมกับโปรเซสเซอร์พื้นหลังยอดนิยมส่วนใหญ่ได้ แต่ถ้าโปรเซสเซอร์ของคุณถูกละไว้ คุณสามารถเพิ่มเครื่องมือสำหรับงานของคุณด้วยตนเองได้เสมอ
การสร้างเนมสเปซที่กำหนดเอง
ในแอปพลิเคชันแบบเสาหินขนาดใหญ่ เนมสเปซเริ่มต้นอาจดูธรรมดาเกินไป เว็บไซต์ขนาดใหญ่มักให้บริการเนื้อหาแบบคงที่ หน้าแบบไดนามิก จุดปลาย API และบริการเว็บอื่นๆ ทั้งหมดนี้จะจบลงที่ web
เนมสเปซ
นอกจากนี้ ทุกส่วนของแอปพลิเคชันมีลำดับความสำคัญที่แตกต่างกัน ปัญหาหน้าเข้าสู่ระบบเป็นเรื่องเร่งด่วนมากกว่าปัญหาในแผงการดูแลระบบภายใน AppSignal ถือว่าปัญหาทั้งหมดภายในเนมสเปซเท่าเทียมกัน เมื่อมีกิจกรรมมากมาย การระบุปัญหาที่สำคัญที่สุดอาจเป็นเรื่องยาก
ดังนั้น เราควรจัดระเบียบเนมสเปซตามลำดับความสำคัญและขอบเขตความรับผิดชอบ จากนั้นเราสามารถแนบนโยบายการแจ้งเตือนแยกต่างหากและแจ้งเตือนเฉพาะผู้มีส่วนได้ส่วนเสีย ด้วยเหตุผลนี้ เราสามารถสร้างเนมสเปซที่กำหนดเองสำหรับ login_page
, api_endpoints
และ admin_panel
.
ในการสร้างเนมสเปซใหม่ใน Ruby เราจะใช้ Appsignal.set_namespace
. ดูโค้ดต่อไปนี้ ซึ่งสร้างงานในเนมสเปซชื่อ urgent_background
:
class FetchPricesWorker
include Sidekiq::Worker
def perform
Appsignal.set_namespace("urgent_background")
# worker code ...
end
end
เมื่อเราทำการเปลี่ยนแปลงนี้และรีสตาร์ทแอป งานใหม่เหล่านี้จะปรากฏในเนมสเปซที่สร้างขึ้นใหม่:
เราสามารถยืนยันได้ว่างานจริงได้รับการบันทึกโดยการตรวจสอบชื่อการดำเนินการในแดชบอร์ด:
เนมสเปซที่กำหนดเองยังทำงานในการผสานรวมทั้งหมดด้วย
ละเว้นเนมสเปซ
ประโยชน์อีกประการของเนมสเปซที่กำหนดเองคือช่วยให้เราละเว้นเหตุการณ์จากส่วนต่างๆ ของแอปพลิเคชันที่เราไม่สนใจ ตัวอย่างเช่น เราอาจเลือกที่จะละเว้นเหตุการณ์จาก admin_panel
อย่างสมบูรณ์
การละเว้นเนมสเปซมีสามขั้นตอน:
- กำหนดส่วนที่เราไม่ต้องการตรวจสอบให้กับเนมสเปซที่กำหนดเอง
- กำหนดค่าการรวมเพื่อละเว้นเนมสเปซ
- รีสตาร์ทแอปของคุณ
สำหรับ Ruby ให้เพิ่มตัวเลือก dissolve_namespaces ในไฟล์กำหนดค่า AppSignal:
production:
ignore_namespaces:
- "admin_panel"
การละเว้นเนมสเปซจะข้ามธุรกรรมทั้งหมดและขยายข้อมูลที่ต้นทาง ข้อมูลเมตริกที่กำหนดเองยังคงรายงานอยู่
การผสานรวม Elixir และ JavaScript มีตัวเลือกที่คล้ายกัน สำหรับรายละเอียดเพิ่มเติม โปรดตรวจสอบคู่มือการละเว้นเนมสเปซ
เนมสเปซสำหรับแอปพลิเคชันเสาหิน
ตอนนี้เรารู้แล้วว่าเนมสเปซทำงานอย่างไร มาดูวิธีการสองสามวิธีที่เราใช้เนมสเปซเพื่อแบ่งพาร์ติชันแอปพลิเคชันแบบเสาหิน
แม้ว่าจะไม่มีกฎกำหนดไว้ แต่การแบ่งพาร์ติชั่นทำให้เหลือสองกลยุทธ์ คุณสามารถเลือกหนึ่งในนั้นหรือทั้งสองอย่างผสมกันเป็นจุดเริ่มต้น:
- ตามบทบาท :เรากำหนดเนมสเปซให้กับหน่วยการทำงานหรือตรรกะภายในโปรเจ็กต์ ดังนั้น เราอาจพบว่าการกำหนดเนมสเปซ เช่น
billing
,sign_in
หรือsign_up
,admin_panel
และhomepage
. เหลือบดูที่แดชบอร์ด AppSigal และคุณจะเข้าใจว่าเกิดอะไรขึ้นในแต่ละส่วนของแอปพลิเคชัน วิธีนี้ใช้ได้ผลดีเมื่อโค้ดสามารถแบ่งได้อย่างชัดเจนตามขอบเขตที่ชัดเจน - ตามความรุนแรง :ที่นี่เราใช้เนมสเปซเป็นอุปกรณ์จัดลำดับความสำคัญ การกำหนดว่าส่วนใดของโค้ด
critical
. ขึ้นอยู่กับคุณ ,critical
,medium
, หรือlow
. วิธีนี้ช่วยให้คุณระบุปัญหาที่ต้องการแก้ไขก่อนได้ทันที
สมมติว่าเรามีตัวควบคุมที่จัดการการลงชื่อเข้าใช้และการลงทะเบียนของผู้ใช้ เมื่อเลือกแบ่งพาร์ติชันตามบทบาท เราสามารถจับคู่กับ user_login
เนมสเปซ
# in Rails we use before_action callback to change
# the namespace before the request starts
class LoginController < ApplicationController
before_action :set_appsignal_namespace
def set_appsignal_namespace
# Sets the namespace
Appsignal.set_namespace("user_login")
end
# controller actions ...
end
แต่ถ้าคุณชอบใช้เนมสเปซที่มีลำดับความสำคัญมากกว่า ผู้ควบคุมที่รับผิดชอบการเรียกเก็บเงินอาจจะอยู่ใน critical
เนมสเปซ
class BillingPageController < ApplicationController
before_action :set_appsignal_namespace
def set_appsignal_namespace
Appsignal.set_namespace("critical")
end
end
ตัวควบคุมที่สืบทอดจากสิ่งเหล่านี้ใช้เนมสเปซเดียวกันกับผู้ปกครอง:
# any controllers that inherit from LoginController
# are also part of the "user_login" namespace
class RegistrationController < LoginController
# there’s no need for before_action here
# this controller already reports to the parent’s namespace
end
ตามที่เราได้เห็น งานและงานถูกกำหนดให้กับbackground
.โดยอัตโนมัติ เนมสเปซ เมื่อใดก็ตามที่เป็นไปได้ เราควรกำหนดให้เฉพาะเจาะจงมากขึ้น ตัวอย่างเช่น งานล้างฐานข้อมูลสามารถเข้าไปใน database
เนมสเปซเช่นนี้:
class ActiveJobDatabaseCleanupJob < ActiveJob::Base
queue_as :default
def perform(argument = nil, options = {})
Appsignal.set_namespace("database")
ลำดับความสำคัญยังทำงานสำหรับงาน เราสามารถมอบหมายงานที่ไม่สำคัญให้กับ low
เช่นในงานคราดนี้:
task :unimportant_job do
# Run this rake job in the low namespace
Appsignal.set_namespace("low")
# job code ...
end
ในบางกรณี คุณจะต้องบันทึกการดำเนินการโดยใช้ธุรกรรมด้วยตนเอง คุณสามารถกำหนดเนมสเปซในขณะที่สร้างเนมสเปซได้ เช่นในตัวอย่างต่อไปนี้ ซึ่งกำหนดรหัสงานเมลที่กำหนดเอง:
class Job
def perform
# Create a transaction for this job and set the namespace
transaction = Appsignal::Transaction.create(
SecureRandom.uuid,
"mailer",
Appsignal::Transaction::GenericRequest.new(ENV.to_hash)
)
# job code ...
end
end
เนมสเปซและการแจ้งเตือน
ไม่ใช่ทุกคนในทีมที่จำเป็นต้องได้รับแจ้งเกี่ยวกับทุกปัญหา ผู้เชี่ยวชาญส่วนหน้าไม่สนใจงานเบื้องหลังมากเท่ากับนักพัฒนาส่วนหลัง อย่างไรก็ตาม พวกเขาอาจต้องการทราบว่ามีปัญหาในแบ็กเอนด์เมื่อใด นักพัฒนาแบ็กเอนด์จะต้องได้รับแจ้งปัญหาด้านประสิทธิภาพใน web
เนมสเปซ เนมสเปซทำให้เรากำหนดเส้นทางการแจ้งเตือนไปยังบุคคลที่เหมาะสมได้
การตั้งค่าตัวแจ้งเตือนต่อเนมสเปซ
เราสามารถสร้างกลุ่มการแจ้งเตือนที่ใช้งานได้สำหรับเนมสเปซที่ระบุเท่านั้น ตัวอย่างเช่น เราสามารถส่งอีเมลหาข้อผิดพลาดใน web
เนมสเปซหรือส่งข้อความไปที่ช่อง #frontend Slack สำหรับปัญหาใน frontend
เนมสเปซ
ในการสร้างกลุ่มการแจ้งเตือนสำหรับแต่ละเนมสเปซ ให้ไปที่การตั้งค่าแอป> การแจ้งเตือน> ตัวแจ้งเตือน และคลิกที่ เพิ่มการผสานการทำงาน .
เลือกหนึ่งในการรวมและพิมพ์ชื่อ เลือกประเภทของข้อความที่จะส่งและเนมสเปซใด ตัวอย่างเช่น มาสร้างการแจ้งเตือน Slack สำหรับ #frontend
ช่อง.
ขณะที่เรายังอยู่ที่นี่ ให้สร้างการแจ้งเตือนครั้งที่สองสำหรับนักพัฒนาแบ็กเอนด์:
คุณสามารถกำหนดค่าตัวแจ้งเตือนได้มากเท่าที่ต้องการเพื่อให้ทีมได้รับข้อมูลล่าสุดเกี่ยวกับทุกสิ่งที่เกิดขึ้น
การเปลี่ยนแปลงการแจ้งเตือนต่อเนมสเปซ
เมื่อมีการสร้างเหตุการณ์ AppSignal จะใช้นโยบายการแจ้งเตือน นโยบายนี้อิงตามเนมสเปซที่เกิดข้อผิดพลาด เราสามารถกำหนดนโยบายแยกกันสำหรับแต่ละเนมสเปซ
หากต้องการดูค่าเริ่มต้นของเนมสเปซสำหรับแอปพลิเคชันของคุณ ให้ไปที่การตั้งค่าแอป> การแจ้งเตือน> ค่าเริ่มต้นของเนมสเปซ .
ที่นี่ คุณจะพบตัวเลือกในการปรับแต่งการแจ้งเตือนข้อผิดพลาดและประสิทธิภาพสำหรับทุกเนมสเปซ:
- ทุกเหตุการณ์ :ส่งการแจ้งเตือนทุกครั้งที่มีเหตุการณ์เกิดขึ้น โดยมีคูลดาวน์ 5 นาที
- ขั้นแรกในการปรับใช้ :แจ้งให้คุณทราบถึงข้อผิดพลาดแรกหลังจากปรับใช้แอปพลิเคชัน
- ก่อนปิด :ส่งการแจ้งเตือนในครั้งแรกที่เปิดปัญหาที่ปิดไว้อีกครั้ง
- ไม่ต้องแจ้งเตือน :ปิดการแจ้งเตือนทั้งหมด
การสร้างทริกเกอร์ต่อเนมสเปซ
ทริกเกอร์บอก AppSignal ให้สร้างเหตุการณ์และส่งการแจ้งเตือนเมื่อตัววัดมีค่าเกินหรือต่ำกว่าค่าที่กำหนดไว้ล่วงหน้า เนื่องจากส่วนต่างๆ ของแอปพลิเคชันอาจมีเกณฑ์ต่างกัน เราควรสร้างทริกเกอร์แยกกันสำหรับแต่ละเนมสเปซ ตัวอย่างคลาสสิกคือทริกเกอร์ที่เตือนเราเมื่อปริมาณงานต่ำเกินไปใน web
เนมสเปซ
ในการสร้างทริกเกอร์ ให้ไปที่การตรวจจับความผิดปกติ> ทริกเกอร์ แล้วคลิก เพิ่มทริกเกอร์แรกของคุณ .
เลือกประเภททริกเกอร์การดำเนินการบนเมนูด้านซ้ายและเลือกเนมสเปซที่เกี่ยวข้อง จากนั้น กำหนดเกณฑ์ที่เรียกการแจ้งเตือน
ที่นี่คุณยังสามารถกำหนดได้ว่าควรแจ้งกลุ่มใด ในการสรุป ให้คลิกที่ บันทึกทริกเกอร์ .
บทสรุป
เนมสเปซทำให้ข้อมูลการตรวจสอบแอปพลิเคชันของคุณมีความหมาย นอกจากนี้ยังจำเป็นสำหรับการส่งการแจ้งเตือนและเหตุการณ์ในระดับที่ละเอียด การจำกัดเสียงรบกวน และหลีกเลี่ยงผลบวกที่ผิดพลาด
หลังจากตรวจสอบการทำงานของเนมสเปซที่กำหนดเองบน Ruby, Node.js และ Elixir แล้ว โปรดอ่านข้อมูลต่อไปนี้เพื่อเรียนรู้วิธีใช้เนมสเปซต่อไป:
- เนมสเปซใน AppSignal
- การจัดกลุ่มด้วยเนมสเปซ
- อะไรคือความแตกต่างระหว่างการตรวจสอบ Webhooks และงานเบื้องหลัง
- Gem 2.2 - เนมสเปซที่กำหนดเอง!