쿠버네티스 교육

17. Kube 교육 - AlertManager 설정

Jerry_이정훈 2021. 6. 4. 16:47
728x90

실습

  • AlertManager 메일 서비스 알람 설정 추가 
  • node down 등의 event 발생 시 정상적인 mail 수신 확인 

What is AlertManager?

간단히 Prometheus 시스템 구성은 아래와 같습니다. Alertmanager는 Prometheus ‘push alerts’ 이벤트를 받아서 이를 Email, etc(Slack) 등으로 알람(‘notify’)하는 역할을 합니다. 간단히 요약하면 ‘alerts’는 Prometheus가 수집/발생하고 Alertmanager는 이를 전송하는 역할만 합니다.

 Prometheus 공식 홈페이지 참조

참고로, AlertManager 역시 Prometheus, Grafana와 동일하게 Admin 웹페이지를 지원합니다.

 

AlertManager Service 확인 

[spkr@erdia22 ~ (kspray:monitoring)]$ k get svc
NAME                                      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
(생략)
prometheus-kube-prometheus-alertmanager   NodePort    10.233.35.62    <none>        9093:30903/TCP               101m

NodePort 30903 Port로 접속하시면 아래와 같이 Alertmanager Admin GUI 페이지를 확인 할 수 있습니다.

Alertmanager 웹페이지

Prometheus-Stack 설치 포스팅에서 언급했듯이 Kube-Prometheus-Stack Helm Chart로 설치하면 기본으로 다양한 Alert 조건(alertrule)이 포함되어 있습니다. 예를 들어 POD 또는 node down, cpu/memory peak 등의 event 발생 시 해당 내역이 자동으로 alert 메시지로 등록 됩니다. 

 

해당 Alert Rule 내역은 Alertmanager가 아닌 Prometheus Admin Page에서 확인 가능합니다. 

[spkr@erdia22 kube-prometheus-stack-16.1.0 (k3s:monitoring)]$ k get svc
NAME                                      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)
 AGE
(생략)
prometheus-kube-prometheus-prometheus     NodePort    10.43.180.97    <none>        9090:30090/TCP
 10m

 

NodePort 30090 으로 접속하여, 상단 Alerts 메뉴를 클릭하면 아래와 같이 Prometheus 전체 AlertRule 리스트를 확인 할 수 있습니다. 

아마도 대부분의 환경에서는 추가 AlertRule 설정 없이 기본 AlertRule 만으로 가능합니다. (저희도 Default 그대로 사용합니다.) 물론 웹페이지 반응 속도 등 좀 더 구체적인 조건이 필요하면 추가 작업이 필요합니다. 

 

아래는 Alert 발생 사례입니다. alert 조건에 해당하는 이벤트가 발생하면(예를 들어 Node Down) 아래와 같이 Inactive(녹색) 상태에서 Pending(황색) - Firing(적색) 상태로 변경이 됩니다. 아래는 TargetDown Alert 예시입니다. 

위 Alert이 Mail로 전송되면 아래와 같습니다. ‘kubelet POD’중 33.33% 의 POD(⅓)가 down 되었다는 메시지 입니다. 

다음은 AlertManager GUI 화면 입니다. Alerts이 발생하지 않은 경우 Watchdog(감시견) 상태, 즉 현재 정상적으로 동작하고 있는지만 보여줍니다. 

이 후 실제 Alerts 발생하면 아래와 같이 Alerts 메시지가 추가 된 걸 확인 할 수 있습니다. 

이상 대략적인 전체 흐름입니다.

 

Kubernetes Alerts 특성 

Kubernetes 환경에서는 ‘desired state’, 즉 선언된 상태 유지가 가장 큰 특징입니다. 따라서 POD 혹은 NODE가 다운되어도 자동 재시작하여 항상 미리 ‘선언된 상태’를 유지 합니다. 따라서 VM처럼 Alert 발생 이 후 서버에 접속하여 조치를 취하는 것이 아니라 사전에 충분히 고가용성 검증을 하여 장애가 발생하여도 서비스가 자동 복구되도록 상태를 설정하는 것이 중요 합니다. 

 

저희 같은 경우 MariaDB 39ea POD(13ea*3ea Multi-Master Cluster) 실행 중인데, 최초 구축 이 후 지금까지 1년 6개월 이상 무장애입니다. POD가 Down되는 건 대략 2~3달에 한 번씩 있었으나 3개의 POD가 클러스터로 구성되어 서비스가 문제가 없었습니다. 사전에 충분히 테스트를 하여 검증이 완료되었기에 가능 하였습니다. 

 

AlertManager E-Mail 수신자 설정 

다음으로 실제 Alert 메시지를 email을 통하여 받을 수 있도록 메일 관련 정보를 추가하겠습니다. AlertManager는 Slack, E-Mail 등으로 메시지 전달이 가능합니다. 

 

Helm Chart - my-values.yml 수정 내역

Alertmanager - config 부문에 아래 내용을 추가 합니다.

  config:
    global:
      resolve_timeout: 5m
    route:
      receiver: 'email-alert'
      group_by: ['job', 'node', 'namespace', 'pod_name']    
      routes:
      - receiver: 'email-alert'
        # When a new group of alerts is created by an incoming alert, wait at
        # least 'group_wait' to send the initial notification.
        # This way ensures that you get multiple alerts for the same group that 
        #start firing shortly after another are batched together on the first 
        # notification.
        group_wait: 50s
        # When the first notification was sent, wait 'group_interval' to send a 
        # batch of new alerts that started firing for that group.  
        group_interval: 5m
        # If an alert has successfully been sent, wait 'repeat_interval' to
        # resend them.
        repeat_interval: 12h    
    receivers:
    - name: email-alert
      email_configs:
      - to: example01@gmail.com ## 사용자 계정 입력
        from: example@gmail.com
        # Your smtp server address
        smarthost: smtp.gmail.com:587
        auth_username: example@gmail.com
        auth_identity: example@gmail.com
        auth_password: {{ 사용자 password }}
  • receivers.email_configs.to/from, auth_username, auth_identity : 원하는 메일 계정 추가
  • auth_password : 메일 Password 추가 

상세 설정 참조 : https://stackoverflow.com/questions/60815906/helm-prometheus-operator-set-email-notifications-edit-secrets

 

 

helm prometheus operator - set email notifications/edit secrets

I have installed prometheus-operator via helm and now want to set email notifications for alert manager: I edited prometheus operator secret kubectl get secret alertmanager-prometheus-prometh...

stackoverflow.com

Helm Chart 수정이 완료되면 Alertmanager Admin 페이지에 해당 설정이 정상적으로 Status 메뉴에 추가되었습니다. 

설정이 완료되면 아래와 같이 Mail Alerts 받으실 수 있습니다. 

이상 AlertaManager email 관련 설정 입니다. 

 

(내용이 많이 부족합니다. Monitoring, Alert System 등은 시스템을 운영하면서 끊임없이 개선되어야 할 부문입니다. 처음은 대략적인 흐름만 파악하고 차츰 운영하면서 필요한 부문을 추가하는 노력이 필요합니다. 하나의 정답이 아니라 천개의 환경에는 천개의 해답이 있다 라고 생각합니다.)

반응형