brunch

You can make anything
by writing

C.S.Lewis

by Master Seo Mar 27. 2023

쿠버4탄-8. K8S-Alerting 프로메테우스

8/11

본 내용은 CloudNet 에서 진행하는 주말 스터디에 참여하여 해당 내용을 참고로 작성되었습니다.
https://gasidaseo.notion.site/gasidaseo/CloudNet-Blog-c9dfa44a27ff431dafdd2edacc8a1863  



목표

프로메테우스의 임곗값 도달 시 경고 메시지를 얼럿매니저에 푸시 이벤트로 전달하고, 얼럿매니저는 이를 가공유 이메일/슬랙 등에 전달한다.

얼럿매니저 사용

대시보드 karma 사용

예제 - 장애 확인과 조치



<1> Alertmanager

<2> 예제 - 워커 노드를 장애시 확인

<3> 얼럿매니저 웹 접속 & 얼럿매니저 대시보드 karma 사용

<4> 예제 - 장애 확인과 조치

<5> 그라파나 얼럿

<6> 정리 




<1> Alertmanager






<2> 예제 - 워커 노드를 장애시 확인


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





<3> 얼럿매니저 웹 접속 & 얼럿매니저 대시보드 karma 사용


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




<4> 예제 - 장애 확인과 조치


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




<5>  그라파나 얼럿



1

https://grafana.com/docs/grafana/latest/alerting/


2


https://grafana.com/docs/grafana/latest/alerting/


참고 블로그

https://velog.io/@yyw1128/4


https://blog.naver.com/NBlogTop.naver?blogId=sungwon_200ok&Redirect=Dlog&Qs=/2nddoctoryun/223061416989


그라파나 이미지를 포함한 슬랙 얼럿 설정

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/



<6> 정리 


프로메테우스의 임곗값 도달 시 경고 메시지를 얼럿매니저에 푸시 이벤트로 전달하고, 얼럿매니저는 이를 가공유 이메일/슬랙 등에 전달한다.

얼럿매니저 사용

대시보드 karma 사용

예제 - 장애 확인과 조치

그라파나 얼럿 기능 추가 됨. 이미지 랜더링 지원함. 9.4버전부터 지원함.




다음 과정

https://brunch.co.kr/@topasvga/3213




https://brunch.co.kr/@topasvga/3144


감사합니다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari