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.