F5 NGINX의 NGINX Ingress Controller를 Prometheus 운영자 ServiceMonitor
CRD와 결합하면 Helm을 사용하여 NGINX Ingress Controller 배포에서 메트릭을 훨씬 더 쉽고 빠르게 수집할 수 있습니다. NGINX Ingress Controller 헬름 차트는 이제 기존 Prometheus 및 prometheus-operator 인프라를 즉시 활용할 수 있는 기능을 지원하여 NIC를 배포하고 Prometheus ServiceMonitor를
활용하여 바로 메트릭을 얻을 수 있습니다. 이 문서에서는 ServiceMonitor가
무엇인지, 설치 방법, 그리고 NGINX Ingress Controller 헬름 차트를 사용하여 이러한 특정 설정을 정의하는 방법에 대해 설명합니다.
Prometheus ServiceMonitor 사용자 정의 리소스 정의(CRD)를 사용하면 동적 서비스 집합을 모니터링하는 방법을 선언적으로 정의할 수 있습니다. 모니터링되는 서비스는 Kubernetes 레이블 선택기를 사용하여 정의됩니다. 이를 통해 조직은 지표가 노출되는 방식을 규정하는 규칙을 도입할 수 있습니다. 이러한 규칙에 따라 새로운 서비스가 자동으로 발견되고 Prometheus는 시스템을 재구성하지 않고도 메트릭을 수집하기 시작합니다. ServiceMonitor
는 Prometheus Operator의 일부입니다. 이러한 리소스는 Prometheus가 스크래핑하는 모니터링 대상을 설명하고 관리합니다. Prometheus 리소스는 ServiceMonitor Selector
필드를 사용하여 ServiceMonitor
에 연결합니다. Prometheus는 스크래핑 대상으로 표시된 대상이 무엇인지 쉽게 식별할 수 있습니다. 이를 통해 Kubernetes 클러스터에서 ServiceMonitor
리소스를 활용하여 NGINX Ingress Controller와 같은 솔루션을 모니터링할 수 있는 제어력과 유연성이 향상됩니다. 작업을 더욱 쉽게 하고 NGINX Ingress Controller에서 즉시 사용 가능한 지표를 제공하기 위해 최근에는 Helm 차트에 Prometheus ServiceMonitor를
사용할 수 있는 기능을 추가했습니다. 이를 통해 NGINX Ingress Controller를 배포한 직후에 Prometheus가 스크래핑을 시작할 수 있는 메트릭을 매우 쉽게 활성화할 수 있습니다. 이 기능을 사용하려면 ServiceMonitor가
"첨부"할 메트릭 수집을 위해 특별히 생성된 두 번째 서비스를 추가해야 합니다. 이를 통해 Prometheus 운영자는 어떤 서비스를 모니터링해야 하는지(메타데이터의 레이블을 사용) 알 수 있으므로 무엇을 어디에서 스크래핑해야 할지 알 수 있습니다. 배포 또는 헬름 파일의 일부인 경우 NGINX Ingress Controller에 대한 서비스가 어떻게 보이는지에 대한 예:
apiVersion: v1
종류: 서비스
메타데이터:
이름: nginx-ingress-servicemonitor
레이블:
앱: nginx-ingress-servicemonitor
사양:
포트:
- 이름: prometheus
프로토콜: TCP
포트: 9113
대상 포트: 9113
선택자:
앱: nginx-ingress
위 내용은 배포의 일부가 될 것입니다. 라벨, 앱: nginx-ingress-servicemonitor는
Prometheus 메트릭 스크래핑을 위해 serviceMonitor
에 "연결"합니다. 아래는 nginx-ingress-servicemonitor
라는 위의 서비스에 연결되는 샘플 serviceMonitor
입니다.
api 버전: monitoring.coreos.com/v1
종류: ServiceMonitor
메타데이터:
이름: nginx-ingress-servicemonitor
레이블:
앱: nginx-ingress-servicemonitor
사양:
선택기:
일치 레이블:
앱: nginx-ingress-servicemonitor
엔드포인트:
- 포트: prometheus
Prometheus 리소스를 만들어야 하는데, 이 리소스는 serviceMonitor
리소스를 찾도록 구성되어 Prometheus가 어떤 엔드포인트에서 메트릭을 스크래핑해야 할지 빠르고 쉽게 파악할 수 있도록 해줍니다. 아래 예에서 이 리소스는 Prometheus에게 사양에 따라 어떤 항목을 모니터링해야 하는지 알려줍니다. 아래에서는 spec.serviceMonitorSelector.matchLabels:를
모니터링하고 있습니다. Prometheus가 모든 네임스페이스에서 app.nginx-ingress-servicemonitor를
사용하여 matchLabels를 찾고 있는 것을 볼 수 있습니다. 이는 NGINX Ingress Controller Helm 차트와 Helm에서 배포되는 serviceMonitor
리소스와 일치합니다.
api 버전: monitoring.coreos.com/v1
종류: 프로메테우스
메타데이터:
이름: 프로메테우스
라벨:
프로메테우스: 프로메테우스
스펙:
복제본: 1
serviceAccountName: 프로메테우스
serviceMonitorNamespaceSelector: {}
serviceMonitorSelector:
matchLabels:
앱: nginx-ingress-servicemonitor
리소스:
요청:
메모리: 500마일
다음은 다양한 부분을 연결하는 다이어그램입니다. 그림 1: 서비스-모니터 객체 관계
prometheus-community/kube-prometheus-stack을
사용하여 전체 배포를 설치하려고 합니다. 이렇게 하면 prometheus, prometheus-operator 및 Grafana가 설치됩니다. 또한 격리를 위해 모니터링 네임스페이스에 이것을 설치하고 싶다는 점도 지정할 것입니다. helm을 사용하여 설치하는 방법은 다음과 같습니다. helm install metrics01 prometheus-community/kube-prometheus-stack -n monitoring --create-namespace
Prometheus와 Prometheus CRD가 클러스터에 설치되면 Prometheus 리소스를 생성할 수 있습니다. 이를 사전에 배포하면 Helm 차트에서 사용할 레이블로 Prometheus 설정을 "사전 계획"할 수 있습니다. 이런 접근 방식을 사용하면 Prometheus가 자동으로 NGINX Ingress Controller를 찾아 메트릭을 수집할 수 있습니다. NGINX Ingress Controller를 설치하기 전에 Prometheus 리소스가 배포됩니다. 이를 통해 prometheus-operator는
배포 후 NGINX Ingress 컨트롤러를 자동으로 수집하여 스크래핑하여 신속하게 지표를 제공할 수 있습니다.
api 버전: monitoring.coreos.com/v1
종류: Prometheus
메타데이터:
이름: prometheus
네임스페이스: 기본
레이블:
prometheus: 모니터링
사양:
복제본: 1
serviceAccountName: 프로메테우스
serviceMonitorNamespaceSelector: {}
serviceMonitorSelector:
matchLabels:
앱: nginx-ingress-servicemonitor
리소스:
요청:
메모리: 500마일
위의 예는 기본적인 예입니다. 핵심 부분은 우리가 지정한 spec.serviceMonitorSelector.matchLabels
값입니다. 이 값은 Helm 차트로 NGINX Ingress 컨트롤러를 배포할 때 사용할 값입니다. 우리는 Prometheus 지표를 바로 제공하고 싶습니다. 이를 위해 NGINX Ingress Controller 헬름 차트를 사용하겠습니다.
values.yaml
변경 사항Helm 차트의 values.yaml
파일을 검토할 수 있습니다. Prometheus를 활성화하고, 필요한 서비스를 생성하고, serviceMonitor
리소스를 생성하는 데 필요한 필수 구성 요소가 포함되어 있으므로 초점을 맞추고 싶은 Prometheus 섹션이 있습니다. Prometheus 섹션에서 prometheus.service 및 prometheus.serviceMonitor라는
몇 가지 설정을 볼 수 있습니다. Helm 차트를 사용할 때 필요한 서비스와 serviceMonitor를 생성하기 위해 위의 두 설정을 모두 활성화하겠습니다. 서비스를 활성화하고, serviceMonitor를
활성화하고, serviceMonitor
섹션에서 레이블을 정의하는 구체적인 섹션은 다음과 같습니다.
`servicemonitor` 지원이 최근 NGINX Ingress 컨트롤러 헬름 차트에 추가되었습니다.
prometheus:
## Prometheus 형식으로 NGINX 또는 NGINX Plus 메트릭을 노출합니다.
create: true
## 메트릭을 스크래핑할 포트를 구성합니다.
port: 9113
secret: ""
## 사용된 HTTP 스키마를 구성합니다.
scheme: http
service:
## prometheus.create=true가 필요합니다.
create: true
serviceMonitor:
create: true
레이블: { 앱: nginx-ingress-servicemonitor }
위의 값들을 분리해보면 다음과 같습니다.
prometheus:
## Prometheus 형식으로 NGINX 또는 NGINX Plus 메트릭을 노출합니다.
create: true
Helm에 NIC Prometheus 엔드포인트를 활성화하도록 알려줍니다. 필요한 경우 포트, 스키마 및 비밀번호를 추가로 정의할 수 있습니다. prometheus.service.create
의 값을 true로 설정하면 Helm이 자동으로 NIC ServiceMonitor 서비스를 생성합니다.
service:
## Prometheus 메트릭을 내부적으로 노출하기 위한 ClusterIP 서비스를 만듭니다.
## prometheus.create=true가 필요합니다.
create: true
마지막으로 serviceMonitor를
생성해야 합니다. 이 설정을 true로 설정하고 올바른 레이블을 추가하면 Prometheus 리소스와 일치하는 레이블이 생성되어 추가됩니다.
serviceMonitor:
## Kubernetes Pod에 대한 통계를 노출하기 위한 serviceMonitor를 생성합니다.
create: true
## Kubernetes 객체 레이블을 serviceMonitor 객체에 첨부합니다.
레이블: { app: nginx-ingress-servicemonitor }
라벨은 서비스 이름으로 연결됩니다. 라벨: { 앱: nginx-ingress-servicemointor }
요약하자면. Prometheus를 활성화하면 NIC의 Prometheus 익스포터 기능이 노출됩니다. 서비스 객체를 정의하면 Prometheus ServiceMonitor가 NIC Prometheus 익스포터 엔드포인트를 검색하는 방식입니다. serviceMonitor 객체를 정의합니다. 이렇게 하면 Prometheus ServiceMonitor가 이 작업을 모니터링하게 됩니다.
helm을
사용하여 NGINX Ingress Controller를 설치할 수 있습니다.values.yaml을
수정한 후 NGINX Ingress 컨트롤러를 설치할 수 있습니다. helm install nic01 -n nginx-ingress --create-namespace -f values.yaml .
NGINX Ingress Controller를 배포한 후 Prometheus 대시보드를 열고 상태 메뉴로 이동할 수 있습니다. 여기에서 대상과 서비스 검색 보기로 이동할 수 있습니다. Prometheus가 새로운 ServiceMonitor 리소스를 찾으면 엔드포인트를 스크래핑하고 메트릭을 수집하기 시작하며, 수집된 메트릭은 Prometheus 대시보드에서 즉시 확인됩니다.
그림 2: 프로메테우스 서비스 발견
그림 3: 프로메테우스 타겟
그림 4: 프로메테우스 NGINX 쿼리
helm 및 Prometheus와 같은 기본 Kubernetes 도구를 사용하면 NGINX Ingress Controller가 배포 시작 시 메트릭 수집을 훨씬 더 쉽게 만들어 "즉시 사용 가능한 메트릭"을 제공할 수 있음을 알 수 있습니다. 설치에 대한 참고 문서는 다음과 같습니다. 프로메테우스-운영자: https://prometheus-operator.dev/ https://github.com/prometheus-operator/prometheus-operator
"이 블로그 게시물에는 더 이상 사용할 수 없거나 더 이상 지원되지 않는 제품이 참조될 수 있습니다. 사용 가능한 F5 NGINX 제품과 솔루션에 대한 최신 정보를 보려면 NGINX 제품군을 살펴보세요. NGINX는 이제 F5의 일부가 되었습니다. 이전의 모든 NGINX.com 링크는 F5.com의 유사한 NGINX 콘텐츠로 리디렉션됩니다."