모니터링 - Amazon EKS

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

모니터링

졸업된 CNCF 프로젝트인 Prometheus는 Kubernetes에 기본적으로 통합되는 가장 인기 있는 모니터링 시스템입니다. Prometheus는 컨테이너, 포드, 노드 및 클러스터에 대한 지표를 수집합니다. 또한 Prometheus는 AlertsManager를 활용하여 클러스터에 문제가 있는 경우 경고를 프로그래밍할 수 있습니다. Prometheus는 지표 데이터를 지표 이름 및 키/값 페어로 식별되는 시계열 데이터로 저장합니다. Prometheus에는 Prometheus 쿼리 언어의 약어인 PromQL이라는 언어를 사용한 쿼리가 포함되어 있습니다.

Prometheus 지표 컬렉션의 상위 수준 아키텍처는 다음과 같습니다.

Prometheus 지표 컬렉션

Prometheus는 풀 메커니즘을 사용하고 내보내기를 사용하는 대상과 kube 상태 지표를 사용하는 Kubernetes API에서 지표를 스크레이프합니다. 즉, 애플리케이션 및 서비스는 Prometheus 형식의 지표가 포함된 HTTP(S) 엔드포인트를 노출해야 합니다. 그러면 Prometheus는 구성에 따라 이러한 HTTP(S) 엔드포인트에서 지표를 주기적으로 가져옵니다.

내보내기를 사용하면 타사 지표를 Prometheus 형식의 지표로 사용할 수 있습니다. Prometheus 내보내기는 일반적으로 각 노드에 배포됩니다. 내보내기의 전체 목록은 Prometheus 내보내기를 참조하세요. 노드 내보내기는 Linux 노드의 호스트 하드웨어 및 OS 지표를 내보내는 데 적합하지만 Windows 노드에서는 작동하지 않습니다.

안정적인 Prometheus helm 차트를 사용하는 경우 Windows 노드가 있는 혼합 노드 EKS 클러스터에서이 내보내기는 Windows용이 아니므로 Windows 노드에 실패한 포드가 표시됩니다. Windows 작업자 풀을 별도로 처리하고 대신 Windows 작업자 노드 그룹에 Windows 내보내기를 설치해야 합니다.

Windows 노드에 대한 Prometheus 모니터링을 설정하려면 Windows 서버 자체에 WMI 내보내기를 다운로드하여 설치한 다음 Prometheus 구성 파일의 스크레이프 구성 내에서 대상을 설정해야 합니다. 릴리스 페이지에서는 사용 가능한 모든 .msi 설치 프로그램과 해당 기능 세트 및 버그 수정을 제공합니다. 설치 관리자는 Windows_exporter를 Windows 서비스로 설정하고 Windows 방화벽에서 예외를 생성합니다. 설치 관리자가 파라미터 없이 실행되는 경우, 활성화된 수집기, 포트 등에 대한 기본 설정으로 내보내기가 실행됩니다.

노드를 부트스트랩하거나 선택한 구성 관리 도구(예: Chef, Ansible, SSM 등)를 사용하여 Windows 노드에 Windows Exporter를 설치하는 동안 taints/tolerations 또는 RuntimeClass를 사용하여 linux 노드에만 선택적으로 배포하는 것을 제안하는이 가이드의 예약 모범 사례 섹션을 확인할 수 있습니다.

노드 내보내기가 데몬 세트 로 설치된 Linux 노드와 달리 Windows 노드에서는 WMI 내보내기가 호스트 자체에 설치됩니다. 내보내기 도구는 CPU 사용량, 메모리 및 디스크 I/O 사용량과 같은 지표를 내보내고 IIS 사이트 및 애플리케이션, 네트워크 인터페이스 및 서비스를 모니터링하는 데 사용할 수도 있습니다.

windows_exporter는 기본적으로 활성화된 수집기의 모든 지표를 노출합니다. 이는 오류를 방지하기 위해 지표를 수집하는 데 권장되는 방법입니다. 그러나 고급 사용의 경우 windows_exporter에 지표를 필터링하기 위한 선택적 수집기 목록을 전달할 수 있습니다. Prometheus 구성에서 collect[] 파라미터를 사용하면 됩니다.

Windows의 기본 설치 단계에는 필터링하려는 수집기와 같은 인수를 사용하여 부트스트래핑 프로세스 중에 서비스로 내보내기를 다운로드하고 시작하는 작업이 포함됩니다.

> Powershell Invoke-WebRequest https://github.com/prometheus-community/windows_exporter/releases/download/v0.13.0/windows_exporter-0.13.0-amd64.msi -OutFile <DOWNLOADPATH> > msiexec /i <DOWNLOADPATH> ENABLED_COLLECTORS="cpu,cs,logical_disk,net,os,system,container,memory"

기본적으로 포트 9182의 /metrics 엔드포인트에서 지표를 스크레이프할 수 있습니다. 이때 Prometheus는 Prometheus 구성에 다음 scrape_config를 추가하여 지표를 사용할 수 있습니다.

scrape_configs: - job_name: "prometheus" static_configs: - targets: ['localhost:9090'] ... - job_name: "wmi_exporter" scrape_interval: 10s static_configs: - targets: ['<windows-node1-ip>:9182', '<windows-node2-ip>:9182', ...]

Prometheus 구성은를 사용하여 다시 로드됩니다.

> ps aux | grep prometheus > kill HUP <PID>

대상을 추가하는 더 나은 권장 방법은 ServiceMonitor 객체에 대한 정의를 제공하는 ServiceMonitor라는 사용자 지정 리소스 정의https://github.com/prometheus-operator/kube-prometheus/releases]와 정의한 ServiceMonitors를 활성화하고 필요한 Prometheus 구성을 자동으로 빌드하는 컨트롤러를 사용하는 것입니다.

Kubernetes 서비스 그룹을 모니터링하는 방법을 선언적으로 지정하는 ServiceMonitor는 Kubernetes 내에서 지표를 스크레이프하려는 애플리케이션을 정의하는 데 사용됩니다. ServiceMonitor 내에서 운영자가 Kubernetes 서비스를 식별하는 데 사용할 수 있는 Kubernetes 레이블을 지정합니다. 그러면 모니터링하려는 포드가 식별됩니다.

ServiceMonitor를 활용하려면 특정 Windows 대상, 헤드리스 서비스 및 Windows 노드용 ServiceMontor를 가리키는 엔드포인트 객체를 생성합니다.

apiVersion: v1 kind: Endpoints metadata: labels: k8s-app: wmiexporter name: wmiexporter namespace: kube-system subsets: - addresses: - ip: NODE-ONE-IP targetRef: kind: Node name: NODE-ONE-NAME - ip: NODE-TWO-IP targetRef: kind: Node name: NODE-TWO-NAME - ip: NODE-THREE-IP targetRef: kind: Node name: NODE-THREE-NAME ports: - name: http-metrics port: 9182 protocol: TCP --- apiVersion: v1 kind: Service ##Headless Service metadata: labels: k8s-app: wmiexporter name: wmiexporter namespace: kube-system spec: clusterIP: None ports: - name: http-metrics port: 9182 protocol: TCP targetPort: 9182 sessionAffinity: None type: ClusterIP --- apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor ##Custom ServiceMonitor Object metadata: labels: k8s-app: wmiexporter name: wmiexporter namespace: monitoring spec: endpoints: - interval: 30s port: http-metrics jobLabel: k8s-app namespaceSelector: matchNames: - kube-system selector: matchLabels: k8s-app: wmiexporter

운영자 및 ServiceMonitor 사용에 대한 자세한 내용은 공식 운영자 설명서를 확인하세요. Prometheus는 많은 서비스 검색 옵션을 사용하여 동적 대상 검색을 지원합니다.