การเชื่อมต่อกับ Prometheus Alertmanager - แจ้งเตือนบนมือถือ
ส่งการแจ้งเตือนจาก Prometheus Alertmanager มายัง Echobell เพื่อรับการแจ้งเตือนแบบพุชหรือสายโทรเข้าเมื่อเกิดเหตุกับเซิร์ฟเวอร์และโครงสร้างพื้นฐาน
Prometheus ร่วมกับ Alertmanager เป็นชุดเครื่องมือโอเพนซอร์สสำหรับมอนิเตอร์และแจ้งเตือนที่ใช้กันอย่างแพร่หลาย เมื่อเชื่อม Alertmanager เข้ากับ Echobell คุณจะได้รับการแจ้งเตือนบนมือถือทันที (รวมถึงแบบสำคัญตามเวลาหรือแบบสายโทรเข้า) ทุกครั้งที่กฎการแจ้งเตือนของคุณทำงาน
สิ่งที่ต้องเตรียม
- บัญชี Echobell ที่สร้างช่องไว้อย่างน้อยหนึ่งช่อง
- ระบบ Prometheus + Alertmanager ที่ทำงานอยู่
- สิทธิ์แก้ไขไฟล์ตั้งค่า Alertmanager ของคุณ (alertmanager.yml)
ภาพรวมการตั้งค่า
- สร้างช่องใน Echobell
- ตั้งค่าเทมเพลตการแจ้งเตือน (และ Link Template ถ้าต้องการ)
- เลือกวิธีเชื่อมต่อ:
- Webhook ผ่าน webhook receiver ของ Alertmanager (แนะนำ)
- อีเมลผ่าน email receiver ของ Alertmanager (ทางเลือก)
- สร้างหรืออัปเดตกฎการแจ้งเตือน
- ทดสอบและปรับแต่ง
คู่มือทีละขั้นตอน
สร้างช่องใน Echobell
- เปิดแอป Echobell
- สร้างช่องใหม่ (เช่น "Prometheus Alerts")
- เลือกสีเพื่อให้แยกแยะได้ง่าย
ตั้งค่าเทมเพลตการแจ้งเตือน
payload ของ webhook จาก Alertmanager มีฟิลด์ที่มีโครงสร้าง เช่น status, commonLabels, commonAnnotations, externalURL และอาร์เรย์ alerts คุณอ้างอิงฟิลด์เหล่านี้ได้โดยตรงในเทมเพลตของ Echobell
เทมเพลตที่แนะนำ:
เทมเพลตหัวข้อ:
{{commonLabels.alertname}} - {{status}}
เทมเพลตเนื้อหา:
🔔 Alert: {{commonLabels.alertname}}
📊 Severity: {{commonLabels.severity}}
🖥️ Instance: {{alerts[0].labels["instance"]}}
⏰ Starts: {{alerts[0].startsAt}}
ℹ️ Summary: {{commonAnnotations.summary}}
🧾 Description: {{commonAnnotations.description}}
Link Template (ในการตั้งค่าขั้นสูง) ซึ่งจะใส่หรือไม่ก็ได้:
{{alerts[0].generatorURL || externalURL}}
ค่านี้จะแสดงลิงก์ตรงไปยังกราฟหรือแดชบอร์ดที่เกี่ยวข้องภายในบันทึกการแจ้งเตือนของคุณ หากไม่มี generatorURL ระบบจะถอยไปใช้ externalURL แทน
วิธีเชื่อมต่อแบบ A — Webhook (แนะนำ)
- ในช่อง Echobell ของคุณ ให้คัดลอก Webhook URL จากส่วน Triggers
- ใน Alertmanager ให้เพิ่ม webhook receiver ที่ส่งข้อมูลไปยัง URL นั้น
ตัวอย่าง alertmanager.yml แบบย่อที่สุด:
route:
receiver: echobell-webhook
receivers:
- name: echobell-webhook
webhook_configs:
- url: "https://hook.echobell.one/t/<channel-token>"
send_resolved: true
http_config:
follow_redirects: trueหมายเหตุ:
- send_resolved: true จะแจ้งเตือนเมื่อเหตุการณ์คลี่คลายด้วย (status เปลี่ยนเป็น resolved)
- Echobell อ่าน JSON body ตามที่ได้รับมาโดยตรง เทมเพลตข้างต้นจึงแสดงผลได้ถูกต้อง
วิธีเชื่อมต่อแบบ B — อีเมล (ทางเลือก)
หากคุณต้องการหรือจำเป็นต้องใช้อีเมล ให้ใช้ email receiver ของ Alertmanager แล้วส่งไปยังที่อยู่อีเมลที่ผูกกับช่อง
- ใน Echobell ให้คัดลอกที่อยู่อีเมลของช่องจากส่วน Triggers
- ตั้งค่า email receiver ใน Alertmanager และใช้เทมเพลตแบบง่าย ๆ
ตัวอย่างส่วนของไฟล์ตั้งค่า:
receivers:
- name: echobell-email
email_configs:
- to: "PASTE_CHANNEL_EMAIL_ADDRESS"
send_resolved: true
subject: "{{ .CommonLabels.alertname }} - {{ .Status }}"
html: |
<p><strong>Summary:</strong> {{ .CommonAnnotations.summary }}</p>
<p>{{ .CommonAnnotations.description }}</p>
<p>
<a href='{{ (index .Alerts 0).GeneratorURL }}' target='_blank' rel='noopener'>Open in Prometheus</a>
</p>ในเทมเพลตของ Echobell สำหรับทริกเกอร์อีเมล คุณใช้ตัวแปรอย่าง subject, text และ html ที่ Echobell เตรียมให้อัตโนมัติได้
สร้างกฎการแจ้งเตือนตัวอย่าง
นี่คือกฎตัวอย่างสั้น ๆ สำหรับทดสอบการทำงานทั้งหมด:
groups:
- name: example
rules:
- alert: HighCPU
expr: avg(rate(process_cpu_seconds_total[5m])) > 0.8
for: 2m
labels:
severity: critical
annotations:
summary: "High CPU usage"
description: "CPU has been over 80% for 2 minutes"เมื่อการแจ้งเตือนนี้ทำงาน Alertmanager จะส่งเหตุการณ์ไปยัง receiver ที่คุณตั้งค่าไว้ และ Echobell จะแจ้งเตือนผู้ติดตามของช่องนั้น
การทดสอบการเชื่อมต่อ
- ลดค่าเกณฑ์ลงชั่วคราว หรือสร้างการแจ้งเตือนทดสอบที่ทำงานได้อย่างรวดเร็ว
- ยืนยันว่าคุณได้รับการแจ้งเตือนจาก Echobell เมื่อกฎทำงาน
- หากใช้ Link Template ให้เปิดบันทึกการแจ้งเตือนแล้วแตะลิงก์
- คลี่คลายการแจ้งเตือนนั้น แล้วตรวจสอบว่าคุณได้รับการแจ้งเตือนตอนคลี่คลายด้วย (หากเปิดใช้ไว้)
การเลือกประเภทการแจ้งเตือน
- สำคัญตามเวลา: เหตุระบบจริงล่มขั้นวิกฤต หรือเหตุการณ์ระดับที่ต้องเรียกคนทันที
- โทรเข้า: เหตุล่มร้ายแรงที่ต้องปลุกคุณหรือทะลุโหมดโฟกัสให้ได้
- ปกติ: การแจ้งเตือนทั่วไป คำเตือน หรือข้อมูลแจ้งให้ทราบ
แนวปฏิบัติที่ดี
- เขียนเทมเพลตให้กระชับแต่ได้ใจความ (ชื่อการแจ้งเตือน ระดับความรุนแรง instance และสรุป)
- ใช้ Link Template เพื่อกระโดดไปยังกราฟหรือแดชบอร์ดที่เกี่ยวข้องได้ทันที
- จัดกลุ่มและกำหนดเส้นทางการแจ้งเตือนใน Alertmanager เพื่อลดสัญญาณรบกวนและความล้าจากการแจ้งเตือน
- ใส่ label ระบุระดับความรุนแรง แล้วใช้ประเภทการแจ้งเตือนของ Echobell ให้สอดคล้องกับความเร่งด่วน
- ปกป้อง webhook URL ของ Echobell เสมือนเป็นความลับ และเปลี่ยนใหม่หากรั่วไหล
การแก้ปัญหา
หากการแจ้งเตือนไม่ปรากฏใน Echobell:
- ตรวจสอบว่า webhook URL หรือที่อยู่อีเมลของช่องถูกต้อง
- ตรวจสอบว่าช่อง Echobell ยังใช้งานอยู่และมีผู้ติดตาม
- ตรวจดูบันทึกของ Alertmanager ว่ามีข้อผิดพลาดในการส่งหรือไม่
- ยืนยันว่า route ใน alertmanager.yml ชี้ไปยัง receiver ที่ต้องการจริง
- ทดสอบด้วยกฎการแจ้งเตือนแบบง่าย ๆ เพียงข้อเดียว
- หากใช้อีเมล ให้ตรวจสอบว่าการตั้งค่า SMTP ใช้งานได้และอีเมลถูกส่งออกจริง
ความเป็นส่วนตัวและการจัดการข้อมูล
Echobell ให้ความเป็นส่วนตัวมาก่อน:
- เนื้อหาการแจ้งเตือนอยู่บนอุปกรณ์ของคุณ
- เซิร์ฟเวอร์เก็บเพียงข้อมูลการตั้งค่าเท่าที่จำเป็น
- ควรถือว่า webhook URL และที่อยู่อีเมลของช่องเป็นความลับ
- Echobell ไม่เก็บ payload ของการแจ้งเตือนของคุณไว้บนเซิร์ฟเวอร์