카테고리 없음

AWS EC2 Prometheus & AWS AMP에서 Azure AKS Pod 로깅 및 모니터링하는 방법

idea9329 2025. 2. 13. 11:17
반응형

AWS의 EC2에서 운영하는 Prometheus 또는 AWS Managed Prometheus (AMP) 를 사용하여 Azure AKS의 Pod 로그를 직접 수집 및 모니터링하려면 다음과 같은 방법을 사용해야 합니다.


✅ 1. AKS에서 Prometheus Exporter 배포 (메트릭 수집)

AWS에서 Prometheus를 운영하는 경우, Azure AKS에서 Prometheus가 데이터를 가져올 수 있도록 Exporter를 배포해야 합니다.

🔹 1.1 kube-state-metrics 설치 (Pod 상태 정보 수집)

AKS의 Pod, Deployment, Service 등의 상태 정보를 가져오기 위해 kube-state-metrics를 설치합니다.

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install kube-state-metrics prometheus-community/kube-state-metrics -n monitoring --create-namespace

🔹 1.2 Node Exporter 설치 (노드 메트릭 수집)

AKS의 노드 CPU, 메모리, 디스크 사용량 등을 수집하기 위해 Node Exporter를 설치합니다.

helm install node-exporter prometheus-community/prometheus-node-exporter -n monitoring

🔹 1.3 Prometheus용 Service 설정 (외부 접근 가능)

기본적으로 AKS 클러스터 내부에서만 접근이 가능하므로, AWS에서 접근할 수 있도록 LoadBalancer 또는 Ingress를 설정해야 합니다.

✅ 방법 1: LoadBalancer를 사용하여 Prometheus Exporter 노출

apiVersion: v1
kind: Service
metadata:
  name: kube-state-metrics
  namespace: monitoring
spec:
  type: LoadBalancer
  ports:
    - port: 8080
      targetPort: 8080
      protocol: TCP
  selector:
    app.kubernetes.io/name: kube-state-metrics

적용 후 외부 IP 확인:

kubectl get svc -n monitoring kube-state-metrics

출력 예시:

NAME                  TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)
kube-state-metrics    LoadBalancer   10.0.20.15     52.172.15.10   8080:32456/TCP

👉 EXTERNAL-IP (예: 52.172.15.10) 를 AWS Prometheus에서 사용해야 합니다.


✅ 2. AWS EC2 Prometheus에서 Azure AKS의 메트릭 수집

이제 AWS에서 운영하는 Prometheus가 Azure AKS의 Exporter에서 메트릭을 가져오도록 설정합니다.

🔹 2.1 Prometheus 설정 파일 (prometheus.yml) 수정

EC2에서 운영 중인 Prometheus에서 Azure AKS에 대한 scrape_configs 설정을 추가해야 합니다.

scrape_configs:
  - job_name: 'aks-kube-state-metrics'
    metrics_path: /metrics
    static_configs:
      - targets: ['52.172.15.10:8080'] # AKS의 kube-state-metrics IP

  - job_name: 'aks-node-exporter'
    metrics_path: /metrics
    static_configs:
      - targets: ['52.172.16.20:9100'] # AKS의 Node Exporter IP

👉 위에서 확인한 EXTERNAL-IP를 targets에 추가하여 Azure의 AKS 데이터를 가져올 수 있도록 설정합니다.

🔹 2.2 Prometheus 설정 적용 및 실행

Prometheus를 재시작하여 변경 사항을 반영합니다.

systemctl restart prometheus

또는 Docker 컨테이너에서 실행 중이라면:

docker restart prometheus

✅ 3. AWS Managed Prometheus (AMP)에서 Azure AKS의 메트릭 수집

AWS EC2가 아닌 AWS Managed Prometheus (AMP) 를 사용하는 경우, Remote Write 기능을 사용해야 합니다.

🔹 3.1 AMP에서 Ingestion URL 확인

AWS 콘솔에서 AWS Managed Prometheus (AMP) → Workspaces 로 이동한 뒤 Ingestion URL을 확인합니다.

🔹 3.2 Prometheus 설정에 remote_write 추가

EC2에서 운영하는 Prometheus가 AWS Managed Prometheus(AMP)로 데이터를 보내도록 설정합니다.

remote_write:
  - url: "https://aps-workspaces.<AWS_REGION>.amazonaws.com/api/v1/remote_write"
    sigv4:
      region: "<AWS_REGION>"
    queue_config:
      max_samples_per_send: 1000
      max_shards: 200
      capacity: 2500

👉 <AWS_REGION> 을 실제 사용하는 AWS 리전으로 변경해야 합니다.

Prometheus를 다시 실행하면 AWS Managed Prometheus(AMP)로 데이터가 전송됩니다.


✅ 4. AWS Prometheus에서 Azure AKS 로그 수집

Pod 로그까지 모니터링하려면 Loki 또는 CloudWatch를 활용해야 합니다.

🔹 4.1 Azure AKS의 Pod 로그를 AWS CloudWatch로 전송

AKS에서 Pod 로그를 AWS CloudWatch로 전송하면, AWS에서 분석 및 모니터링이 가능합니다.

1️⃣ AWS CloudWatch Logs Agent를 Azure AKS에 설치

kubectl apply -f https://raw.githubusercontent.com/aws/amazon-cloudwatch-agent/main/cloudwatch-agent.yaml

👉 CloudWatch 에이전트를 설치하면 Pod 로그가 AWS CloudWatch에 저장됩니다.

2️⃣ CloudWatch Logs에서 Loki로 로그 전달

AWS에서 운영하는 Grafana Loki를 사용하여 CloudWatch의 로그를 Prometheus와 연동하여 조회할 수 있습니다.

loki:
  sources:
    aws_cloudwatch:
      log_group_name: "/aws/eks/aks-cluster-name"

✅ 5. Grafana에서 AWS Prometheus & AKS Pod 데이터 시각화

🔹 5.1 Grafana에서 AWS Prometheus 데이터 소스 추가

  1. Grafana에 로그인
  2. Data Sources  Add Data Source
  3. Prometheus 선택 후, 다음 값 입력
    • URL: http://<AWS_EC2_PROMETHEUS_IP>:9090
    • 또는 https://aps-workspaces.<AWS_REGION>.amazonaws.com/api/v1/query

🔹 5.2 PromQL을 사용하여 AKS 메트릭 조회

  • AKS Pod 상태 조회
    kube_pod_status_phase{namespace="default"}
  • AKS 노드 CPU 사용량 조회
    node_cpu_seconds_total
  • AKS Pod별 메모리 사용량 조회
    container_memory_usage_bytes

🚀 최종 정리

 Azure AKS에 Prometheus Exporter(kube-state-metrics, Node Exporter) 배포
 Exporter를 LoadBalancer로 노출하여 AWS에서 접근 가능하도록 설정
 AWS EC2 Prometheus 또는 AWS AMP에서 prometheus.yml을 수정하여 Azure AKS 데이터를 수집
 AWS CloudWatch로 Azure AKS Pod 로그 전송 후 Loki와 연동하여 로그 모니터링
 Grafana에서 AWS Prometheus 및 CloudWatch Logs 데이터를 시각화

이 방법을 사용하면 AWS에서 Azure AKS Pod 상태 및 로그를 실시간으로 모니터링할 수 있습니다. 🚀

반응형