이 항목에서는 Prometheus용 TKG 확장 v1.3.1을 배포하는 방법을 설명합니다. Prometheus는 시스템 및 서비스 모니터링 시스템입니다. 구성된 대상에서 일정 간격으로 메트릭을 수집하고, 규칙 표현식을 평가하고, 결과를 표시하며, 일부 조건이 true로 확인되면 경고를 트리거할 수 있습니다. Alertmanager는 Prometheus에서 생성된 경고를 처리하고 수신 끝점으로 라우팅합니다. Prometheus용 TKG 확장을 배포하여 Tanzu Kubernetes 클러스터에 대한 메트릭을 수집하고 볼 수 있습니다.
확장 사전 요구 사항
- 클러스터를 프로비저닝합니다. TKGS v1alpha2 API를 사용하여 Tanzu Kubernetes 클러스터를 프로비저닝하는 워크플로의 내용을 참조하십시오.
참고: Prometheus 확장을 설치하려면 기본 serviceDomain(
cluster.local
)을 사용하는 클러스터를 배포해야 합니다. - 클러스터에 연결합니다. vCenter Single Sign-On 사용자로 Tanzu Kubernetes 클러스터에 연결의 내용을 참조하십시오.
- kubectl을 실행하는 클라이언트 호스트에 TKG 확장 v1.3.1 번들 다운로드합니다.
- 대상 Tanzu Kubernetes 클러스터에 TKG 확장 사전 요구 사항 설치합니다.
Prometheus 확장 배포
컨테이너 | 리소스 유형 | 복제 | 설명 |
---|---|---|---|
prometheus-alertmanager |
배포 | 1 | Prometheus 서버와 같은 클라이언트 애플리케이션에서 보낸 경고를 처리합니다. |
prometheus-cadvisor |
DaemonSet | 5 | 실행 중인 컨테이너의 리소스 사용량 및 성능 데이터를 분석하고 노출합니다. |
prometheus-kube-state-metrics |
배포 | 1 | 노드 상태 및 용량, 복제 세트 규정 준수, 포드, 작업 및 cronjob 상태, 리소스 요청 및 제한을 모니터링합니다. |
prometheus-node-exporter |
DaemonSet | 5 | 커널에 의해 노출되는 하드웨어 및 OS 메트릭용 내보내기입니다. |
prometheus-pushgateway |
배포 | 1 | 스크레이핑할 수 없는 작업에서 메트릭을 푸시할 수 있는 서비스입니다. |
prometheus-server |
배포 | 1 | 스크레이핑, 규칙 처리 및 경고를 비롯한 핵심 기능을 제공합니다. |
- 각각의 확장 사전 요구 사항을 완료했는지 확인합니다. 확장 사전 요구 사항의 내용을 참조하십시오.
- 디렉토리를 Prometheus 확장으로 변경합니다.
cd /tkg-extensions-v1.3.1+vmware.1/extensions/monitoring/prometheus
tanzu-system-monitoring
네임스페이스와 Prometheus 서비스 계정 및 역할 개체를 생성합니다.kubectl apply -f namespace-role.yaml
- Prometheus 데이터 값 파일을 생성합니다.
예제 데이터 값 파일은 최소 구성을 제공합니다.
cp prometheus-data-values.yaml.example prometheus-data-values.yaml
prometheus-data-values.yaml
을 업데이트하여 Prometheus 확장을 구성합니다. Prometheus 확장 구성에서 필드 및 옵션에 대한 설명을 참조하십시오.클러스터가 기본 영구 스토리지 클래스로 프로비저닝되지 않은 경우 데이터 값 파일에서 지정할 수 있습니다. 네임스페이스에 영구 볼륨 할당을 위한 충분한 스토리지가 있는지도 확인합니다.monitoring: prometheus_server: image: repository: projects.registry.vmware.com/tkg/prometheus pvc: storage_class: vwt-storage-policy storage: "8Gi" alertmanager: image: repository: projects.registry.vmware.com/tkg/prometheus pvc: storage_class: vwt-storage-policy storage: "8Gi" ...
prometheus-data-values
파일을 사용하여 Prometheus 암호를 생성합니다.kubectl create secret generic prometheus-data-values --from-file=values.yaml=prometheus-data-values.yaml -n tanzu-system-monitoring
tanzu-system-monitoring
네임스페이스에prometheus-data-values
암호가 생성됩니다.kubectl get secrets -n tanzu-system-monitoring
을 사용하여 확인합니다.- Prometheus 확장을 배포합니다.
kubectl apply -f prometheus-extension.yaml
성공하면 Prometheus 애플리케이션이 생성됩니다(
app.kappctrl.k14s.io/prometheus created
). - Prometheus 애플리케이션의 상태를 확인합니다.
kubectl get app prometheus -n tanzu-system-monitoring
상태가Reconciling
에서Reconcile succeeded
로 변경되어야 합니다. 상태가Reconcile failed
인 경우 문제 해결을 참조하십시오. - Prometheus 애플리케이션에 대한 자세한 정보를 봅니다.
kubectl get app prometheus -n tanzu-system-monitoring -o yaml
- Prometheus DaemonSets를 확인합니다.
kubectl get daemonsets -n tanzu-system-monitoring
- Prometheus 배포를 확인합니다.
kubectl get deployments -n tanzu-system-monitoring
Prometheus 배포 문제 해결
배포 또는 조정이 실패하면 kubectl get pods -A
를 실행하여 포드의 상태를 봅니다. 정상적인 조건에서는 포드가 Running
으로 표시되어야 합니다. 상태가 ImagePullBackOff
또는 ImageCrashLoopBackOff
이면 저장소에서 컨테이너 이미지를 끌어올 수 없습니다. 데이터 값 및 확장 YAML 파일에서 URL을 확인하고 정확한지 확인합니다.
name-XXXX
는
kubectl get pods -A
를 실행할 때 고유한 포드 이름입니다.
kubectl logs pod/prometheus-alertmanager-XXXXX -c prometheus-alertmanager -n tanzu-system-monitoring
kubectl logs pod/prometheus-server-XXXXX -c prometheus-server -n tanzu-system-monitoring
Prometheus 확장 업데이트
Tanzu Kubernetes 클러스터에 배포된 Prometheus 확장에 대한 구성을 업데이트합니다.
- 암호에서 Prometheus 데이터 값을 얻습니다.
kubectl get secret prometheus-data-values -n tanzu-system-monitoring -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > prometheus-data-values.yaml
- Prometheus 데이터 값 암호를 업데이트합니다.
kubectl create secret generic prometheus-data-values --from-file=values.yaml=prometheus-data-values.yaml -n tanzu-system-monitoring -o yaml --dry-run | kubectl replace -f-
Prometheus 확장이 업데이트된 데이터 값으로 조정됩니다.참고: 기본적으로 kapp-controller는 5분마다 애플리케이션을 동기화합니다. 업데이트는 5분 이내에 적용됩니다. 업데이트를 즉시 적용하려면prometheus-extension.yaml
의syncPeriod
를 더 작은 값으로 변경하고kubectl apply -f prometheus-extension.yaml
을 사용하여 Fluent Bit 확장을 적용합니다. - 확장의 상태를 확인합니다.
kubectl get app prometheus -n tanzu-system-monitoring
Prometheus가 업데이트되면 상태가
Reconcile Succeeded
로 변경됩니다. - 자세한 상태를 살펴보고 문제를 해결합니다.
kubectl get app prometheus -n tanzu-system-monitoring -o yaml
Prometheus 확장 삭제
- 디렉토리를 Prometheus 확장으로 변경합니다.
cd /extensions/monitoring/prometheus/
- Prometheus 애플리케이션을 삭제합니다.
kubectl delete app prometheus -n tanzu-system-monitoring
예상 결과:
app.kappctrl.k14s.io "prometheus" deleted
. - Prometheus 애플리케이션이 삭제되었는지 확인합니다.
kubectl get app prometheus -n tanzu-system-monitoring
예상 결과:
apps.kappctrl.k14s.io "prometheus" not found
. tanzu-system-monitoring
네임스페이스와 Prometheus 서비스 계정 및 역할 개체를 삭제합니다.경고: Grafana가 배포된 경우에는 이 단계를 수행하지 마십시오.kubectl delete -f namespace-role.yaml
- Prometheus를 다시 배포하려면 암호
prometheus-data-values
를 제거합니다.kubectl delete secret prometheus-data-values -n tanzu-system-monitoring
예상 결과:
secret "prometheus-data-values" deleted
.
Prometheus 확장 업그레이드
- Prometheus configmap을 내보내서 백업으로 저장합니다.
kubectl get configmap prometheus -n tanzu-system-monitoring -o 'go-template={{ index .data "prometheus.yaml" }}' > prometheus-configmap.yaml
- 기존 Prometheus 배포를 삭제합니다. Prometheus 확장 삭제의 내용을 참조하십시오.
- Prometheus 확장을 배포합니다. Prometheus 확장 배포의 내용을 참조하십시오.
Prometheus 확장 구성
/extensions/monitoring/prometheus/prometheus-data-values.yaml
에서 설정됩니다.
매개 변수 | 설명 | 유형 | 기본값 |
---|---|---|---|
monitoring.namespace | Prometheus가 배포될 네임스페이스 | 문자열 | tanzu-system-monitoring |
monitoring.create_namespace | 이 플래그는 monitoring.namespace를 통해 지정된 네임스페이스를 생성할지 여부를 나타냅니다. | 부울 | false |
monitoring.prometheus_server.config.prometheus_yaml | Prometheus에 전달할 Kubernetes 클러스터 모니터링 구성 세부 정보 | yaml 파일 | prometheus.yaml |
monitoring.prometheus_server.config.alerting_rules_yaml | Prometheus에 정의된 자세한 경고 규칙 | yaml 파일 | alerting_rules.yaml |
monitoring.prometheus_server.config.recording_rules_yaml | Prometheus에 정의된 자세한 기록 규칙 | yaml 파일 | recording_rules.yaml |
monitoring.prometheus_server.service.type | Prometheus를 노출할 서비스 유형. 지원되는 값: ClusterIP | 문자열 | ClusterIP |
monitoring.prometheus_server.enable_alerts.kubernetes_api | Prometheus의 Kubernetes API에 대해 SLO 경고 사용 | 부울 | true |
monitoring.prometheus_server.sc.aws_type | AWS의 storageclass에 대해 정의된 AWS 유형 | 문자열 | gp2 |
monitoring.prometheus_server.sc.aws_fsType | AWS의 storageclass에 대해 정의된 AWS 파일 시스템 유형 | 문자열 | ext4 |
monitoring.prometheus_server.sc.allowVolumeExpansion | AWS의 storageclass에 대해 볼륨 확장이 허용되는지 정의 | 부울 | true |
monitoring.prometheus_server.pvc.annotations | 스토리지 클래스 주석 | 맵 | {} |
monitoring.prometheus_server.pvc.storage_class | 영구 볼륨 할당에 사용할 스토리지 클래스. 기본값은 null이고 기본 프로비저너가 사용됩니다. | 문자열 | null |
monitoring.prometheus_server.pvc.accessMode | 영구 볼륨 할당에 대한 액세스 모드 정의. 지원되는 값: ReadWriteOnce, ReadOnlyMany, ReadWriteMany | 문자열 | ReadWriteOnce |
monitoring.prometheus_server.pvc.storage | 영구 볼륨 할당에 대한 스토리지 크기 정의 | 문자열 | 8Gi |
monitoring.prometheus_server.deployment.replicas | Prometheus 복제본 수 | 정수 | 1 |
monitoring.prometheus_server.image.repository | Prometheus 이미지가 있는 저장소의 위치입니다. 기본값은 공용 VMware 레지스트리입니다. 비공개 저장소(예: 에어갭 환경)를 사용하는 경우 이 값을 변경합니다. | 문자열 | projects.registry.vmware.com/tkg/prometheus |
monitoring.prometheus_server.image.name | Prometheus 이미지의 이름 | 문자열 | prometheus |
monitoring.prometheus_server.image.tag | Prometheus 이미지 태그. 버전을 업그레이드하는 경우 이 값을 업데이트해야 할 수 있습니다. | 문자열 | v2.17.1_vmware.1 |
monitoring.prometheus_server.image.pullPolicy | Prometheus 이미지 Pull 정책 | 문자열 | IfNotPresent |
monitoring.alertmanager.config.slack_demo | Alertmanager에 대한 Slack 알림 구성 | 문자열 | slack_demo: name: slack_demo slack_configs: - api_url: https://hooks.slack.com channel: '#alertmanager-test' |
monitoring.alertmanager.config.email_receiver | Alertmanager에 대한 이메일 알림 구성 | 문자열 | email_receiver: name: email-receiver email_configs: - to: [email protected] send_resolved: false from: [email protected] smarthost: smtp.eample.com:25 require_tls: false |
monitoring.alertmanager.service.type | Alertmanager를 노출할 서비스 유형. 지원되는 값: ClusterIP | 문자열 | ClusterIP |
monitoring.alertmanager.image.repository | Alertmanager 이미지가 있는 저장소의 위치입니다. 기본값은 공용 VMware 레지스트리입니다. 비공개 저장소(예: 에어갭 환경)를 사용하는 경우 이 값을 변경합니다. | 문자열 | projects.registry.vmware.com/tkg/prometheus |
monitoring.alertmanager.image.name | Alertmanager 이미지의 이름 | 문자열 | alertmanager |
monitoring.alertmanager.image.tag | Alertmanager 이미지 태그. 버전을 업그레이드하는 경우 이 값을 업데이트해야 할 수 있습니다. | 문자열 | v0.20.0_vmware.1 |
monitoring.alertmanager.image.pullPolicy | Alertmanager 이미지 Pull 정책 | 문자열 | IfNotPresent |
monitoring.alertmanager.pvc.annotations | 스토리지 클래스 주석 | 맵 | {} |
monitoring.alertmanager.pvc.storage_class | 영구 볼륨 할당에 사용할 스토리지 클래스. 기본값은 null이고 기본 프로비저너가 사용됩니다. | 문자열 | null |
monitoring.alertmanager.pvc.accessMode | 영구 볼륨 할당에 대한 액세스 모드 정의. 지원되는 값: ReadWriteOnce, ReadOnlyMany, ReadWriteMany | 문자열 | ReadWriteOnce |
monitoring.alertmanager.pvc.storage | 영구 볼륨 할당에 대한 스토리지 크기 정의 | 문자열 | 2Gi |
monitoring.alertmanager.deployment.replicas | Alertmanager 복제본 수 | 정수 | 1 |
monitoring.kube_state_metrics.image.repository | kube-state-metircs 이미지가 포함된 저장소. 기본값은 공용 VMware 레지스트리입니다. 비공개 저장소(예: 에어갭 환경)를 사용하는 경우 이 값을 변경합니다. | 문자열 | projects.registry.vmware.com/tkg/prometheus |
monitoring.kube_state_metrics.image.name | kube-state-metircs 이미지의 이름 | 문자열 | kube-state-metrics |
monitoring.kube_state_metrics.image.tag | kube-state-metircs 이미지 태그. 버전을 업그레이드하는 경우 이 값을 업데이트해야 할 수 있습니다. | 문자열 | v1.9.5_vmware.1 |
monitoring.kube_state_metrics.image.pullPolicy | kube-state-metircs 이미지 Pull 정책 | 문자열 | IfNotPresent |
monitoring.kube_state_metrics.deployment.replicas | kube-state-metrics 복제본 수 | 정수 | 1 |
monitoring.node_exporter.image.repository | node-exporter 이미지가 포함된 저장소. 기본값은 공용 VMware 레지스트리입니다. 비공개 저장소(예: 에어갭 환경)를 사용하는 경우 이 값을 변경합니다. | 문자열 | projects.registry.vmware.com/tkg/prometheus |
monitoring.node_exporter.image.name | node-exporter 이미지의 이름 | 문자열 | node-exporter |
monitoring.node_exporter.image.tag | node-exporter 이미지 태그. 버전을 업그레이드하는 경우 이 값을 업데이트해야 할 수 있습니다. | 문자열 | v0.18.1_vmware.1 |
monitoring.node_exporter.image.pullPolicy | node-exporter 이미지 Pull 정책 | 문자열 | IfNotPresent |
monitoring.node_exporter.hostNetwork | hostNetwork: true 로 설정된 경우 포드는 노드의 네트워크 네임스페이스 및 네트워크 리소스를 사용할 수 있습니다. |
부울 | false |
monitoring.node_exporter.deployment.replicas | node-exporter 복제본 수 | 정수 | 1 |
monitoring.pushgateway.image.repository | pushgateway 이미지가 포함된 저장소. 기본값은 공용 VMware 레지스트리입니다. 비공개 저장소(예: 에어갭 환경)를 사용하는 경우 이 값을 변경합니다. | 문자열 | projects.registry.vmware.com/tkg/prometheus |
monitoring.pushgateway.image.name | pushgateway 이미지의 이름 | 문자열 | pushgateway |
monitoring.pushgateway.image.tag | pushgateway 이미지 태그. 버전을 업그레이드하는 경우 이 값을 업데이트해야 할 수 있습니다. | 문자열 | v1.2.0_vmware.1 |
monitoring.pushgateway.image.pullPolicy | pushgateway 이미지 Pull 정책 | 문자열 | IfNotPresent |
monitoring.pushgateway.deployment.replicas | pushgateway 복제본 수 | 정수 | 1 |
monitoring.cadvisor.image.repository | cadvisor 이미지가 포함된 저장소. 기본값은 공용 VMware 레지스트리입니다. 비공개 저장소(예: 에어갭 환경)를 사용하는 경우 이 값을 변경합니다. | 문자열 | projects.registry.vmware.com/tkg/prometheus |
monitoring.cadvisor.image.name | cadvisor 이미지의 이름 | 문자열 | cadvisor |
monitoring.cadvisor.image.tag | cadvisor 이미지 태그. 버전을 업그레이드하는 경우 이 값을 업데이트해야 할 수 있습니다. | 문자열 | v0.36.0_vmware.1 |
monitoring.cadvisor.image.pullPolicy | cadvisor 이미지 풀 정책 | 문자열 | IfNotPresent |
monitoring.cadvisor.deployment.replicas | cadvisor 복제본 수 | 정수 | 1 |
monitoring.ingress.enabled | Prometheus 및 Alertmanager에 수신 사용/사용 안 함 | 부울 | false 수신을 사용하려면 이 필드를 |
monitoring.ingress.virtual_host_fqdn | Prometheus 및 Alertmanager에 액세스하기 위한 호스트 이름 | 문자열 | prometheus.system.tanzu |
monitoring.ingress.prometheus_prefix | Prometheus의 경로 접두사 | 문자열 | / |
monitoring.ingress.alertmanager_prefix | Alertmanager의 경로 접두사 | 문자열 | /alertmanager/ |
monitoring.ingress.tlsCertificate.tls.crt | 자체 TLS 인증서를 사용하려는 경우 수신을 위한 선택적 인증서. 자체 서명된 인증서가 기본적으로 생성됨 | 문자열 | 생성된 인증서 |
monitoring.ingress.tlsCertificate.tls.key | 자체 TLS 인증서를 사용하려는 경우, 수신을 위한 선택적 인증서 개인 키. | 문자열 | 생성된 인증서 키 |
매개 변수 | 설명 | 유형 | 기본값 |
---|---|---|---|
evaluation_interval | 규칙을 평가하는 빈도 | 지속 시간 | 1m |
scrape_interval | 대상을 스크레이핑하는 빈도 | 지속 시간 | 1m |
scrape_timeout | 스크레이핑 요청 시간이 초과될 때까지 걸리는 시간 | 지속 시간 | 10s |
rule_files | 규칙 파일은 glob 목록을 지정함. 일치하는 모든 파일에서 규칙 및 경고를 읽음 | yaml 파일 | |
scrape_configs | 스크레이핑 구성 목록. | 목록 | |
job_name | 스크레이핑된 메트릭에 기본적으로 할당되는 작업 이름 | 문자열 | |
kubernetes_sd_configs | Kubernetes 서비스 검색 구성 목록. | 목록 | |
relabel_configs | 대상 레이블 재지정 구성 목록. | 목록 | |
작업 | regex 매칭을 기반으로 수행할 작업. | 문자열 | |
regex | 추출된 값을 매칭할 정규식. | 문자열 | |
source_labels | 소스 레이블은 기존 레이블에서 값을 선택합니다. | 문자열 | |
scheme | 요청에 사용되는 프로토콜 체계를 구성합니다. | 문자열 | |
tls_config | 스크레이핑 요청의 TLS 설정을 구성합니다. | 문자열 | |
ca_file | API 서버 인증서의 유효성을 검사하는 데 사용할 CA 인증서. | filename | |
insecure_skip_verify | 서버 인증서의 유효성 검사를 사용하지 않도록 설정. | 부울 | |
bearer_token_file | 보유자 토큰 파일 인증 정보(선택 사항). | filename | |
replacement | 정규식이 일치하는 경우 정규식 대체를 수행할 대체 값. | 문자열 | |
target_label | 대체 작업에서 결과 값이 써지는 레이블. | 문자열 |
매개 변수 | 설명 | 유형 | 기본값 |
---|---|---|---|
resolve_timeout | ResolveTimeout은 경고에 EndsAt가 포함되지 않은 경우 Alertmanager에서 사용하는 기본값임 | 지속 시간 | 5m |
smtp_smarthost | 이메일 전송에 사용되는 SMTP 호스트. | 지속 시간 | 1m |
slack_api_url | Slack webhook URL. | 문자열 | global.slack_api_url |
pagerduty_url | API 요청을 보낼 pagerduty URL. | 문자열 | global.pagerduty_url |
템플릿 | 사용자 지정 알림 템플릿 정의를 읽을 파일 | 파일 경로 | |
group_by | 경고를 레이블로 그룹화 | 문자열 | |
group_interval | 그룹에 추가된 새 경고에 대한 알림을 보내기 전에 대기할 시간 설정 | 지속 시간 | 5m |
group_wait | 경고 그룹에 대한 알림을 보내기 위해 초기에 대기하는 시간 | 지속 시간 | 30s |
repeat_interval | 경고에 대한 알림이 이미 전송된 경우 알림을 다시 보내기 전에 대기할 시간 | 지속 시간 | 4h |
receivers | 알림 수신기 목록. | 목록 | |
severity | 인시던트의 심각도. | 문자열 | |
channel | 알림을 보낼 대상 채널 또는 사용자. | 문자열 | |
html | 이메일 알림의 HTML 본문. | 문자열 | |
text | 이메일 알림의 텍스트 본문. | 문자열 | |
send_resolved | 해결된 경고에 대해 알릴지 여부. | filename | |
email_configs | 이메일 통합 구성 | 부울 |
포드 주석 | 설명 |
---|---|
prometheus.io/scrape |
기본 구성은 모든 포드를 스크레이핑하며 false로 설정하면 이 주석이 스크레이핑 프로세스에서 포드를 제외합니다. |
prometheus.io/path |
메트릭 경로가 /metrics가 아니면 이 주석을 사용하여 정의합니다. |
prometheus.io/port |
포드의 선언된 포트 대신 지정한 포트에서 포드를 스크레이핑합니다(아무것도 선언되지 않은 경우 기본값은 포트 없는 대상임). |
apiVersion: apps/v1beta2 # for versions before 1.8.0 use extensions/v1beta1 kind: DaemonSet metadata: name: fluentd-elasticsearch namespace: weave labels: app: fluentd-logging spec: selector: matchLabels: name: fluentd-elasticsearch template: metadata: labels: name: fluentd-elasticsearch annotations: prometheus.io/scrape: 'true' prometheus.io/port: '9102' spec: containers: - name: fluentd-elasticsearch image: gcr.io/google-containers/fluentd-elasticsearch:1.20