소개
알림 및 통지는 배포 워크플로우의 중요한 부분입니다. Kubernetes 클러스터를 사용할 때 종종 클러스터의 중요한 문제에 대해 즉시 알림을 받아야 할 수 있습니다.
Alertmanager는 클러스터에 설치된 Prometheus 스택의 일부입니다. 이를 통해 Prometheus와 같은 다양한 소스에서 경고를 받을 수 있습니다. Prometheus 측에서 규칙이 생성되고, 그에 따라 경고가 발생할 수 있습니다. Alertmanager는 이러한 경고를 가로채고, 그룹화(집계), 다른 변환을 적용하고, 마지막으로 구성된 수신자에게 경로를 지정하는 것이 책임입니다. 필요한 경우 알림 메시지를 추가 세부 정보를 포함하여 추가로 서식을 지정할 수 있습니다. Slack, Gmail 등을 사용하여 실시간 알림을 보낼 수 있습니다.
이 섹션에서는 기존 경고를 검사하고 새로운 경고를 생성한 다음, 동일한 매니페스트 파일을 사용하여 Prometheus를 구성하는 것과 같은 방법으로 Alertmanager를 구성하여 Slack을 통해 알림을 보내는 방법에 대해 알아보겠습니다.
목차
전제 조건
이 튜토리얼을 완료하려면 다음이 필요합니다:
- 클러스터에 설치된 Prometheus 모니터링 스택(다음에서 설명한 대로) Prometheus Stack.
- 클러스터에 설치된 Loki 스택(다음에서 설명한 대로) Loki Stack.
- Emojivoto 샘플 앱이 클러스터에 배포되었습니다. 메인 저장소에서 단계를 따라주세요. 이 애플리케이션에 대한 경고를 생성하게 됩니다.
- Slack 워크스페이스의 관리 권한이 필요합니다. 이후에는 Alertmanager에서 알림을 보내기 위해 사용될 들어오는 웹훅이 포함된 응용 프로그램을 생성하게 됩니다.
단계 1 – 포함된 경고 확인
kube-prom-stack
에는 이미 활성화된 규칙이 100개가 넘습니다. Prometheus 콘솔에 액세스하려면 먼저 로컬 머신으로 포트 포워드를 수행하십시오.
localhost:9091에서 웹 브라우저를 열고 알림 메뉴 항목에 액세스하십시오. 미리 정의된 알림 목록을 볼 수 있으며 다음과 같이 보일 것입니다:
알림 중 하나를 클릭하여 확장할 수 있습니다. 표현식에 대한 정보, 설정된 레이블 및 중요한 템플릿 관점에서의 주석을 볼 수 있습니다. Prometheus는 알림의 주석과 레이블에서 템플릿을 지원합니다. 자세한 정보는 공식 문서를 참조하십시오.
단계 2 – 새 경보 만들기
새 경보를 만들려면 kube-prom-stack
헬름 값 파일의 additionalPrometheusRule
섹션에 새로운 정의를 추가해야 합니다.
emojivoto
네임스페이스가 예상된 인스턴스 수를 가지고 있지 않은 경우 트리거되는 샘플 경보를 생성합니다. emojivoto
애플리케이션의 예상되는 팟 수는 4개입니다.
먼저, 선호하는 텍스트 편집기(가능하면 YAML 린트 지원 기능이 있는 것이 좋습니다)를 사용하여 Starter Kit 리포지토리에서 제공하는 04-setup-observability/assets/manifests/prom-stack-values.yaml
파일을 엽니다. 그런 다음 additionalPrometheusRules
블록의 주석 처리를 해제합니다.
마지막으로, helm
을 사용하여 설정을 적용합니다:
경보가 성공적으로 생성되었는지 확인하려면 Prometheus 콘솔로 이동하여 Alerts 메뉴 항목을 클릭하고 EmojivotioInstanceDown
경보를 식별합니다. 이것은 목록의 맨 아래에 표시되어야 합니다.
단계 3 – Alertmanager를 Slack으로 알림 보내도록 구성
이 섹션을 완료하려면 Slack 워크스페이스에 대한 관리 권한이 있어야합니다. 이를 통해 다음 단계에서 필요한 수신 웹훅을 생성할 수 있습니다. 또한 Alertmanager에서 수신된 모든 경고를 범위로 지정하여 해당 요약 및 설명을 새 줄에 인쇄하는 채널을 만들어야합니다.
- 웹 브라우저를 열고
https://api.slack.com/apps
로 이동합니다. 새 앱 생성 버튼을 클릭합니다. - 앱 만들기 창에서 기존 설정 옵션을 선택합니다. 그런 다음 애플리케이션에 이름을 지정하고 적절한 워크스페이스를 선택합니다.
- 기본 정보 페이지에서 수신 웹훅 옵션을 클릭하여 활성화하고 하단의 워크스페이스에 새 웹훅 추가 버튼을 클릭합니다.
- 다음 페이지에서 채널 검색… 드롭다운 목록을 사용하여 알림을 보낼 원하는 채널을 선택합니다. 준비가 되면 허용 버튼을 클릭합니다.
- 페이지에 표시된 웹훅 URL 값을 복사합니다. 다음 섹션에서 필요합니다.
다음으로 Alertmanager에게 Slack 알림을 보내는 방법을 알려줍니다. 원하는 텍스트 편집기를 사용하여 시작 킷 리포지토리에서 제공하는 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml
파일을 엽니다. 전체 alertmanager.config
블록을 주석 처리 해제합니다. <>
플레이스홀더를 적절히 바꿔 slack_api_url
및 채널
값을 업데이트하세요.
위의 구성에서,
slack_api_url
: 4단계에서 생성된 Slack 웹훅 URLreceivers.[].slack_configs
: 알림을 보낼 Slack 채널, 알림 제목 및 실제 메시지를 정의합니다. 또한 귀하의 요구에 따라 알림 메시지(또는 본문)의 형식을 지정할 수도 있습니다.title
및text
: 발생한 경고를 반복하고 Prometheus 템플릿 시스템을 사용하여 요약 및 설명을 출력합니다.send_resolved
: 경고가 더 이상 발생하지 않을 때 Alertmanager가 알림을 보내야하는지 여부를 나타내는 부울입니다.
matcher
및 continue
매개변수는 아직 주석 처리되어 있으며 나중에 안내서에서 주석 처리를 해제하게 됩니다. 현재는 주석 처리된 상태로 유지해야 합니다.
마지막으로, helm
을 사용하여 kube-prometheus-stack
을 업그레이드합니다:
이 시점에서 모든 발생 경고에 대한 Slack 알림을 받아야 합니다.
다음으로, 이전에 추가한 EmojivotoInstanceDown
경고가 작동하고 Slack으로 알림을 보내는지 테스트합니다. 이를 위해 emojivoto
네임스페이스의 /emoji
배포의 레플리카 수를 줄여보겠습니다.
터미널에서 다음 명령을 실행하여 /emoji
배포의 레플리카 수를 0으로 변경합니다:
localhost:9091에서 웹 브라우저를 열고 Alerts 메뉴 항목에 액세스하십시오. 이전에 생성한 EmojivotoInstanceDown 경보를 검색하십시오. 배포 축소 후 약 1분 후에 경보 상태가 Firing로 표시되어야합니다.
A message notification will be sent to Slack to the channel you configured earlier if everything goes well. You should see the “The Number of pods from the namespace emojivoto
is lower than the expected 4.” alert in the Slack message as configured in the annotations.description
config of the additionalPrometheusRulesMap
block.
현재, 모든 경보 발화가 Slack 채널로 전송됩니다. 이는 알림 피로를 유발할 수 있습니다. 알림이 보내진 것을 자세히 파악하려면 Alertmanager가 특정 패턴과 일치하는 경보에 대해서만 알림을 보내도록 제한할 수 있습니다. 이는 matcher
매개변수를 사용하여 수행됩니다.
선택한 텍스트 편집기를 사용하여 Starter Kit 리포지토리에서 제공하는 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml
파일을 엽니다. 전체 alertmanager.config
블록의 주석을 해제하십시오. matcher
와 continue
매개변수를 반드시 주석 해제하십시오:
마지막으로 helm
을 사용하여 kube-prometheus-stack
을 업그레이드하십시오:
이제 EmojivotoInstanceDown
경보 이름과 일치하는 경보만 받아야합니다. continue
가 false로 설정되어 있으므로 Alertmanager는 이 경보에서만 알림을 보내고 다른 경보로부터는 보내지 않습니다.
슬랙에서 알림 이름을 클릭하면 Alertmanager 팟의 내부 Kubernetes DNS로 접근할 수 없는 웹 페이지가 열립니다. 이는 예상된 동작입니다. 확인할 유용한 링크 몇 가지: 자세한 정보는 DNS 팟 서비스,
AlertManager 구성 매개변수, 그리고 몇 가지 알림 예제를 확인할 수 있습니다.
단계 4 – 활성화된 알림 디버그
알림이 활성화되고 슬랙에 알림을 보내면 문제를 쉽게 디버그하고 빠르게 원인을 찾을 수 있어야 합니다.
이를 위해 이미 Prometheus 스택과 Loki 스택 튜토리얼에서 설치된 Grafana를 사용할 수 있습니다.
그래피의 포트 포워드를 포트 3000
에 대해 생성하세요:
로컬호스트:3000에서 웹 브라우저를 열고 기본 자격 증명 admin/prom-operator
을 사용하여 로그인하세요.
알림 섹션으로 이동하십시오. 상태 필터에서 작동 중 옵션을 클릭하십시오. 새 알림 생성 섹션에 정의된 emojivoto-instance-down
알림을 식별하고 확장하십시오. 다음을 확인해야 합니다:
그래프 보기 버튼을 클릭하십시오. 다음 페이지에서는 emojivoto
네임스페이스의 포드 수에 대한 메트릭으로 표시된 계산을 확인할 수 있습니다. Grafana는 기본적으로 최근 1시간의 시간 범위를 사용하여 결과를 필터링합니다. 알림이 작동된 시간 간격으로 조정하십시오. 더 세분화된 결과를 얻기 위해 시작-종료 옵션을 사용하거나 빠른 범위를 사용하여 지난 30분
과 같이 조정할 수 있습니다.
탐색 탭에서 Loki 데이터 소스를 선택하십시오. 로그 브라우저 입력란에 다음을 입력하고 페이지 오른쪽 상단의 쿼리 실행 버튼을 클릭하십시오. 다음을 확인해야 합니다:
시간 간격을 적절하게 조정하십시오.
이 페이지에서 로그 결과를 추가로 필터링할 수 있습니다. 예를 들어 emojivoto
네임스페이스의 web-svc
컨테이너의 로그를 필터링하려면 다음 쿼리를 입력할 수 있습니다: {namespace="emojivoto", container="web-svc"}
LogQL
사용에 대한 자세한 설명은 단계 3 – LogQL 사용에서 찾을 수 있습니다.
이전에 설치한 내보낸 Kubernetes 이벤트를 사용하여 emojivoto
네임스페이스와 관련된 이벤트를 필터링할 수도 있습니다.
로그 브라우저에 다음 쿼리를 입력하십시오: {app="event-exporter"} |= "emojivoto"
. 이는 emojivoto
네임스페이스와 관련된 Kubernetes 이벤트를 반환합니다.
결론
이 튜토리얼에서는 기존 경보를 검사하고 새로운 경보를 생성하며, AlertManager
를 구성하여 Slack에 알림을 보내는 방법에 대해 배웠습니다.
더 알아보기
다음 단계는 DOKS 클러스터에서 Velero 또는 TrilioVault를 사용하여 백업 및 복원 설정을하는 것입니다.