Ssoon
[4주차] CHAPTER-19 얼럿매니저(alertmanager) 본문
이정훈님이 집필하신 "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/
🧿 시스템 경고 정책을 설정하기 위해 기존의 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 경고 정책을 추가합니다.
'Production Kubernetes Online Study' 카테고리의 다른 글
[4주차] 프로메테우스 & 그라파나 & 로키 (0) | 2023.03.31 |
---|---|
[4주차] CHAPTER-20 로키(Loki) (0) | 2023.03.31 |
[4주차] CHAPTER-18 그라파나(Grafana) (0) | 2023.03.29 |
[4주차] CHAPTER-17 프로메테우스(Prometheus) (2) | 2023.03.28 |
[4주차] CHAPTER-16 쿠버네티스 모니터링 도구 (0) | 2023.03.27 |