Config Sync の指標

このページでは、Config Sync リソースのモニタリングに使用できる OpenTelemetry の指標について説明します。

Config Sync が指標を収集する仕組み

Config Sync は、指標の作成と記録に OpenCensus を使用します。また、その指標を Prometheus または Cloud Monitoring にエクスポートするために OpenTelemetry を使用します。OpenTelemetry の指標をカスタム モニタリング システムにエクスポートすることもできます。以下のガイドでは、指標をエクスポートする方法について説明します。

OpenTelemetry Collector を構成するために、Config Sync はデフォルトで otel-collector という名前の ConfigMap を作成します。otel-collector Deployment は config-management-monitoring Namespace で実行されます。

otel-collector ConfigMap を作成すると、Prometheus がスキャンする指標エンドポイントを公開する prometheus エクスポータが構成されます。

Config Sync を GKE で実行するか、 Google Cloud 認証情報で構成された別の Kubernetes 環境で実行する場合、Config Sync は otel-collector-google-cloud という名前の ConfigMap を作成します。otel-collector-google-cloud は、otel-collector ConfigMap の構成をオーバーライドします。Config Sync は、otel-collector または otel-collector-google-cloud ConfigMap の変更を元に戻します。

otel-collector-google-cloud ConfigMap を作成すると、Cloud Monitoring にエクスポートする cloudmonitoring エクスポータと、Google の内部指標サービスにエクスポートする kubernetes エクスポータも追加されます。kubernetes エクスポータは、Config Sync の改善に役立てるため、一部の匿名化された指標を Google に送信します。

Cloud Monitoring は、送信された指標をGoogle Cloud プロジェクトに保存します。cloudmonitoring エクスポータと kubernetes エクスポータは同じGoogle Cloud サービス アカウントを使用します。このサービス アカウントには、Cloud Monitoring に書き込みをする IAM 権限が必要です。これらの権限を構成するには、Cloud Monitoring に指標書き込み権限を付与するをご覧ください。

OpenTelemetry の指標

Config Sync と Resource Group Controller は OpenCensus を使用して以下の指標を収集し、OpenTelemetry Collector を通じて利用できるようにします。[タグ] 列には、各指標に適用される Config Sync 固有のタグが記載されています。タグのある指標はタグ値の組み合わせごとに 1 つずつ、つまり複数の測定を表します。

Config Sync の指標

名前 タイプ タグ 説明
api_duration_seconds 分布 operation、status API サーバー呼び出しのレイテンシの分布。
apply_duration_seconds 分布 status 信頼できる情報源から宣言されたリソースをクラスタに適用するレイテンシの分布。
apply_operations_total カウント operation、status、controller リソースを信頼できる情報源からクラスタに同期するために実行されたオペレーションの総数。
declared_resources 前回の値 解析された、Git 内で宣言されているリソースの数。
internal_errors_total カウント source Config Sync によって検出された内部エラーの総数。内部エラーが発生していない場合、指標がクエリ結果に表示されないことがあります。
last_sync_timestamp 前回の値 status Git から最後に同期が行われた時刻のタイムスタンプ。
parser_duration_seconds 分布 status、trigger、source 信頼できる情報源からクラスタと同期する際のさまざまなステージのレイテンシの分布。
pipeline_error_observed 前回の値 name、reconciler、component RootSync と RepoSync のカスタム リソースのステータス。値が 1 の場合は、失敗であることを示します。
reconcile_duration_seconds 分布 status 調整ツール マネージャーによって処理される調整イベントのレイテンシの分布。
reconciler_errors 前回の値 component、errorclass 信頼できる情報源からクラスタにリソースを同期するときに発生したエラーの数。
remediate_duration_seconds 分布 status リメディエーター調整イベントのレイテンシの分布。
resource_conflicts_total カウント キャッシュに保存されたリソースとクラスタ リソースの不一致が原因で発生したリソース競合の総数。リソースの競合が発生していない場合、指標がクエリ結果に表示されないことがあります。
resource_fights_total カウント 同期の頻度が高すぎるリソースの総数。結果が 0 より大きい場合は、問題があることを示します。詳細については、KNV2005: ResourceFightWarning をご覧ください。リソースの競合が発生していない場合、指標がクエリ結果に表示されないことがあります。

Resource Group Controller の指標

Resource Group Controller は Config Sync のコンポーネントです。マネージド リソースを追跡し、各リソースの準備状況や調整状況をチェックします。以下の指標を選択できます。

名前 タイプ タグ 説明
rg_reconcile_duration_seconds 分布 stallreason ResourceGroup CR の調整にかかった時間の分布
resource_group_total 前回の値 ResourceGroup CR の現在の数
resource_count 前回の値 resourcegroup ResourceGroup で追跡されるリソースの総数
ready_resource_count 前回の値 resourcegroup ResourceGroup の準備完了リソースの総数
resource_ns_count 前回の値 resourcegroup ResourceGroup のリソースで使用される名前空間の数
cluster_scoped_resource_count 前回の値 resourcegroup ResourceGroup 内のクラスタ スコープのリソース数
crd_count 前回の値 resourcegroup ResourceGroup の CRD の数
kcc_resource_count 前回の値 resourcegroup ResourceGroup の KCC リソースの総数
pipeline_error_observed 前回の値 name、reconciler、component RootSync と RepoSync のカスタム リソースのステータス。値が 1 の場合は、失敗であることを示します。

Config Sync の指標ラベル

指標ラベルは、Cloud Monitoring と Prometheus で指標データを集計するために使用できます。これは、Monitoring コンソールの [グループ条件] プルダウン リストから選択できます。

Cloud Monitoring のラベルと Prometheus の指標ラベルの詳細については、指標モデルのコンポーネントPrometheus データモデルをご覧ください。

指標ラベル

Config Sync と Resource Group Controller の指標では次のラベルが使用されます。これらは、Cloud Monitoring と Prometheus でモニタリングする際に使用できます。

名前 説明
operation create、patch、update、delete 実行されたオペレーションのタイプ
status success、error オペレーションの実行ステータス
reconciler rootsync、reposync Reconciler のタイプ
source parser、differ、remediator 内部エラーのソース
trigger try、watchUpdate、managementConflict、resync、reimport 調整イベントのトリガー
name Reconciler の名前 Reconciler の名前
component parsing、source、sync、rendering、readiness 調整の現在のコンポーネント / ステージの名前。
container reconciler、git-sync コンテナの名前
resource cpu、memory リソースのタイプ
controller applier、remediator ルートまたは Namespace Reconciler のコントローラの名前
type 任意の Kubernetes リソース(例: ClusterRole、Namespace、NetworkPolicy)。 Kubernetes API の種類
commit ---- 同期された最新の commit のハッシュ

リソースラベル

Prometheus と Cloud Monitoring に送信される Config Sync の指標には、ソース Pod を識別するために次の指標ラベルが設定されています。

名前 説明
k8s.node.name Kubernetes Pod をホストしているノードの名前
k8s.pod.namespace Pod の Namespace
k8s.pod.uid Pod の UID
k8s.pod.ip Pod の IP
k8s.deployment.name Pod を所有する Deployment の名前

reconciler Pod から Prometheus と Cloud Monitoring に送信される Config Sync の指標には、Reconciler の構成に使用する RootSync または RepoSync を識別する次の指標ラベルも設定されます。

名前 説明
configsync.sync.kind この Reconciler を構成するリソースの種類: RootSync または RepoSync
configsync.sync.name この Reconciler を構成する RootSync または RepoSync の名前
configsync.sync.namespace この Reconciler を構成する RootSync または RepoSync の Namespace

Cloud Monitoring のリソースラベル

Cloud Monitoring のリソースラベルは、ストレージ内の指標をインデックス登録するために使用されます。つまり、カーディナリティがパフォーマンスの重要な要素である指標ラベルと異なり、カーディナリティによる影響はほとんどありません。詳しくは、モニタリング対象リソースタイプをご覧ください。

k8s_container リソースタイプでは、ソースコンテナを識別するために次のリソースラベルを設定します。

名前 説明
container_name コンテナの名前
pod_name Pod の名前
namespace_name Pod の Namespace
location ノードをホストするクラスタのリージョンまたはゾーン
cluster_name ノードをホストするクラスタの名前
project クラスタをホストしているプロジェクトの ID

カスタム指標のフィルタリングを構成する

Config Sync が Prometheus、Cloud Monitoring、Google の内部モニタリング サービスにエクスポートするカスタム指標を調整できます。カスタム指標を調整して、含まれる指標を微調整したり、別のバックエンドを構成したりします。

カスタム指標を変更するには、otel-collector-custom という名前の ConfigMap を作成して編集します。この ConfigMap を使用すると、Config Sync が変更を元に戻すことはありません。otel-collector または otel-collector-google-cloud ConfigMap を変更すると、Config Sync は変更を元に戻します。

この ConfigMap を調整する方法の例については、オープンソースの Config Sync ドキュメントのカスタム指標のフィルタリングをご覧ください。

pipeline_error_observ 指標を理解する

pipeline_error_observed 指標は、同期されていないか、目的の状態に調整されていないリソースが含まれている RepoSync または RootSync の CR を迅速に識別するために役立つ指標です。

  • RootSync または RepoSync による同期が正常に完了すると、すべてのコンポーネント(renderingsourcesyncreadiness)の指標が値 0 になります。

    すべてのコンポーネントが値 0 で観測されている pipeline_error_observ 指標のスクリーンショット

  • 最新の commit が自動レンダリングに失敗した場合、コンポーネント rendering の指標は値 1 になります。

  • 最新の commit でエラーが発生するか、最新の commit に無効な構成が含まれている場合、コンポーネント source の指標は値 1 になります。

  • リソースをクラスタに適用できない場合、コンポーネント sync を含む指標が値 1 で観測されます。

  • リソースが適用されたものの、目的の状態に到達できない場合、コンポーネント readiness の指標は 1 の値で観測されます。たとえば、クラスタに Deployment が適用されたものの、対応する Pod が正常に作成されなかった場合などです。

次のステップ