การเชื่อมต่อกับ Prometheus Alertmanager - แจ้งเตือนบนมือถือ

ส่งการแจ้งเตือนจาก Prometheus Alertmanager มายัง Echobell เพื่อรับการแจ้งเตือนแบบพุชหรือสายโทรเข้าเมื่อเกิดเหตุกับเซิร์ฟเวอร์และโครงสร้างพื้นฐาน


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

สิ่งที่ต้องเตรียม

  • บัญชี Echobell ที่สร้างช่องไว้อย่างน้อยหนึ่งช่อง
  • ระบบ Prometheus + Alertmanager ที่ทำงานอยู่
  • สิทธิ์แก้ไขไฟล์ตั้งค่า Alertmanager ของคุณ (alertmanager.yml)

ภาพรวมการตั้งค่า

  1. สร้างช่องใน Echobell
  2. ตั้งค่าเทมเพลตการแจ้งเตือน (และ Link Template ถ้าต้องการ)
  3. เลือกวิธีเชื่อมต่อ:
    • Webhook ผ่าน webhook receiver ของ Alertmanager (แนะนำ)
    • อีเมลผ่าน email receiver ของ Alertmanager (ทางเลือก)
  4. สร้างหรืออัปเดตกฎการแจ้งเตือน
  5. ทดสอบและปรับแต่ง

คู่มือทีละขั้นตอน

สร้างช่องใน Echobell

  1. เปิดแอป Echobell
  2. สร้างช่องใหม่ (เช่น "Prometheus Alerts")
  3. เลือกสีเพื่อให้แยกแยะได้ง่าย

ตั้งค่าเทมเพลตการแจ้งเตือน

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 (แนะนำ)

  1. ในช่อง Echobell ของคุณ ให้คัดลอก Webhook URL จากส่วน Triggers
  2. ใน 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 แล้วส่งไปยังที่อยู่อีเมลที่ผูกกับช่อง

  1. ใน Echobell ให้คัดลอกที่อยู่อีเมลของช่องจากส่วน Triggers
  2. ตั้งค่า 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 จะแจ้งเตือนผู้ติดตามของช่องนั้น

การทดสอบการเชื่อมต่อ

  1. ลดค่าเกณฑ์ลงชั่วคราว หรือสร้างการแจ้งเตือนทดสอบที่ทำงานได้อย่างรวดเร็ว
  2. ยืนยันว่าคุณได้รับการแจ้งเตือนจาก Echobell เมื่อกฎทำงาน
  3. หากใช้ Link Template ให้เปิดบันทึกการแจ้งเตือนแล้วแตะลิงก์
  4. คลี่คลายการแจ้งเตือนนั้น แล้วตรวจสอบว่าคุณได้รับการแจ้งเตือนตอนคลี่คลายด้วย (หากเปิดใช้ไว้)

การเลือกประเภทการแจ้งเตือน

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

แนวปฏิบัติที่ดี

  1. เขียนเทมเพลตให้กระชับแต่ได้ใจความ (ชื่อการแจ้งเตือน ระดับความรุนแรง instance และสรุป)
  2. ใช้ Link Template เพื่อกระโดดไปยังกราฟหรือแดชบอร์ดที่เกี่ยวข้องได้ทันที
  3. จัดกลุ่มและกำหนดเส้นทางการแจ้งเตือนใน Alertmanager เพื่อลดสัญญาณรบกวนและความล้าจากการแจ้งเตือน
  4. ใส่ label ระบุระดับความรุนแรง แล้วใช้ประเภทการแจ้งเตือนของ Echobell ให้สอดคล้องกับความเร่งด่วน
  5. ปกป้อง webhook URL ของ Echobell เสมือนเป็นความลับ และเปลี่ยนใหม่หากรั่วไหล

การแก้ปัญหา

หากการแจ้งเตือนไม่ปรากฏใน Echobell:

  • ตรวจสอบว่า webhook URL หรือที่อยู่อีเมลของช่องถูกต้อง
  • ตรวจสอบว่าช่อง Echobell ยังใช้งานอยู่และมีผู้ติดตาม
  • ตรวจดูบันทึกของ Alertmanager ว่ามีข้อผิดพลาดในการส่งหรือไม่
  • ยืนยันว่า route ใน alertmanager.yml ชี้ไปยัง receiver ที่ต้องการจริง
  • ทดสอบด้วยกฎการแจ้งเตือนแบบง่าย ๆ เพียงข้อเดียว
  • หากใช้อีเมล ให้ตรวจสอบว่าการตั้งค่า SMTP ใช้งานได้และอีเมลถูกส่งออกจริง

ความเป็นส่วนตัวและการจัดการข้อมูล

Echobell ให้ความเป็นส่วนตัวมาก่อน:

  • เนื้อหาการแจ้งเตือนอยู่บนอุปกรณ์ของคุณ
  • เซิร์ฟเวอร์เก็บเพียงข้อมูลการตั้งค่าเท่าที่จำเป็น
  • ควรถือว่า webhook URL และที่อยู่อีเมลของช่องเป็นความลับ
  • Echobell ไม่เก็บ payload ของการแจ้งเตือนของคุณไว้บนเซิร์ฟเวอร์

แหล่งข้อมูลเพิ่มเติม