본문 바로가기
WIKI 기술 지식 베이스

모니터링

원문 보기 위키 갱신

모니터링 (Monitoring)

Flagger가 canary 분석을 위해 제공하는 Grafana 대시보드, 로깅, 이벤트 웹훅, 그리고 Prometheus 메트릭을 이 문서에서 알려드릴게요. canary 상태와 트래픽 가중치를 어떻게 모니터링하는지 살펴봅시다.

출처: 문서

본문

Grafana

Flagger는 canary 분석을 위해 만들어진 Grafana 대시보드를 제공합니다. Helm으로 Grafana를 설치합니다:

helm upgrade -i flagger-grafana flagger/grafana \
--set url=http://prometheus:9090

대시보드는 primary와 canary 워크로드의 RED와 USE 메트릭을 보여줍니다:

Canary Dashboard

로깅 (Logging)

canary 오류와 지연 스파이크는 Kubernetes 이벤트로 기록되고 Flagger가 json 형식으로 로깅합니다:

kubectl -n istio-system logs deployment/flagger --tail=100 | jq .msg

Starting canary deployment for podinfo.test
Advance podinfo.test canary weight 5
Advance podinfo.test canary weight 10
Advance podinfo.test canary weight 15
Advance podinfo.test canary weight 20
Advance podinfo.test canary weight 25
Advance podinfo.test canary weight 30
Advance podinfo.test canary weight 35
Halt podinfo.test advancement success rate 98.69% < 99%
Advance podinfo.test canary weight 40
Halt podinfo.test advancement request duration 1.515s > 500ms
Advance podinfo.test canary weight 45
Advance podinfo.test canary weight 50
Copying podinfo.test template spec to podinfo-primary.test
Halt podinfo-primary.test advancement waiting for rollout to finish: 1 old replicas are pending termination
Scaling down podinfo.test
Promotion completed! podinfo.test

이벤트 웹훅 (Event Webhook)

Flagger는 지정한 웹훅으로 이벤트 페이로드를 보내도록 구성할 수 있습니다:

helm upgrade -i flagger flagger/flagger \
--set eventWebhook=https://example.com/flagger-canary-event-webhook

EVENT_WEBHOOK_URL 환경 변수로도 이벤트 웹훅을 활성화할 수 있습니다. 이는 예를 들어 API 키가 포함된 민감한 값을 secret으로 저장할 때 유용합니다.

구성하면 canary 배포 중 Flagger가 수행하는 모든 작업이 HTTP POST 요청을 통해 JSON으로 전송됩니다. JSON 페이로드의 스키마는 다음과 같습니다:

{
  "name": "string (canary name)",
  "namespace": "string (canary namespace)",
  "phase": "string (canary phase)",
  "metadata": {
    "eventMessage": "string (canary event message)",
    "eventType": "string (canary event type)",
    "timestamp": "string (unix timestamp ms)"
  }
}

예시:

{
  "name": "podinfo",
  "namespace": "default",
  "phase": "Progressing",
  "metadata": {
    "eventMessage": "New revision detected! Scaling up podinfo.default",
    "eventType": "Normal",
    "timestamp": "1578607635167"
  }
}

이벤트 웹훅은 canary 수준에서 다음과 같이 덮어쓸 수 있습니다:

  analysis:
    webhooks:
      - name: "send to Slack"
        type: event
        url: http://event-recevier.notifications/slack

메트릭 (Metrics)

Flagger는 canary 분석 상태와 목적지 가중치 값을 확인하는 데 사용할 수 있는 Prometheus 메트릭을 노출합니다:

# Flagger version and mesh provider gauge
flagger_info{version="0.10.0", mesh_provider="istio"} 1

# Canaries total gauge
flagger_canary_total{namespace="test"} 1

# Canary promotion last known status gauge
# 0 - running, 1 - successful, 2 - failed
flagger_canary_status{name="podinfo" namespace="test"} 1

# Canary traffic weight gauge
flagger_canary_weight{workload="podinfo-primary" namespace="test"} 95
flagger_canary_weight{workload="podinfo" namespace="test"} 5

# Seconds spent performing canary analysis histogram
flagger_canary_duration_seconds_bucket{name="podinfo",namespace="test",le="10"} 6
flagger_canary_duration_seconds_bucket{name="podinfo",namespace="test",le="+Inf"} 6
flagger_canary_duration_seconds_sum{name="podinfo",namespace="test"} 17.3561329
flagger_canary_duration_seconds_count{name="podinfo",namespace="test"} 6

# Last canary metric analysis result per different metrics
flagger_canary_metric_analysis{metric="podinfo-http-successful-rate",name="podinfo",namespace="test"} 1
flagger_canary_metric_analysis{metric="podinfo-custom-metric",name="podinfo",namespace="test"} 0.918223108974359

# Canary successes total counter
flagger_canary_successes_total{name="podinfo",namespace="test",deployment_strategy="canary",analysis_status="completed"} 5

# Canary failures total counter
flagger_canary_failures_total{name="podinfo",namespace="test",deployment_strategy="canary",analysis_status="completed"} 1

더 알아보기 (Learn more)