이 항목에서는 Prometheus 패키지에 대한 참조 정보를 제공합니다.
Prometheus 및 Altertmanager 정보
Prometheus(https://prometheus.io/)는 시스템 및 서비스 모니터링 시스템입니다. Prometheus는 일정 간격으로 구성된 대상에서 메트릭을 수집하고, 규칙 표현식을 평가하고, 결과를 표시합니다. Alertmanager는 일부 조건이 true로 확인되었을 때 경고를 트리거하는 데 사용됩니다.
Prometheus 패키지를 설치하려면 다음을 수행합니다.
Prometheus 구성 요소
Prometheus 패키지는 표에 나열된 컨테이너를 TKG 클러스터에 설치합니다. 패키지는 패키지 저장소에 지정된 VMware 공용 레지스트리에서 컨테이너를 가져옵니다.
컨테이너 | 리소스 유형 | 복제 | 설명 |
---|---|---|---|
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 데이터 값
다음은 예시 prometheus-data-values.yaml
파일입니다.
다음에 유의하십시오.
- 수신이 가능하도록 설정됨(ingress: enabled: true).
- /alertmanager/(alertmanager_prefix:) 및 /(prometheus_prefix:)로 끝나는 URL에 대해 수신이 구성됨.
- Prometheus의 FQDN은
prometheus.system.tanzu
임(virtual_host_fqdn:). - 수신 섹션(tls.crt, tls.key, ca.crt)에서 사용자 지정 인증서를 제공합니다.
- alertmanager에 대한 pvc는 2GiB입니다. 기본 스토리지 정책에 대한
storageClassName
을 제공합니다. - prometheus에 대한 pvc는 20GiB입니다. vSphere 스토리지 정책에 대한
storageClassName
을 제공합니다.
namespace: prometheus-monitoring alertmanager: config: alertmanager_yml: | global: {} receivers: - name: default-receiver templates: - '/etc/alertmanager/templates/*.tmpl' route: group_interval: 5m group_wait: 10s receiver: default-receiver repeat_interval: 3h deployment: replicas: 1 rollingUpdate: maxSurge: 25% maxUnavailable: 25% updateStrategy: Recreate pvc: accessMode: ReadWriteOnce storage: 2Gi storageClassName: default service: port: 80 targetPort: 9093 type: ClusterIP ingress: alertmanager_prefix: /alertmanager/ alertmanagerServicePort: 80 enabled: true prometheus_prefix: / prometheusServicePort: 80 tlsCertificate: ca.crt: | -----BEGIN CERTIFICATE----- MIIFczCCA1ugAwIBAgIQTYJITQ3SZ4BBS9UzXfJIuTANBgkqhkiG9w0BAQsFADBM ... w0oGuTTBfxSMKs767N3G1q5tz0mwFpIqIQtXUSmaJ+9p7IkpWcThLnyYYo1IpWm/ ZHtjzZMQVA== -----END CERTIFICATE----- tls.crt: | -----BEGIN CERTIFICATE----- MIIHxTCCBa2gAwIBAgITIgAAAAQnSpH7QfxTKAAAAAAABDANBgkqhkiG9w0BAQsF ... YYsIjp7/f+Pk1DjzWx8JIAbzItKLucDreAmmDXqk+DrBP9LYqtmjB0n7nSErgK8G sA3kGCJdOkI0kgF10gsinaouG2jVlwNOsw== -----END CERTIFICATE----- tls.key: | -----BEGIN PRIVATE KEY----- MIIJRAIBADANBgkqhkiG9w0BAQEFAASCCS4wggkqAgEAAoICAQDOGHT8I12KyQGS ... l1NzswracGQIzo03zk/X3Z6P2YOea4BkZ0Iwh34wOHJnTkfEeSx6y+oSFMcFRthT yfFCZUk/sVCc/C1a4VigczXftUGiRrTR -----END PRIVATE KEY----- virtual_host_fqdn: prometheus.system.tanzu kube_state_metrics: deployment: replicas: 1 service: port: 80 targetPort: 8080 telemetryPort: 81 telemetryTargetPort: 8081 type: ClusterIP node_exporter: daemonset: hostNetwork: false updatestrategy: RollingUpdate service: port: 9100 targetPort: 9100 type: ClusterIP prometheus: pspNames: "vmware-system-restricted" config: alerting_rules_yml: | {} alerts_yml: | {} prometheus_yml: | global: evaluation_interval: 1m scrape_interval: 1m scrape_timeout: 10s rule_files: - /etc/config/alerting_rules.yml - /etc/config/recording_rules.yml - /etc/config/alerts - /etc/config/rules scrape_configs: - job_name: 'prometheus' scrape_interval: 5s static_configs: - targets: ['localhost:9090'] - job_name: 'kube-state-metrics' static_configs: - targets: ['prometheus-kube-state-metrics.prometheus.svc.cluster.local:8080'] - job_name: 'node-exporter' static_configs: - targets: ['prometheus-node-exporter.prometheus.svc.cluster.local:9100'] - job_name: 'kubernetes-pods' kubernetes_sd_configs: - role: pod relabel_configs: - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape] action: keep regex: true - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path] action: replace target_label: __metrics_path__ regex: (.+) - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port] action: replace regex: ([^:]+)(?::\d+)?;(\d+) replacement: $1:$2 target_label: __address__ - action: labelmap regex: __meta_kubernetes_pod_label_(.+) - source_labels: [__meta_kubernetes_namespace] action: replace target_label: kubernetes_namespace - source_labels: [__meta_kubernetes_pod_name] action: replace target_label: kubernetes_pod_name - job_name: kubernetes-nodes-cadvisor kubernetes_sd_configs: - role: node relabel_configs: - action: labelmap regex: __meta_kubernetes_node_label_(.+) - replacement: kubernetes.default.svc:443 target_label: __address__ - regex: (.+) replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor source_labels: - __meta_kubernetes_node_name target_label: __metrics_path__ scheme: https tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt insecure_skip_verify: true bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token - job_name: kubernetes-apiservers kubernetes_sd_configs: - role: endpoints relabel_configs: - action: keep regex: default;kubernetes;https source_labels: - __meta_kubernetes_namespace - __meta_kubernetes_service_name - __meta_kubernetes_endpoint_port_name scheme: https tls_config: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt insecure_skip_verify: true bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token alerting: alertmanagers: - scheme: http static_configs: - targets: - alertmanager.prometheus.svc:80 - kubernetes_sd_configs: - role: pod relabel_configs: - source_labels: [__meta_kubernetes_namespace] regex: default action: keep - source_labels: [__meta_kubernetes_pod_label_app] regex: prometheus action: keep - source_labels: [__meta_kubernetes_pod_label_component] regex: alertmanager action: keep - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_probe] regex: .* action: keep - source_labels: [__meta_kubernetes_pod_container_port_number] regex: action: drop recording_rules_yml: | groups: - name: kube-apiserver.rules interval: 3m rules: - expr: |2 ( ( sum(rate(apiserver_request_duration_seconds_count{job="kubernetes-apiservers",verb=~"LIST|GET"}[1d])) - ( ( sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope=~"resource|",le="0.1"}[1d])) or vector(0) ) + sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="namespace",le="0.5"}[1d])) + sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="cluster",le="5"}[1d])) ) ) + # errors sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"LIST|GET",code=~"5.."}[1d])) ) / sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"LIST|GET"}[1d])) labels: verb: read record: apiserver_request:burnrate1d - expr: |2 ( ( # too slow sum(rate(apiserver_request_duration_seconds_count{job="kubernetes-apiservers",verb=~"LIST|GET"}[1h])) - ( ( sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope=~"resource|",le="0.1"}[1h])) or vector(0) ) + sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="namespace",le="0.5"}[1h])) + sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="cluster",le="5"}[1h])) ) ) + # errors sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"LIST|GET",code=~"5.."}[1h])) ) / sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"LIST|GET"}[1h])) labels: verb: read record: apiserver_request:burnrate1h - expr: |2 ( ( # too slow sum(rate(apiserver_request_duration_seconds_count{job="kubernetes-apiservers",verb=~"LIST|GET"}[2h])) - ( ( sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope=~"resource|",le="0.1"}[2h])) or vector(0) ) + sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="namespace",le="0.5"}[2h])) + sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="cluster",le="5"}[2h])) ) ) + # errors sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"LIST|GET",code=~"5.."}[2h])) ) / sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"LIST|GET"}[2h])) labels: verb: read record: apiserver_request:burnrate2h - expr: |2 ( ( # too slow sum(rate(apiserver_request_duration_seconds_count{job="kubernetes-apiservers",verb=~"LIST|GET"}[30m])) - ( ( sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope=~"resource|",le="0.1"}[30m])) or vector(0) ) + sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="namespace",le="0.5"}[30m])) + sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="cluster",le="5"}[30m])) ) ) + # errors sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"LIST|GET",code=~"5.."}[30m])) ) / sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"LIST|GET"}[30m])) labels: verb: read record: apiserver_request:burnrate30m - expr: |2 ( ( # too slow sum(rate(apiserver_request_duration_seconds_count{job="kubernetes-apiservers",verb=~"LIST|GET"}[3d])) - ( ( sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope=~"resource|",le="0.1"}[3d])) or vector(0) ) + sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="namespace",le="0.5"}[3d])) + sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="cluster",le="5"}[3d])) ) ) + # errors sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"LIST|GET",code=~"5.."}[3d])) ) / sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"LIST|GET"}[3d])) labels: verb: read record: apiserver_request:burnrate3d - expr: |2 ( ( # too slow sum(rate(apiserver_request_duration_seconds_count{job="kubernetes-apiservers",verb=~"LIST|GET"}[5m])) - ( ( sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope=~"resource|",le="0.1"}[5m])) or vector(0) ) + sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="namespace",le="0.5"}[5m])) + sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="cluster",le="5"}[5m])) ) ) + # errors sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"LIST|GET",code=~"5.."}[5m])) ) / sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"LIST|GET"}[5m])) labels: verb: read record: apiserver_request:burnrate5m - expr: |2 ( ( # too slow sum(rate(apiserver_request_duration_seconds_count{job="kubernetes-apiservers",verb=~"LIST|GET"}[6h])) - ( ( sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope=~"resource|",le="0.1"}[6h])) or vector(0) ) + sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="namespace",le="0.5"}[6h])) + sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="cluster",le="5"}[6h])) ) ) + # errors sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"LIST|GET",code=~"5.."}[6h])) ) / sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"LIST|GET"}[6h])) labels: verb: read record: apiserver_request:burnrate6h - expr: |2 ( ( # too slow sum(rate(apiserver_request_duration_seconds_count{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[1d])) - sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE",le="1"}[1d])) ) + sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE",code=~"5.."}[1d])) ) / sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[1d])) labels: verb: write record: apiserver_request:burnrate1d - expr: |2 ( ( # too slow sum(rate(apiserver_request_duration_seconds_count{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[1h])) - sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE",le="1"}[1h])) ) + sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE",code=~"5.."}[1h])) ) / sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[1h])) labels: verb: write record: apiserver_request:burnrate1h - expr: |2 ( ( # too slow sum(rate(apiserver_request_duration_seconds_count{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[2h])) - sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE",le="1"}[2h])) ) + sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE",code=~"5.."}[2h])) ) / sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[2h])) labels: verb: write record: apiserver_request:burnrate2h - expr: |2 ( ( # too slow sum(rate(apiserver_request_duration_seconds_count{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[30m])) - sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE",le="1"}[30m])) ) + sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE",code=~"5.."}[30m])) ) / sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[30m])) labels: verb: write record: apiserver_request:burnrate30m - expr: |2 ( ( # too slow sum(rate(apiserver_request_duration_seconds_count{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[3d])) - sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE",le="1"}[3d])) ) + sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE",code=~"5.."}[3d])) ) / sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[3d])) labels: verb: write record: apiserver_request:burnrate3d - expr: |2 ( ( # too slow sum(rate(apiserver_request_duration_seconds_count{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[5m])) - sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE",le="1"}[5m])) ) + sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE",code=~"5.."}[5m])) ) / sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[5m])) labels: verb: write record: apiserver_request:burnrate5m - expr: |2 ( ( # too slow sum(rate(apiserver_request_duration_seconds_count{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[6h])) - sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE",le="1"}[6h])) ) + sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE",code=~"5.."}[6h])) ) / sum(rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[6h])) labels: verb: write record: apiserver_request:burnrate6h - expr: | sum by (code,resource) (rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"LIST|GET"}[5m])) labels: verb: read record: code_resource:apiserver_request_total:rate5m - expr: | sum by (code,resource) (rate(apiserver_request_total{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[5m])) labels: verb: write record: code_resource:apiserver_request_total:rate5m - expr: | histogram_quantile(0.99, sum by (le, resource) (rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET"}[5m]))) > 0 labels: quantile: "0.99" verb: read record: cluster_quantile:apiserver_request_duration_seconds:histogram_quantile - expr: | histogram_quantile(0.99, sum by (le, resource) (rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"POST|PUT|PATCH|DELETE"}[5m]))) > 0 labels: quantile: "0.99" verb: write record: cluster_quantile:apiserver_request_duration_seconds:histogram_quantile - expr: |2 sum(rate(apiserver_request_duration_seconds_sum{subresource!="log",verb!~"LIST|WATCH|WATCHLIST|DELETECOLLECTION|PROXY|CONNECT"}[5m])) without(instance, pod) / sum(rate(apiserver_request_duration_seconds_count{subresource!="log",verb!~"LIST|WATCH|WATCHLIST|DELETECOLLECTION|PROXY|CONNECT"}[5m])) without(instance, pod) record: cluster:apiserver_request_duration_seconds:mean5m - expr: | histogram_quantile(0.99, sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",subresource!="log",verb!~"LIST|WATCH|WATCHLIST|DELETECOLLECTION|PROXY|CONNECT"}[5m])) without(instance, pod)) labels: quantile: "0.99" record: cluster_quantile:apiserver_request_duration_seconds:histogram_quantile - expr: | histogram_quantile(0.9, sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",subresource!="log",verb!~"LIST|WATCH|WATCHLIST|DELETECOLLECTION|PROXY|CONNECT"}[5m])) without(instance, pod)) labels: quantile: "0.9" record: cluster_quantile:apiserver_request_duration_seconds:histogram_quantile - expr: | histogram_quantile(0.5, sum(rate(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",subresource!="log",verb!~"LIST|WATCH|WATCHLIST|DELETECOLLECTION|PROXY|CONNECT"}[5m])) without(instance, pod)) labels: quantile: "0.5" record: cluster_quantile:apiserver_request_duration_seconds:histogram_quantile - interval: 3m name: kube-apiserver-availability.rules rules: - expr: |2 1 - ( ( # write too slow sum(increase(apiserver_request_duration_seconds_count{verb=~"POST|PUT|PATCH|DELETE"}[30d])) - sum(increase(apiserver_request_duration_seconds_bucket{verb=~"POST|PUT|PATCH|DELETE",le="1"}[30d])) ) + ( # read too slow sum(increase(apiserver_request_duration_seconds_count{verb=~"LIST|GET"}[30d])) - ( ( sum(increase(apiserver_request_duration_seconds_bucket{verb=~"LIST|GET",scope=~"resource|",le="0.1"}[30d])) or vector(0) ) + sum(increase(apiserver_request_duration_seconds_bucket{verb=~"LIST|GET",scope="namespace",le="0.5"}[30d])) + sum(increase(apiserver_request_duration_seconds_bucket{verb=~"LIST|GET",scope="cluster",le="5"}[30d])) ) ) + # errors sum(code:apiserver_request_total:increase30d{code=~"5.."} or vector(0)) ) / sum(code:apiserver_request_total:increase30d) labels: verb: all record: apiserver_request:availability30d - expr: |2 1 - ( sum(increase(apiserver_request_duration_seconds_count{job="kubernetes-apiservers",verb=~"LIST|GET"}[30d])) - ( # too slow ( sum(increase(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope=~"resource|",le="0.1"}[30d])) or vector(0) ) + sum(increase(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="namespace",le="0.5"}[30d])) + sum(increase(apiserver_request_duration_seconds_bucket{job="kubernetes-apiservers",verb=~"LIST|GET",scope="cluster",le="5"}[30d])) ) + # errors sum(code:apiserver_request_total:increase30d{verb="read",code=~"5.."} or vector(0)) ) / sum(code:apiserver_request_total:increase30d{verb="read"}) labels: verb: read record: apiserver_request:availability30d - expr: |2 1 - ( ( # too slow sum(increase(apiserver_request_duration_seconds_count{verb=~"POST|PUT|PATCH|DELETE"}[30d])) - sum(increase(apiserver_request_duration_seconds_bucket{verb=~"POST|PUT|PATCH|DELETE",le="1"}[30d])) ) + # errors sum(code:apiserver_request_total:increase30d{verb="write",code=~"5.."} or vector(0)) ) / sum(code:apiserver_request_total:increase30d{verb="write"}) labels: verb: write record: apiserver_request:availability30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="LIST",code=~"2.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="GET",code=~"2.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="POST",code=~"2.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="PUT",code=~"2.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="PATCH",code=~"2.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="DELETE",code=~"2.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="LIST",code=~"3.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="GET",code=~"3.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="POST",code=~"3.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="PUT",code=~"3.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="PATCH",code=~"3.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="DELETE",code=~"3.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="LIST",code=~"4.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="GET",code=~"4.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="POST",code=~"4.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="PUT",code=~"4.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="PATCH",code=~"4.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="DELETE",code=~"4.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="LIST",code=~"5.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="GET",code=~"5.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="POST",code=~"5.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="PUT",code=~"5.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="PATCH",code=~"5.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code, verb) (increase(apiserver_request_total{job="kubernetes-apiservers",verb="DELETE",code=~"5.."}[30d])) record: code_verb:apiserver_request_total:increase30d - expr: | sum by (code) (code_verb:apiserver_request_total:increase30d{verb=~"LIST|GET"}) labels: verb: read record: code:apiserver_request_total:increase30d - expr: | sum by (code) (code_verb:apiserver_request_total:increase30d{verb=~"POST|PUT|PATCH|DELETE"}) labels: verb: write record: code:apiserver_request_total:increase30d rules_yml: | {} deployment: configmapReload: containers: args: - --volume-dir=/etc/config - --webhook-url=http://127.0.0.1:9090/-/reload containers: args: - --storage.tsdb.retention.time=42d - --config.file=/etc/config/prometheus.yml - --storage.tsdb.path=/data - --web.console.libraries=/etc/prometheus/console_libraries - --web.console.templates=/etc/prometheus/consoles - --web.enable-lifecycle replicas: 1 rollingUpdate: maxSurge: 25% maxUnavailable: 25% updateStrategy: Recreate pvc: accessMode: ReadWriteOnce storage: 20Gi storageClassName: default service: port: 80 targetPort: 9090 type: ClusterIP pushgateway: deployment: replicas: 1 service: port: 9091 targetPort: 9091 type: ClusterIP
Prometheus 구성
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 | 이메일 통합 구성 | 부울 |
포드에 대한 주석을 사용하면 스크레이핑 프로세스를 세밀하게 제어할 수 있습니다. 이러한 주석은 포드 메타데이터의 일부여야 합니다. Services 또는 DaemonSets와 같은 다른 개체에 설정하면 효과가 없습니다.
포드 주석 | 설명 |
---|---|
prometheus.io/scrape |
기본 구성은 모든 포드를 스크레이핑하며 false로 설정하면 이 주석이 스크레이핑 프로세스에서 포드를 제외합니다. |
prometheus.io/path |
메트릭 경로가 /metrics가 아니면 이 주석을 사용하여 정의합니다. |
prometheus.io/port |
포드의 선언된 포트 대신 지정한 포트에서 포드를 스크레이핑합니다(아무것도 선언되지 않은 경우 기본값은 포트 없는 대상임). |
아래의 DaemonSet 매니페스트는 Prometheus가 포트 9102에서 모든 포드를 스크레이핑하도록 지시합니다.
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