このトピックでは、Prometheus パッケージのリファレンス情報を示します。
Prometheus および Alertmanager について
Prometheus (https://prometheus.io/) は、システムおよびサービス監視システムです。Prometheus では、構成されたターゲットから指定間隔でメトリックを収集し、ルール式を評価し、結果を表示します。Alertmanager は、何らかの条件が満たされた場合にアラートをトリガするために使用されます。
Prometheus パッケージをインストールするには、次の点に注意してください。
Prometheus のコンポーネント
Prometheus パッケージは、表に一覧表示されているコンテナを TKG クラスタにインストールします。このパッケージは、パッケージ リポジトリで指定されている VMware パブリック レジストリからコンテナをプルします。
コンテナ | リソースの種類 | レプリカ | 説明 |
---|---|---|---|
prometheus-alertmanager |
デプロイ | 1 | Prometheus サーバなどのクライアント アプリケーションによって送信されたアラートを処理します。 |
prometheus-cadvisor |
DaemonSet | 5 | 実行中のコンテナのリソース使用量とパフォーマンス データを分析して公開します。 |
prometheus-kube-state-metrics |
デプロイ | 1 | ノードのステータスとキャパシティ、レプリカセットのコンプライアンス、ポッド、ジョブ、cron ジョブのステータス、リソース要求、制限を監視します。 |
prometheus-node-exporter |
DaemonSet | 5 | カーネルによって公開されるハードウェアおよび OS メトリックのエクスポータ。 |
prometheus-pushgateway |
デプロイ | 1 | スクレイピングできないジョブからメトリックをプッシュできるサービス。 |
prometheus-server |
デプロイ | 1 | スクレイピング、ルール処理、アラートなどの中核的な機能を提供します。 |
Prometheus のデータ値
prometheus-data-values.yaml
ファイルの例を次に示します。
次の点に注意してください。
- Ingress は有効です (ingress: enabled: true)。
- Ingress は末尾が /alertmanager/ (alertmanagerprefix:) および / (prometheus_prefix:) の URL に対して構成されます。
- Prometheus の FQDN は
prometheus.system.tanzu
です (virtual_host_fqdn:)。 - Ingress セクションには、独自のカスタム証明書を指定します (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 で指定された名前空間を作成するかどうかを示します | boolean | 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 アラートを有効にする | boolean | 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 に許可されているかどうかを定義します | boolean | 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 イメージ プル ポリシー | 文字列 | IfNotPresent |
monitoring.alertmanager.config.slack_demo | Alertmanager のスラック通知構成 | 文字列 | slack_demo: name: slack_demo slack_configs: - api_url: https://hooks.slack.com channel: '#alertmanager-test' |
monitoring.alertmanager.config.email_receiver | Alertmanager の E メール通知構成 | 文字列 | 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 イメージ プル ポリシー | 文字列 | 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 イメージ プル ポリシー | 文字列 | 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 イメージ プル ポリシー | 文字列 | IfNotPresent |
monitoring.node_exporter.hostNetwork | ポッドが hostNetwork: true に設定されている場合は、そのポッドで、ネットワークの名前空間とノードのネットワーク リソースを使用できます。 |
boolean | 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 イメージ プル ポリシー | 文字列 | 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 に対し ingress を有効または無効にします | boolean | false ingress を使用するには、このフィールドを |
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 証明書を使用する場合は、Ingress のオプション証明書。自己署名証明書はデフォルトで生成されます | 文字列 | Generated cert |
monitoring.ingress.tlsCertificate.tls.key | 独自の TLS 証明書を使用する場合は、Ingress のオプション証明書プライベート キー。 | 文字列 | Generated cert key |
パラメータ | 説明 | タイプ | デフォルト |
---|---|---|---|
evaluation_interval | ルールを評価する頻度 | duration | 1m |
scrape_interval | ターゲットを取得する頻度 | duration | 1m |
scrape_timeout | 取得要求がタイムアウトになるまでの期間 | duration | 10s |
rule_files | ルール ファイルは glob のリストを指定します。ルールとアラートは、一致するすべてのファイルから読み取られます | yaml ファイル | |
scrape_configs | 取得構成のリスト。 | リスト | |
job_name | デフォルトで取得されたメトリックに割り当てられたジョブ名 | 文字列 | |
kubernetes_sd_configs | Kubernetes サービス検出構成のリスト。 | リスト | |
relabel_configs | ターゲット再ラベル付け構成のリスト。 | リスト | |
action | 正規表現の一致に基づいて実行するアクション。 | 文字列 | |
regex | 抽出された値が一致する正規表現。 | 文字列 | |
source_labels | ソース ラベルは、既存のラベルから値を選択します。 | 文字列 | |
scheme | 要求に使用されるプロトコル スキームを構成します。 | 文字列 | |
tls_config | 取得要求の TLS 設定を構成します。 | 文字列 | |
ca_file | API サーバ証明書を検証する CA 証明書。 | ファイル名 | |
insecure_skip_verify | サーバ証明書の検証を無効にします。 | boolean | |
bearer_token_file | オプションのベアラー トークン ファイル認証情報。 | ファイル名 | |
replacement | 正規表現が一致する場合に正規表現の置き換えが実行される置き換え値。 | 文字列 | |
target_label | 結果値が置換アクションで書き込まれるラベル。 | 文字列 |
パラメータ | 説明 | タイプ | デフォルト |
---|---|---|---|
resolve_timeout | ResolveTimeout は、アラートに EndsAt が含まれていない場合に alertmanager によって使用されるデフォルト値です | duration | 5m |
smtp_smarthost | E メールが送信される SMTP ホスト。 | duration | 1m |
slack_api_url | スラック Webhook URL。 | 文字列 | global.slack_api_url |
pagerduty_url | API 要求の送信先の pagerduty URL。 | 文字列 | global.pagerduty_url |
テンプレート | カスタム通知テンプレート定義を読み取るためのファイル | ファイルのパス | |
group_by | アラートをラベルでグループ化します | 文字列 | |
group_interval | グループに追加された新しいアラートに関する通知を送信するまでの待機時間を設定 | duration | 5m |
group_wait | アラートのグループに関する通知を最初に送信するまでの待機時間 | duration | 30s |
repeat_interval | 通知がアラートに対してすでに正常に送信されている場合に再送信するまでの待機時間 | duration | 4h |
receivers | 通知受信者のリスト。 | リスト | |
severity | インシデントの重要度。 | 文字列 | |
channel | 通知の送信先となるチャネルまたはユーザー。 | 文字列 | |
html | E メール通知の HTML 本文。 | 文字列 | |
text | E メール通知のテキスト本文。 | 文字列 | |
send_resolved | 解決済みアラートについて通知するかどうか。 | ファイル名 | |
email_configs | E メール統合の構成 | boolean |
ポッドの注釈により、取得プロセスの適切な管理が可能になります。これらの注釈は、ポッド メタデータの一部である必要があります。Services、DaemonSets などのその他のオブジェクトで設定されている場合は無効になります。
ポッドの注釈 | 説明 |
---|---|
prometheus.io/scrape |
デフォルトの構成ではすべてのポッドが取得されます。false に設定した場合、この注釈はポッドを取得プロセスから除外します。 |
prometheus.io/path |
メトリック パスが /metrics ではない場合、この注釈を使用して定義します。 |
prometheus.io/port |
ポッドをポッドの宣言されたポートではなく、指示されたポートで取得します(宣言がない場合、デフォルトはポートなしターゲットです)。 |
以下の DaemonSet マニフェストは、ポート 9102 ですべてのポッドを取得するように Prometheus に指示します。
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