Ssoon

[4주차] CHAPTER-19 얼럿매니저(alertmanager) 본문

Production Kubernetes Online Study

[4주차] CHAPTER-19 얼럿매니저(alertmanager)

구구달스 2023. 3. 30. 02:03
이정훈님이 집필하신 "24단계 실습으로 정복하는 쿠버네티스" 로 진행하는 CloudNet@ 팀의 PKOS 4주차 정리입니다.

🧿 AlertManager

Prometheus 모니터링 시스템의 경고 관리 도구

 Prometheus에서 생성된 경고를 처리하고, 라우팅하며, 그룹화하며, 다양한 수신자로 전송하는 데 사용됩니다.

 Slack, PagerDuty, Email 등 다양한 수신자로 경고를 보낼 수 있습니다. 이를 통해 운영자는 중요한 이벤트에 대해 즉각적으로 통지를 받아 시스템을 빠르게 대응할 수 있습니다

🧿 경고 시스템의 구성 요건

1. 사용자가 빠르게 이해할 수 있는 메시지2. 심각도 구분, 경고 주기 설정3. 효과적인 채널 선택: email, 문자, slack4. 정확한 담당자에게 전달

 

Prometheus 와 AlertManager

1. Alert

  ◾ Prometheus는 시스템 경고 설정에 관한 정책을 별도의 리소스인 prometheusrules CRD 관리합니다.

2. Inactive

  ◾ prometheusrules에 등록된 메시지 중에서 경고가 활성화되지 않은 정상적인 상태

3. Pending

  ◾ 설정된 임계값을 초과해서 시스템 경고를 발생했으나 경고 메시지를 전달하기까지 설정한 임계값 시간을 초과하지 않은 상태

  ◾ Prometheus는 경고 상황 발생과 실제 경고 전달 간의 시간 간격을 설정 -> 오탐 혹은 자동 복구된 에러 메시지 등을 처리

4. Firing

  ◾ 임계값과 임계 시간을 초과해서 경보가 발생한 메시지

  ◾ 메시지는 AlertManager에 전달되어 Slack 등에 전달

 

항상 Watchdog 메시지가 Firing 상태로 활성화되어 있습니다. => 장애와 상관없이 사용자가 AlertManager의 정상 동작 여부를 시각적으로 빠르게 확인하는 용도

 

🧿 AlertManager 의 NodePort 정보를 확인하여 웹에 접속합니다.

1. Alert

  ◾ 시스템에 문제가 발생하면 해당 경고 메시지 목록을 확인

2. Silence

  ◾ 특정 시간 동안 경고 메시지를 받지 않고 싶을 때 경고 메시지별로 경고 메지지를 일시 중단

3. Status

  ◾ AlertManager 상세 설정 확인

시스템 경고 메시지 전달을 위한 Slack 채널 및 Webhook URL

 

경고 메시지를 수신하는 용도의 별도 전용 Slack 채널을 생성 => AlertManager에 등록

 

Webhook ?

  ◾ 웹 애플리케이션 간에 데이터를 전송하기 위한 방법 중 하나입니다. 이는 일종의 HTTP 콜백(callback)으로서, 두 개 이상의 웹 애플리케이션 간에 특정 이벤트가 발생할 때 다른 애플리케이션에 알림을 보내고자 할 때 사용됩니다.

🧿 새 워크스페이스를 개설합니다.

🧿 Slack 에서 사용할 email을 입력합니다.

🧿 새 워크스페이스의 이름을 설정합니다.

🧿 AlertManager를 수신할 전용 채널을 생성합니다.

🧿 Webhook URL을 추가합니다.

AlertManager 설정 파일에 Slack Webhook URL 등록

경고 메시지 전달을 위한 Slack 채널 등록 등의 설정을 AlertManager 설정파일 (alermanager.yaml)에서 관리 -> Prometheus Helm 차트의 템플릿 변수 파일(my-values.yaml)에서 수정

 

🧿 Prometheus Helm 차트의 템플릿 변수 파일을 수정하고 업데이트 합니다.

alertmanager:
  config:
    global:
      resolve_timeout: 5m
      slack_api_url: 'https://hooks.slack.com/services/xxx'
    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: '#k8s-alert'
        send_resolved: true
        title: '[{{.Status | toUpper}}] {{ .CommonLabels.alertname }}'
        text: |
          *Description:* {{ .CommonAnnotations.description }}

✔ slack_api_url:

  ◾ Slack API에서 생성한 Slack Webhook URL을 등록

✔ receivers: 

  ◾ 전송 채널로 슬랙을 사용하기 위해 'slack-notification'를 등록, 이메일은 'email-config'

✔ slack_configs:

  ◾ 경고 메시지를 받는 slack 채널 이름을 등록

 

🧿 설정을 수정한 후 Helm 차트를 재배포합니다.

🧿 AlerManager Pod 상세정보를 확인합니다.

config-reloader: /etc/alertmanager/config form config-volume (ro)

  ◾ config-reloader Pod는 config-volume라는 이름으로 config파일을 마운트합니다.

config-volume: Type: Secret

  ◾ config-volume은 시크릿 타입의 변수를 사용합니다.

✔ SecretName: alertmanager-prometheus-kube-prometheus-alertmanager-generated

  ◾ 해당 시크릿 이름으로 config설정이 저장

 

🧿 Secret 설정 파일을 확인합니다.

🧿 Slack 채널에서 AlertManager 메시지를 확인합니다.

AlertManager 기능 검증

🧿 AlerManager와 Prometheus가 실행되지 않은 Node (ubuntu20-2)를 종료합니다.

🧿  새로 발생한 Pending 메시지를 확인할 수 있습니다.

✔ 각 시스템 경고 정책(prometheusrules)에 설정된 지연 시간 동안 머무르다 초과하면 Firing 상태로 이동하고 AlertManager에 Push이벤트로 전달됩니다.

🧿 prometheusrules의 상세 내용 확인

Prometheus는 시스템 경고 정책을 별도의 prometheusrules CRD로 관리

prometheusrules에 등록된 정책은 설정한 임계값이 초과하면 경고 메시지 발생

🧿 Alarm 을 중지합니다.

🧿 "Alert" 메뉴에서 사라지고 "Silence' 메뉴에서 확인할 수 있습니다.

사용자 정의 prometheusrules 정책 설정

애플리케이션에 적용할 수 있는 다양한 시스템 경고 정책 모범 사례 제공

https://awesome-prometheus-alerts.grep.to/

 

Awesome Prometheus alerts

Collection of alerting rules

awesome-prometheus-alerts.grep.to

🧿 시스템 경고 정책을 설정하기 위해 기존의 prometheusrules를 수정합니다.

여유공간이 5%미만인 경우 시스템 경고를 발생

 

🧿 기존 정책을 YAML로 다운받아 여유공간이 20%미만일때 경고발생 정책을 추가합니다.

    - alert: NodeFilesystemAlmostOutOfFiles
      annotations:
        description: Filesystem on {{ $labels.device }} at {{ $labels.instance }}
          has only {{ printf "%.2f" $value }}% available inodes left.
        runbook_url: https://runbooks.prometheus-operator.dev/runbooks/node/nodefilesystemalmostoutoffiles
        summary: Filesystem has less than 20% inodes left.
      expr: |-
        (
          node_filesystem_files_free{job="node-exporter",fstype!=""} / node_filesystem_files{job="node-exporter",fstype!=""} * 100 < 20
        and
          node_filesystem_readonly{job="node-exporter",fstype!=""} == 0
        )
      for: 1m
      labels:
        severity: warning

🧿 수정한 YAML 파일을 적용해 새로운 prometheusrules 경고 정책을 추가합니다.

 

Comments