このページでは、Config Sync から Prometheus に指標を送信する方法について説明します。
このページでは、Prometheus を使用して Config Sync の指標を表示する方法について説明します。指標をエクスポートするには、Prometheus(このページ)または Cloud Monitoring のいずれかを使用することをおすすめします。カスタム指標を使用することもできます。
Config Sync は指標を自動的に収集して Prometheus にエクスポートします。Cloud Monitoring を構成して、Prometheus からカスタム指標を pull することもできます。これにより、Prometheus と Monitoring の両方でカスタム指標を見ることができます。詳細については、GKE ドキュメントの Prometheus の使用をご覧ください。
指標をスクレイピングする
すべての Prometheus 指標はポート 8675 でスクレイピングできます。指標を取得するには、次のどちらかの方法を使用してクラスタで Prometheus を構成する必要があります。次のいずれかを実行します。
- Prometheus のドキュメントに沿って操作し、クラスタで指標の取得を構成します。または 
- Prometheus Operator と以下のマニフェストを使用します。この方法を使用すると、Config Sync のすべての指標が 10 秒ごとに取得されます。 - マニフェスト ファイルを保持するための一時ディレクトリを作成します。 - mkdir config-sync-monitor cd config-sync-monitor 
- curlコマンドを使用して、CoreOS リポジトリから Promtheus Operator マニフェストをダウンロードします。- curl -o bundle.yaml https://raw.githubusercontent.com/coreos/prometheus-operator/master/bundle.yaml - このマニフェストは - default名前空間を使用するように構成されていますが、これはおすすめしません。次のステップで、- monitoringという名前空間を使用するように構成を変更します。別の名前空間を使用する場合は、残りのステップの- monitoringの部分をその名前空間で置き換えてください。
- 上記のバンドルに記述された ClusterRoleBinding の名前空間を更新するためのファイルを作成します。 - # patch-crb.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: prometheus-operator subjects: - kind: ServiceAccount name: prometheus-operator namespace: monitoring # we are patching from default namespace
- このパッチを適用してマニフェスト内の他のリソースの名前空間を変更する - kustomization.yamlファイルを作成します。- # kustomization.yaml resources: - bundle.yaml namespace: monitoring patchesStrategicMerge: - patch-crb.yaml
- monitoring名前空間が存在しない場合は、作成します。名前空間に別の名前を使用できますが、その場合は、前のステップの YAML マニフェストで- namespaceの値も変更します。- kubectl create namespace monitoring 
- 次のコマンドを使用して Kustomize マニフェストを適用します。 - kubectl apply -k . until kubectl get customresourcedefinitions servicemonitors.monitoring.coreos.com ; \ do date; sleep 1; echo ""; done - クラスタで CRD が使用可能になるまで 2 番目のコマンドはブロックされます。 
- Config Sync から指標を収集する Prometheus サーバーの構成に必要なリソースのマニフェストを作成します。 - # config-sync-monitoring.yaml apiVersion: v1 kind: ServiceAccount metadata: name: prometheus-config-sync namespace: monitoring --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: prometheus-config-sync rules: - apiGroups: [""] resources: - nodes - services - endpoints - pods verbs: ["get", "list", "watch"] - apiGroups: [""] resources: - configmaps verbs: ["get"] - nonResourceURLs: ["/metrics"] verbs: ["get"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: prometheus-config-sync roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: prometheus-config-sync subjects: - kind: ServiceAccount name: prometheus-config-sync namespace: monitoring --- apiVersion: monitoring.coreos.com/v1 kind: Prometheus metadata: name: config-sync namespace: monitoring labels: prometheus: config-sync spec: replicas: 2 serviceAccountName: prometheus-config-sync serviceMonitorSelector: matchLabels: prometheus: config-management alerting: alertmanagers: - namespace: default name: alertmanager port: web resources: requests: memory: 400Mi --- apiVersion: v1 kind: Service metadata: name: prometheus-config-sync namespace: monitoring labels: prometheus: config-sync spec: type: NodePort ports: - name: web nodePort: 31900 port: 9190 protocol: TCP targetPort: web selector: prometheus: config-sync --- ---
- 次のコマンドを使用してマニフェストを適用します。 - kubectl apply -f config-sync.yaml until kubectl rollout status statefulset/prometheus-config-sync -n monitoring; \ do sleep 1; done - Pod が実行されるまで 2 番目のコマンドはブロックされます。 
- Prometheus サーバーのウェブポートをローカルマシンに転送することでインストールを確認できます。 - kubectl -n monitoring port-forward svc/prometheus-config-sync 9190 - http://localhost:9190で Prometheus のウェブ UI にアクセスできます。
- 一時ディレクトリを削除します。 - cd .. rm -rf config-sync-monitor 
 
利用可能な Prometheus 指標
Config Sync は以下の指標を収集し、Prometheus を通じて取得できるようにします。[ラベル] 列には、各指標に適用可能なすべてのラベルが一覧表示されます。ラベルのない指標は時間の経過に伴う単一の測定を表す一方、ラベルのある指標はラベル値の組み合わせごとに 1 つずつ、つまり複数の測定を表します。
この表が古くなった場合は、Prometheus のユーザー インターフェースで接頭辞によって指標をフィルタリングできます。該当する指標はすべて接頭辞 config_sync_ で始まります。
| 名前 | タイプ | ラベル | 説明 | 
|---|---|---|---|
| config_sync_api_duration_seconds_bucket | ヒストグラム | status、operation | API サーバー呼び出しのレイテンシの分布(各サイクルの期間ごとにバケットに分散) | 
| config_sync_api_duration_seconds_count | ヒストグラム | status、operation | API サーバー呼び出しのレイテンシの分布(期間は無視) | 
| config_sync_api_duration_seconds_sum | ヒストグラム | status、operation | すべての API サーバー呼び出しの期間の合計 | 
| config_sync_apply_duration_seconds_bucket | ヒストグラム | commit、status | 信頼できる情報源から宣言されたリソースをクラスタに適用するレイテンシの分布(各サイクルの期間ごとにバケットに分散) | 
| config_sync_apply_duration_seconds_count | ヒストグラム | commit、status | 信頼できる情報源から宣言されたリソースをクラスタに適用するレイテンシの分布(期間は無視) | 
| config_sync_apply_duration_seconds_sum | ヒストグラム | commit、status | 信頼できる情報源から宣言されたリソースをクラスタに適用するときのすべてのレイテンシの期間の合計 | 
| config_sync_apply_operations_total | カウンタ | operation、status、controller | リソースを信頼できる情報源からクラスタに同期するために実行されたオペレーションの数 | 
| config_sync_cluster_scoped_resource_count | ゲージ | resourcegroup | ResourceGroup 内のクラスタ スコープのリソース数 | 
| config_sync_crd_count | ゲージ | resourcegroup | ResourceGroup の CRD の数 | 
| config_sync_declared_resources | ゲージ | commit | Git 内で宣言され、解析されているリソースの数。 | 
| config_sync_internal_errors_total | カウンタ | ソース | Config Sync によってトリガーされた内部エラーの数。内部エラーが発生していない場合、指標が表示されないことがあります | 
| config_sync_kcc_resource_count | ゲージ | resourcegroup | ResourceGroup の Config Connector リソースの数 | 
| config_sync_last_apply_timestamp | ゲージ | commit、status | 最新の適用オペレーションのタイムスタンプ | 
| config_sync_last_sync_timestamp | ゲージ | commit、status | Git から最後に同期が行われた時刻のタイムスタンプ | 
| config_sync_parser_duration_seconds_bucket | ヒストグラム | status、trigger、source | 信頼できる情報源からクラスタと同期する際のさまざまなステージのレイテンシの分布 | 
| config_sync_parser_duration_seconds_count | ヒストグラム | status、trigger、source | 信頼できる情報源からクラスタと同期する際のさまざまなステージのレイテンシの分布(期間は無視) | 
| config_sync_parser_duration_seconds_sum | ヒストグラム | status、trigger、source | 信頼できる情報源からクラスタと同期する際のさまざまなステージのレイテンシの合計 | 
| config_sync_pipeline_error_observed | ゲージ | name、reconciler、component | RootSync と RepoSync のカスタム リソースのステータス。値が 1 の場合は、失敗であることを示します。 | 
| config_sync_ready_resource_count | ゲージ | resourcegroup | ResourceGroup の準備完了リソースの総数 | 
| config_sync_reconcile_duration_seconds_bucket | ヒストグラム | status | 調整ツール マネージャーによって処理される調整イベントのレイテンシの分布(各呼び出しの期間ごとにバケットに分散) | 
| config_sync_reconcile_duration_seconds_count | ヒストグラム | status | 調整ツール マネージャーによって処理される調整イベントのレイテンシの分布(期間は無視) | 
| config_sync_reconcile_duration_seconds_sum | ヒストグラム | status | 調整ツール マネージャーによって処理されるすべての調整イベントのレイテンシの期間の合計 | 
| config_sync_reconciler_errors | ゲージ | component、errorclass | 信頼できる情報源からクラスタにリソースを同期するときに発生したエラーの数 | 
| config_sync_remediate_duration_seconds_bucket | ヒストグラム | status | リメディエーター調整イベントのレイテンシの分布(期間ごとにバケットに分散) | 
| config_sync_remediate_duration_seconds_count | ヒストグラム | status | リメディエーター調整イベントのレイテンシの分布(期間は無視) | 
| config_sync_remediate_duration_seconds_sum | ヒストグラム | status | リメディエーター調整イベントのレイテンシの期間の合計 | 
| config_sync_resource_count | ゲージ | resourcegroup | ResourceGroup で追跡されるリソースの数 | 
| config_sync_resource_conflicts_total | カウンタ | commit | キャッシュに保存されたリソースとクラスタ リソースの不一致が原因で発生したリソース競合の数。リソースの競合が発生していない場合、指標が表示されないことがあります | 
| config_sync_resource_fights_total | カウンタ | 同期の頻度が高すぎるリソースの数。リソースの競合が発生していない場合、指標が表示されないことがあります | |
| config_sync_resource_group_total | ゲージ | ResourceGroup CR の数 | |
| config_sync_resource_ns_count | ゲージ | resourcegroup | ResourceGroup のリソースで使用される Namespace の数 | 
| config_sync_rg_reconcile_duration_seconds_bucket。 | ヒストグラム | stallreason | ResourceGroup CR の調整の時間分布(期間ごとにバケットに分散) | 
| config_sync_rg_reconcile_duration_seconds_count | ヒストグラム | stallreason | ResourceGroup CR の調整の時間分布(期間は無視) | 
| config_sync_rg_reconcile_duration_seconds_sum | ヒストグラム | stallreason | ResourceGroup CR のすべての調整時間の合計 | 
| config_sync_kustomize_build_latency_bucket | ヒストグラム | kustomize build実行時間のレイテンシ分布(各オペレーションの期間ごとにバケットに分散) | |
| config_sync_kustomize_build_latency_count | ヒストグラム | kustomize build実行時間のレイテンシ分布(期間は無視) | |
| config_sync_kustomize_build_latency_sum | ヒストグラム | すべての kustomize build実行時間の合計 | |
| config_sync_kustomize_ordered_top_tier_metrics | ゲージ | top_tier_field | Resources、Generator、SecretGenerator、ConfigMapGenerator、Transformer、Validator の使用 | 
| config_sync_kustomize_builtin_transformers | ゲージ | k8s_builtin_transformer | Kubernetes オブジェクトのメタデータに関連する組み込み Transformer の使用 | 
| config_sync_kustomize_resource_count | ゲージ | kustomize buildによって出力されるリソースの数 | |
| config_sync_kustomize_field_count | ゲージ | field_name | kustomization ファイルで特定のフィールドが使用されている回数 | 
| config_sync_kustomize_patch_count | ゲージ | patch_field | フィールド patches、patchesStrategicMerge、patchesJson6902内のパッチの数 | 
| config_sync_kustomize_base_count | ゲージ | base_source | リモートベースとローカルベースの数 | 
| kustomize_deprecating_field_count | ゲージ | deprecating_field | サポートが終了する可能性のあるフィールドの使用 | 
| kustomize_simplification_adoption_count | ゲージ | simplification_field | 簡素化 Transformer のイメージ、レプリカ、代替措置の使用 | 
| kustomize_helm_inflator_count | ゲージ | helm_inflator | Kustomize での Helm の使用(組み込みフィールドまたはカスタム関数のいずれか) | 
Prometheus のデバッグ手順の例
次の例では、Prometheus 指標、オブジェクトのステータス フィールド、オブジェクトのアノテーションを使用して Config Sync 関連の問題を検出し、診断する際のパターンについて説明します。まず、概要レベルのモニタリングで問題を検出し、その後、検索条件を調整して詳細を確認して、問題の根本原因を診断します。
ステータスで構成ファイルをクエリする
reconciler プロセスは概要レベルの指標を提供します。これは、クラスタでの Config Sync の全体的な状態を把握する際に役立ちます。これにより、エラーが発生しているかどうかを確認できます。また、エラーに対するアラートも設定できます。
config_sync_reconciler_errors
リコンサイラで指標をクエリする
Config Sync で RootSync API と RepoSync API を使用している場合は、RootSync オブジェクトと RepoSync オブジェクトをモニタリングできます。RootSync オブジェクトと RepoSync オブジェクトは、クラスタ上で Config Sync がどのように機能しているかを理解する有用な分析情報を提供します。ほとんどの指標は reconciler 名でタグ付けされるため、エラーが発生したことを確認し、Prometheus でアラートを設定できます。
フィルタリングに使用できる利用可能な指標ラベルの完全なリストをご覧ください。
Prometheus では、RootSync または RepoSync に次のフィルタを使用できます。
# Querying RootSync
config_sync_reconciler_errors{configsync_sync_name=ROOT_SYNC_NAME}
# Querying RepoSync
config_sync_reconciler_errors{configsync_sync_name=REPO_SYNC_NAME}
ステータスでインポートと同期オペレーションをクエリする
Prometheus では、次のクエリを使用できます。
# Check for errors that occurred when sourcing configs.
config_sync_reconciler_errors{component="source"}
# Check for errors that occurred when syncing configs to the cluster.
config_sync_reconciler_errors{component="sync"}
また、ソースと同期プロセスに関する指標を確認することもできます。
config_sync_parser_duration_seconds{status="error"}
config_sync_apply_duration_seconds{status="error"}
config_sync_remediate_duration_seconds{status="error"}
Google Cloud Managed Service for Prometheus でリソースをモニタリングする
Google Cloud Managed Service for Prometheus は、Prometheus 指標用の Google Cloudのフルマネージド マルチクラウド ソリューションです。データ収集では、マネージド収集(推奨モード)とセルフデプロイによるデータ収集の 2 つのモードがサポートされています。マネージド収集モードで Google Cloud Managed Service for Prometheus を使用して Config Sync のモニタリングを設定するには、次の手順を完了します。
- マネージド収集の設定の手順に沿って、クラスタでマネージド Prometheus を有効にします。 
- 次のサンプル マニフェストを - pod-monitoring-config-sync-monitoring.yamlとして保存します。このマニフェストは、- config-management-monitoringNamespace にある- otel-collector-*Pod のポート- 8675で Config Sync 指標をスクレイピングするように PodMonitoring リソースを構成します。PodMonitoring リソースは、Kubernetes ラベルセレクタを使用して- otel-collector-*Pod を検索します。- apiVersion: monitoring.googleapis.com/v1 kind: PodMonitoring metadata: name: config-sync-monitoring namespace: config-management-monitoring spec: selector: matchLabels: app: opentelemetry component: otel-collector endpoints: - port: 8675 interval: 10s
- マニフェストをクラスタに適用します。 - kubectl apply -f pod-monitoring-config-sync-monitoring.yaml 
- Cloud Monitoring での Managed Service for Prometheus データの手順に従って、 Google Cloud コンソールの Cloud Monitoring の [Metrics Explorer] ページで Prometheus データがエクスポートされていることを確認します。