このトピックでは、Prometheus 用 TKG 拡張機能 v1.3.1 をデプロイする方法について説明します。Prometheus は、システムおよびサービス監視システムです。構成されたターゲットから指定間隔でメトリックを収集し、ルール式を評価し、結果を表示します。何らかの条件が満たされている場合は、アラートをトリガすることがあります。Alertmanager は Prometheus によって生成されたアラートを処理して、受信側のエンドポイントにルーティングします。Tanzu Kubernetes クラスタのメトリックを収集して表示するには、Prometheus 用 TKG 拡張機能をデプロイします。
拡張機能の前提条件
- クラスタをプロビジョニングします。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 | ノードのステータスとキャパシティ、レプリカセットのコンプライアンス、ポッド、ジョブ、cron ジョブのステータス、リソース要求、制限を監視します。 |
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
prometheus-data-values
シークレットがtanzu-system-monitoring
名前空間に作成されている。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 の構成マップをエクスポートし、バックアップとして保存します。
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 で指定された名前空間を作成するかどうかを示します | 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 |
ポッドの注釈 | 説明 |
---|---|
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