Tích hợp Prometheus Alertmanager với ServiceNow

Tổng quan

Alertmanager là một công cụ để tự động gửi Alerts thông qua các dịch vụ khác nhau như email, slack, ms teams hay webhook. Alert manager được tích hợp trong Prometheus để giúp gửi alerts từ Prometheus.

ServiceNow là một công cụ dành cho IT support, tự động tạo ra các ticket (incident) để giúp người vận hành / hỗ trợ có thể thao tác dễ dàng hơn.

Việc tích hợp Alertmanager với ServiceNow giúp cho các Alerts tạo ra từ Prometheus sẽ được tạo thành các Tickets giúp người vận hành hệ thống có thể quản lý và có hành động kịp thời khi có sự cố.

Việc tích hợp sẽ dựa vào webhook, thông qua công cụ https://github.com/FXinnovation/alertmanager-webhook-servicenow

Các bước cài đặt

Cài Alertmanager

Cài đặt Alertmanager cùng với Prometheus (và có thể gồm Grafana) dùng helm chart tại đây: https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack

Câu lệnh cài đặt bằng helm lên Kubernetes cluster như sau:

helm upgrade --install prometheus prometheus-community/kube-prometheus-stack --values=prometheus/values/values.yaml -n monitoring

Cấu hình Alertmanager

Tạo 1 file có tên values.yaml với nội dung như sau:

alertmanager:
  config:
    global:
      resolve_timeout: 5m
    route:
      group_by: ['alertname']
      group_wait: 30s
      group_interval: 5m
      repeat_interval: 3h
      receiver: 'servicenow'
      routes:
      - match:
          alertname: Watchdog
        receiver: 'null'
      - match:
          alertname: TargetDown
        receiver: 'servicenow'
    receivers:
    - name: 'servicenow'
      webhook_configs:
      - url: "http://alertmanager-webhook-servicenow.monitoring.svc.cluster.local/webhook"
        send_resolved: true
    - name: 'null'

Trong cấu hình này ta gửi alert vào receiver ‘servicenow’, tùy chọn có thể gửi tới nhiều receiver khác nữa, như ví dụ trên ta sẽ bỏ qua các alert Watchdog (vì các alert này dành cho việc checking xem hệ thống alert có hoạt động không, có thể tạm bỏ qua ở đây) còn tất cả alert còn lại sẽ gửi tới servicenow.

Cài đặt webhook

Cài đặt sẽ dùng helm chart

Trước hết download source code từ https://github.com/FXinnovation/alertmanager-webhook-servicenow

Sau đó thêm helm chart bằng lệnh

cd alertmanager-webhook-servicenow
helm create helm

Edit file config/servicenow.yml như sau (xem hướng dẫn cài đặt trong github repo ở trên)

service_now:
  instance_name: "<servicenow_instance_example>"
  user_name: "<my_user>"
  password: "<password>"
  table_name: "incident"

workflow:
  incident_group_key_field: "prometheus_alertgroup_id"
  no_update_states: [6,7,8]
  incident_update_fields: ["comments"]

default_incident:
  impact: "{{.CommonLabels.impact}}"
  urgency: "{{.CommonLabels.urgency}}"
  short_description: "Alerts from group: {{ range $key, $val := .GroupLabels}}{{ $key }}:{{ $val }}{{end}}"
  description: "Alerts list:\n\n{{ range .Alerts }}[{{ .Status }}] {{.StartsAt}} {{.Labels.alertname}}\n {{ range $key, $val := .Annotations}}{{ $key }}:{{ $val }}\n{{end}}\n\n{{ end }}"

Sau đó cài đặt webhook bằng lệnh sau

docker build -t webhook-servicenow .
docker push <dockerhub-user>/webhook-servicenow
helm upgrade --install alertmanager-webhook-servicenow --namespace monitoring ./helm --set image.repository=<dockerhub-user>/webhook-servicenow

Debug & Testing

Sau khi cài đặt xong vào log của pod alertmanager và pod alertmanager-webhook-servicenow để xem alert đã gửi đi chưa. Vào servicenow để kiểm tra xem có ticket nào được tạo không, hoặc có thể dùng API của servicenow để kiểm tra nội dung các incident.

Leave a comment