8/11
목표
프로메테우스의 임곗값 도달 시 경고 메시지를 얼럿매니저에 푸시 이벤트로 전달하고, 얼럿매니저는 이를 가공유 이메일/슬랙 등에 전달한다.
얼럿매니저 사용
대시보드 karma 사용
예제 - 장애 확인과 조치
1
워커 노드 3번 추가하기
2
새 터미널
# EC2 인스턴스 모니터링
while true; do aws ec2 describe-instances --query "Reservations[*].Instances[*].{PublicIPAdd:PublicIpAddress,InstanceName:Tags[?Key=='Name']|[0].Value,Status:State.Name}" --output text | sort; echo "------------------------------" ;date; sleep 1; done
3
# 인스턴스그룹 정보 확인
kops get ig
(masterseo1:default) [root@kops-ec2 ~]# kops get ig
NAME ROLE MACHINETYPE MIN MAX ZONES
control-plane-ap-northeast-2a ControlPlane t3.medium 1 1 ap-northeast-2a
nodes-ap-northeast-2a Node c5a.2xlarge 1 1 ap-northeast-2a
nodes-ap-northeast-2c Node c5a.2xlarge 1 1 ap-northeast-2c
4
# 노드 추가
kops edit ig nodes-ap-northeast-2a --set spec.minSize=2 --set spec.maxSize=2
# 적용
kops update cluster --yes && echo && sleep 3 && kops rolling-update cluster
5
# 워커노드 증가 확인
while true; do kubectl get node; echo "------------------------------" ;date; sleep 1; done
Sun Apr 30 14:01:14 KST 2023
NAME STATUS ROLES AGE VERSION
i-04789d404c5338c6e Ready control-plane 47h v1.24.12
i-086d28e8d4972b2b6 Ready node 47h v1.24.12
i-0cf34fb82a31a3da8 Ready node 47h v1.24.12
------------------------------
Sun Apr 30 14:01:15 KST 2023
1
얼럿매니저
# ingress 도메인으로 웹 접속
echo -e "Alertmanager Web URL = https://alertmanager.$KOPS_CLUSTER_NAME"
--------------
Alertmanager Web URL = https://alertmanager.masterseo1.link
Alerts
Sliences
2
프로메테우스 웹 Alert & 얼럿매니저 웹 karma
웹 karma 설치와 확인
# 실행
docker run -d -p 80:8080 -e ALERTMANAGER_URI=https://alertmanager.$KOPS_CLUSTER_NAME ghcr.io/prymitive/karma:latest
# 확인
docker ps
(masterseo1:default) [root@kops-ec2 ~]# docker ps
---------
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e6f8362bf318 ghcr.io/prymitive/karma:latest "/karma" 2 seconds ago Up 1 second 0.0.0.0:80->8080/tcp, :::80->8080/tcp gallant_engelbart
#
echo -e "karma Web URL = http://$(aws cloudformation describe-stacks --stack-name mykops --query 'Stacks[*].Outputs[0].OutputValue' --output text)"
---------
karma Web URL = http://3.36.123.46
3
# 프로메테우스 룰 확인
kubectl get prometheusrules -n monitoring
kubectl get prometheusrules -n monitoring kube-prometheus-stack-kubernetes-system-controller-manager -o json | jq
3
# 룰 전체 확인
kubectl get prometheusrules -n monitoring -o json | more
# 메트릭 이름 확인
kubectl get prometheusrules -n monitoring -o json | grep '"record":' | sed 's/^ *//'
kubectl get prometheusrules -n monitoring -o json | grep '"record":' | sed 's/^ *//' | wc -l
# 얼럿 이름 확인
kubectl get prometheusrules -n monitoring -o json | grep '"alert":' | sed 's/^ *//'
# 얼럿 갯수 확인
kubectl get prometheusrules -n monitoring -o json | grep '"alert":' | sed 's/^ *//' | wc -l
---------------
134
4
슬랙 채널 및 웹훅 URL 생성 및 얼럿매니저 설정 적용
슬랙 채널 만들기 - 책 350~360페이지
https://prometheus.io/docs/alerting/latest/notification_examples/
# 웹훅 URL 정보
https://hooks.slack.com/services/T0569TB1PJ4/B055H8NN81K/h0CS7Rdo0aEmtY
WEBHOOK='https://hooks.slack.com/services/T0569TB1PJ4/B055H8NN81K/h0CS7Rdo0aE'
5
# 샘플 메시지 보내기
curl -X POST --data-urlencode "payload={\"channel\": \"#webhook2\", \"username\": \"pkosbot\", \"text\": \"$KOPS_CLUSTER_NAME 다음주 종강! - 봇 제공\"}" $WEBHOOK
curl -X POST --data-urlencode "payload={\"channel\": \"#webhook2\", \"username\": \"pkosbot\", \"text\": \"$KOPS_CLUSTER_NAME 다음주 종강! - 봇 제공\", \"icon_emoji\": \":ghost:\"}" $WEBHOOK
6
얼럿매니저에 웹훅 URL 정보 반영
https://prometheus.io/docs/alerting/latest/notification_examples/
cat <<EOT > ~/alertmanager-slack.yaml
alertmanager:
config:
global:
resolve_timeout: 5m
slack_api_url: 'https://hooks.slack.com/services/T0L4CQ/wr9n9eR'
route:
group_by: ['job'] # namespace
group_wait: 10s
group_interval: 1m
repeat_interval: 5m
receiver: 'slack-notifications'
routes:
- receiver: 'slack-notifications'
matchers:
- alertname =~ "InfoInhibitor|Watchdog"
receivers:
- name: 'slack-notifications'
slack_configs:
- channel: '#webhook2'
send_resolved: true
title: '[{{.Status | toUpper}}] {{ .CommonLabels.alertname }}'
text: |
*Description:* {{ .CommonAnnotations.description }}
EOT
7
# helm 업그레이드로 얼럿매니저에 웹훅 URL 정보 반영
helm upgrade kube-prometheus-stack prometheus-community/kube-prometheus-stack --reuse-values -f alertmanager-slack.yaml --namespace monitoring
1
장애 내용들 확인
조치
2
삭제
# nginx 삭제
helm uninstall nginx
# promtail 삭제
helm uninstall promtail -n loki
# loki 삭제
helm uninstall loki -n loki
kubectl delete pvc -n loki --all
# 프로메테우스 스택 삭제
helm uninstall -n monitoring kube-prometheus-stack
1
https://grafana.com/docs/grafana/latest/alerting/
2
https://grafana.com/docs/grafana/latest/alerting/
참고 블로그
그라파나 이미지를 포함한 슬랙 얼럿 설정
https://lcc3108.github.io/articles/2021-03/grafana-slack-alert
Grafana - Image Render Plugin & Slack Alert 연동
https://aws-diary.tistory.com/118
k6 & 프로메테우스 Remote Write Rerceiver : k6 부하 테스트 툴의 결과값을 프로메테우스 Remote Write Receiver 전달 및 그라파나 확인
https://ddii.dev/kubernetes/k6-prometheus/
프로메테우스의 임곗값 도달 시 경고 메시지를 얼럿매니저에 푸시 이벤트로 전달하고, 얼럿매니저는 이를 가공유 이메일/슬랙 등에 전달한다.
얼럿매니저 사용
대시보드 karma 사용
예제 - 장애 확인과 조치
그라파나 얼럿 기능 추가 됨. 이미지 랜더링 지원함. 9.4버전부터 지원함.
다음 과정
https://brunch.co.kr/@topasvga/3213
https://brunch.co.kr/@topasvga/3144
감사합니다.