group_interval, group_wait และ repeat_interval แตกต่างกันอย่างไร
ซึ่ง 3 ตัวแปรนี้เป็นข้อสงสัยสำหรับมือใหม่ Alertmanager เสมอๆ
ก่อนที่จะพูดถึง 3 ตัวที่ว่าของ Alertmanager ผมขอพูดถึงตัวแปรพื้นฐานสำคัญๆก่อนครับ โดย Prometheus จะมีการนับเวลาที่เป็น global อยู่ 2 ค่าคือ scrape_interval
และ evaluation_interval
scrape_interval
คือระยะเวลาการเก็บข้อมูลแต่ละครั้งของ Prometheus
เช่นเมื่อ Prometheus กำลังเก็บข้อมูลจาก Error ฯลฯ
evaluation_interval
คือระยะเวลาระหว่างการประเมินกฎการแจ้งเตือนของ Prometheus
เมื่อถูกประเมินแล้วแต่ละข้อความจะถูกกำหนดสถานะออกมา 3 สถานะ
คือ inactive, pending, firing หลัวจากนั้นก็จะทำการเริ่มหรือหยุดส่งการแจ้งเตือนไปยัง Alertmanager
group_by
มีหน้าที่หลีกเลี่ยงการส่งแจ้งเตือนอย่างต่อเนื่องสำหรับการแจ้งเตือนที่คล้ายกัน (like the same process failing on multiple instances, nodes, and data centres)
เพราะฉนั้นเราควรสร้างหลายๆกลุ่มเพื่อรับการแจ้งเตือนที่น้อยลง
group_by: ['alertname', 'job']
group_wait
ตั้งว่าจะเก็บการแจ้งเตือนจาก Prometheus ก่อนที่จะส่งไปยัง Alertmanager นานแค่ไหน
เช่น ถ้ารอ 5 นาทีจะเก็บแจ้งเตือนได้ 10 ข้อความ แต่ถ้ารอ 10 นาที อาจจะได้มากกว่า 10 ข้อความ
group_by: ['alertname', 'job']
group_wait: 45s # Usually set between ~0s to a few minutes.
ปัญหาอื่นๆตามมาเช่น เราจะได้เก็บการแจ้งเตือนแบบกลุ่มอีกครั้งในครั้งต่อไปที่มีการประเมินกฎและวิธีนี้จะส่งผลให้เกิดความล่าช้าในการรับการแจ้งเตือนครับ
group_interval
ตั้งระยะเวลาที่พร้อมจะส่งการแจ้งเตือนทั้งหมดที่ group_wait เก็บรวบรวมมาส่งออกไปหาผู้รับเมื่อใด
group_by: ['instance', 'job']
group_wait: 45s
group_interval: 10m # Usually ~5 mins or more.
repeat_interval
ใช้ในการกำหนดเวลารอ ก่อนที่จะส่งข้อความแจ้งเตือนที่ได้รับมา ส่งไปยังผู้รับที่เคยได้รับข้อความแจ้งเตือนอีกครั้ง
Extra
send_resolved
กำหนดเพื่อเช็คว่าปัญหาที่ถูกส่งมานั้นถูกแก้ไขสำเร็จแล้วหรือยัง
resolve_timeout
หลังจากระยะเวลาที่กำหนดจะลบข้อความการแจ้งเตือนที่เก็บไว้
Based on article What’s the difference between group_interval, group_wait, and repeat_interval?