CRD를 사용하여 컬렉션 사용자 지정(서비스 및 Pod 모니터)
Managed Prometheus를 사용하도록 설정하면 Pod 모니터 및 서비스 모니터에 대한 CRD(사용자 지정 리소스 정의)가 자동으로 배포됩니다. 이러한 사용자 지정 리소스 정의는 그룹 이름이 변경된 것을 제외하면 Prometheus용 OSS Pod 모니터 및 OSS 서비스 모니터와 동일한 CRD(사용자 지정 리소스 정의)입니다. 클러스터에 기존 Prometheus CRD와 사용자 지정 리소스가 있는 경우 이러한 CRD는 추가 기능에서 만들어진 CRD와 충돌하지 않습니다. 동시에, 관리되는 Prometheus 추가 기능은 OSS Prometheus를 위해 만들어진 CRD를 선택하지 않습니다. 스크래핑 작업을 격리하기 위해 의도적으로 분리한 것입니다.
Pod 또는 서비스 모니터 만들기
Pod 및 Service Monitor 템플릿을 사용하고 API 사양에 따라 사용자 지정 리소스(PodMonitor 및 Service Monitor)를 만듭니다. 참고 기존 OSS CR(사용자 지정 리소스)을 관리되는 Prometheus에서 선택하기 위해 필요한 유일한 변경 내용은 API 그룹인 azmonitoring.coreos.com/v1입니다.
참고 - 처리 중에 삭제되지 않도록 템플릿에 지정된 labelLimit, labelNameLengthLimit 및 labelValueLengthLimit를 사용해야 합니다.
사용자의 Pod와 서비스 모니터는 다음 예와 같아야 합니다.
Pod 모니터 예
# Note the API version is azmonitoring.coreos.com/v1 instead of monitoring.coreos.com/v1
apiVersion: azmonitoring.coreos.com/v1
kind: PodMonitor
# Can be deployed in any namespace
metadata:
name: reference-app
namespace: app-namespace
spec:
labelLimit: 63
labelNameLengthLimit: 511
labelValueLengthLimit: 1023
# The selector specifies which pods to filter for
selector:
# Filter by pod labels
matchLabels:
environment: test
matchExpressions:
- key: app
operator: In
values: [app-frontend, app-backend]
# [Optional] Filter by pod namespace
namespaceSelector:
matchNames: [app-frontend, app-backend]
# [Optional] Labels on the pod with these keys will be added as labels to each metric scraped
podTargetLabels: [app, region, environment]
# Multiple pod endpoints can be specified. Port requires a named port.
podMetricsEndpoints:
- port: metrics
서비스 모니터 예
# Note the API version is azmonitoring.coreos.com/v1 instead of monitoring.coreos.com/v1
apiVersion: azmonitoring.coreos.com/v1
kind: ServiceMonitor
# Can be deployed in any namespace
metadata:
name: reference-app
namespace: app-namespace
spec:
labelLimit: 63
labelNameLengthLimit: 511
labelValueLengthLimit: 1023
# The selector filters endpoints by service labels.
selector:
matchLabels:
app: reference-app
# Multiple endpoints can be specified. Port requires a named port.
endpoints:
- port: metrics
Pod 또는 서비스 모니터 배포
그런 다음 kubectl apply를 사용하여 Pod 또는 서비스 모니터를 배포할 수 있습니다.
적용하면 사용자 지정 리소스의 모든 오류가 표시되고 Pod 또는 서비스 모니터가 적용되지 않아야 합니다.
성공적인 Pod 모니터 만들기는 다음과 같습니다.
podmonitor.azmonitoring.coreos.com/my-pod-monitor created
예제
샘플 애플리케이션 만들기
Pod/서비스 모니터로 구성할 수 있는 Prometheus 메트릭을 노출하는 샘플 애플리케이션을 배포합니다.
kubectl apply -f https://github.com/Azure/prometheus-collector/blob/main/internal/referenceapp/prometheus-reference-app.yaml
메트릭을 스크래핑하기 위한 Pod 모니터 및/또는 서비스 모니터 만들기
이전 단계의 예 애플리케이션에서 메트릭을 스크래핑하도록 구성된 Pod 모니터를 배포합니다.
Pod 모니터
kubectl apply -f https://github.com/Azure/prometheus-collector/blob/main/otelcollector/deploy/example-custom-resources/pod-monitor/pod-monitor-reference-app.yaml
서비스 모니터
kubectl apply -f https://github.com/Azure/prometheus-collector/blob/main/otelcollector/deploy/example-custom-resources/service-monitor/service-monitor-reference-app.yaml
문제 해결
Pod 또는 서비스 모니터가 성공적으로 적용되면 추가 기능이 자동으로 대상에서 메트릭 수집을 시작합니다. 이를 확인하려면 사용자 지정 리소스의 일반적인 문제 해결을 위한 여기의 지침을 따르고 대상이 127.0.0.1/targets에 표시되는지 확인합니다.