alertmanager & slack 연동 및 경보
Alertmangaer
Prometheus Alertmanager는 Prometheus 모니터링 시스템의 일부로 사용되는 오픈 소스 알람 관리자입니다. Alertmanager는 Prometheus 서버로부터 수집된 경고 및 알람을 처리하고 라우팅하며, 이를 통해 시스템 관리자 및 개발자에게 모니터링 이벤트 및 잠재적인 문제에 대한 통지를 관리하는 데 도움을 줍니다.
slack webhook
수신받을 채널을 생성 후 수신 웹훅을 추가합니다. 생성된 URL 을 기록해줍니다.
Edit values.yaml
경보 구성 및 실습에 필요한 걊을 수정합니다
vim prometheus-values.yaml
648 loadBalancerIP: ""
649 loadBalancerSourceRanges: []
650 servicePort: 80
651 sessionAffinity: None
652 type: LoadBalancer
687 serverFiles:
688 ## Alerts configuration
689 ## Ref: https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/
690 alerting_rules.yml:
691 groups:
692 - name: Node
693 rules:
694 - alert: NodeDown
695 expr: up{job="kubernetes-nodes"} == 0
696 for: 1m
697 labels:
698 severity: page
699 annotations:
700 description: kubernetes node {{ .Labels.instance }} down
701 # summary: 'Instance {{ $labels.instance }} down'
prometheus-server 경보 규칙 생성 및 서비스 타입을 로드밸런서로 변경해줍니다.
1215 config:
1216 global:
1217 resolve_timeout: 5m
1218 route:
1219 group_wait: 10s
1220 group_interval: 1m
1221 repeat_interval: 5m
1222 receiver: 'slack-notifier'
1223 receivers:
1224 - name: 'slack-notifier'
1225 slack_configs:
1226 - api_url: 'https://hooks.slack.com/services/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'
1227 channel: '#kubernetes-node-notice'
1228 send_resolved: true
1229 title: '[{{ .Status | toUpper }}] {{ .CommonLabels.alertname }}'
1230 text: >-
1231 *Description:* {{ .CommonAnnotations.description }}
1232 service:
1233 ## If false, no Service will be created for the Prometheus server
1234 ##
1235 enabled: true
1236
1237 annotations: {}
1238 labels: {}
1239 clusterIP: ""
1240
1241 ## List of IP addresses at which the Prometheus server service is available
1242 ## Ref: https://kubernetes.io/docs/concepts/services-networking/service/#external-ips
1243 ##
1244 externalIPs: []
1245
1246 loadBalancerIP: ""
1247 loadBalancerSourceRanges: []
1248 servicePort: 80
1249 sessionAffinity: None
1250 type: LoadBalancer
alertmanager 경보 생성 및 서비스 타입 로드밸런서로 변경
변경사항 적용
helm upgrade 명령어를 통해 변경사항을 적용시킵니다.
helm upgrade prometheus prometheus/prometheus -f prometheus-values.yaml
프로메테우스 서버 웹 접속후 alert 탭으로 이동하면
위와 같은 경보 규칙이 생긴 것을 확인할 수 있습니다.
경보발생
노드 하나를 종료해 경보상황을 만들어 줍니다. 노드 종료 후 잠시 기다리면 다음과 같은 경보 메세지를 슬랙채널을 통해 받아 볼 수 있습니다.
프로메테우스 서버의 경보창에서도 경보상황을 확인할 수 있습니다.
다시 노드를 실행시키면 다음과 같이 알림이 오게되고, 경보가 상황이 해소됩니다.
이처럼 특정 상황에 대한 경보규칙과 경보를 생성해 다양한 플랫폼을 통해 알림을 받아볼 수 있습니다. 프로메테우스 기술문서를 통해 상황에 맞는 템플릿을 참고 할 수 있습니다.
prometheus-alertmanager configmap
위에서 실습한 것 처럼 values.yaml 파일을 수정해서 배포해도 되지만, 미리 생성해둔 configmap.yaml 파일을 통해서도 경보를 생성할 수 있습니다.
실제로 values.yaml 파일에 수정한 부분이 alertmanager configmap에 기록되어 있는 것을 확인할 수 있습니다.
kubectl edit configmap prometheus-alertmanager
apiVersion: v1
data:
alertmanager.yml: |
global:
resolve_timeout: 5m
receivers:
- name: slack-notifier
slack_configs:
- api_url: slack url
channel: '#kubernetes-node-notice'
send_resolved: true
text: '*Description:* {{ .CommonAnnotations.description }}'
title: '[{{ .Status | toUpper }}] {{ .CommonLabels.alertname }}'
route:
group_interval: 1m
group_wait: 10s
receiver: slack-notifier
repeat_interval: 5m
templates:
- /etc/alertmanager/*.tmpl
kind: ConfigMap
metadata:
annotations:
meta.helm.sh/release-name: prometheus
meta.helm.sh/release-namespace: default
creationTimestamp: "2023-09-18T04:23:46Z"
labels:
app.kubernetes.io/instance: prometheus
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: alertmanager
app.kubernetes.io/version: v0.26.0
helm.sh/chart: alertmanager-1.6.0
name: prometheus-alertmanager
namespace: default
resourceVersion: "348163"
uid: 99f68981-6b5a-4cfc-b02b-a339c587107e