本頁說明可用於監控 Config Sync 資源的 OpenTelemetry 指標。
Config Sync 收集指標的方式
Config Sync 會使用 OpenCensus 建立及記錄指標,並使用 OpenTelemetry 將指標匯出至 Prometheus 和 Cloud Monitoring。下列指南說明如何匯出指標:
- Cloud Monitoring
- Prometheus
- 自訂監控系統 (不建議)
根據預設,Config Sync 會建立名為 otel-collector 的 ConfigMap,用於設定 OpenTelemetry Collector。otel-collector 部署作業會在 config-management-monitoring 命名空間中執行。
建立 otel-collector ConfigMap 會設定 prometheus 匯出工具,該工具會公開指標端點供 Prometheus 掃描。
在 GKE 或其他已設定 Cloud de Confiance by S3NS 憑證的 Kubernetes 環境中執行 Config Sync 時,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 時,也會新增 cloudmonitoring 匯出工具 (匯出至 Cloud Monitoring) 和 kubernetes 匯出工具 (匯出至 Google 內部指標服務)。kubernetes匯出工具會將選取的匿名指標傳送給 Google,協助改善 Config Sync。
Cloud Monitoring 會將您傳送的指標儲存在Cloud de Confiance 專案中。cloudmonitoring 和 kubernetes 匯出工具使用相同的Cloud de Confiance by S3NS 服務帳戶,該帳戶需要 IAM 權限才能寫入 Cloud Monitoring。如要設定這些權限,請參閱授予 Cloud Monitoring 指標寫入權限。
停用監控功能
根據預設,Config Sync 會收集所有 RootSync 和 RepoSync 物件的指標。只有自訂 RootSync 或 RepoSync 物件支援停用指標。如果您使用 Cloud de Confiance 控制台、Google Cloud CLI 或 Terraform 安裝 Config Sync 時,系統預設會建立 RootSync 物件,且該物件的名稱為 root-sync,則對 spec.monitoring.enabled 欄位所做的任何變更都會自動還原。
如要針對特定 RootSync 或 RepoSync 物件停用指標收集功能,請在 RootSync 或 RepoSync 自訂資源中,將 spec.monitoring.enabled 欄位設為 false:
如果停用 RootSync 或 RepoSync 物件的監控功能,會發生下列情況:
- 協調器 Pod 會省略
otel-agent邊車容器。 - 系統會停用該特定協調器的遙測資料收集和匯出功能,有助於減少資源耗用量。
以下範例會停用自訂 RootSync 或 RepoSync 物件的監控功能:
apiVersion: configsync.gke.io/v1beta1
kind: RootSync # or RepoSync
metadata:
name: SYNC_NAME
namespace: SYNC_NAMESPACE
spec:
monitoring:
enabled: false
OpenTelemetry 指標
Config Sync 和 Resource Group Controller 會使用 OpenCensus 收集下列指標,並透過 OpenTelemetry Collector 提供這些指標。「標記」欄會列出適用於各項指標的 Config Sync 特定標記。附有標籤的指標代表多項評估結果,每個標籤值組合各有一項。
Config Sync 指標
| 名稱 | 類型 | 標記 | 說明 |
|---|---|---|---|
| api_duration_seconds | 分布 | 作業、狀態 | API 伺服器呼叫的延遲時間分布。 |
| apply_duration_seconds | 分布 | 狀態 | 將從可靠來源宣告的資源套用至叢集的延遲分佈情形。 |
| apply_operations_total | 數量 | 作業、狀態、控制器 | 為將資源從真實來源同步至叢集,系統執行的作業總數。 |
| declared_resources | 最後一個值 | 從 Git 剖析的已宣告資源數量。 | |
| internal_errors_total | 數量 | 來源 | Config Sync 遇到的內部錯誤總數。如果沒有發生內部錯誤,指標可能不會顯示在查詢結果中。 |
| last_sync_timestamp | 最後一個值 | 狀態 | 最近一次從 Git 同步處理的時間戳記。 |
| parser_duration_seconds | 分布 | 狀態、觸發條件、來源 | 從真實來源同步到叢集所涉及不同階段的延遲時間分布。 |
| pipeline_error_observed | 最後一個值 | 名稱、協調器、元件 | RootSync 和 RepoSync 自訂資源的狀態。值為 1 表示失敗。 |
| reconcile_duration_seconds | 分布 | 狀態 | 由協調器管理員處理的協調事件延遲時間分布。 |
| reconciler_errors | 最後一個值 | component、errorclass | 將資源從基準真相來源同步至叢集時發生的錯誤數。 |
| remediate_duration_seconds | 分布 | 狀態 | 補救措施協調事件的延遲時間分布情形。 |
| resource_conflicts_total | 數量 | 因快取資源與叢集資源不符而導致的資源衝突總數。如果沒有發生資源衝突,指標可能不會出現在查詢結果中。 | |
| resource_fights_total | 數量 | 同步頻率過高的資源總數。如果結果大於零,表示有問題。詳情請參閱「KNV2005: ResourceFightWarning」。如果沒有發生資源爭用,指標可能不會出現在查詢結果中。 |
資源群組控制器指標
資源群組控制器是 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 | 最後一個值 | 名稱、協調器、元件 | RootSync 和 RepoSync 自訂資源的狀態。值為 1 表示失敗。 |
Config Sync 指標標籤
指標標籤可用於匯總 Cloud Monitoring 和 Prometheus 中的指標資料。您可以在監控主控台的「分組依據」下拉式清單中選取這些選項。
如要進一步瞭解 Cloud Monitoring 標籤和 Prometheus 指標標籤,請參閱「指標模型元件」和「Prometheus 資料模型」。
指標標籤
使用 Cloud Monitoring 和 Prometheus 監控時,您會看到 Config Sync 和 Resource Group Controller 指標使用下列標籤。
| 名稱 | 值 | 說明 |
|---|---|---|
operation |
create、patch、update、delete | 執行的作業類型 |
status |
成功、錯誤 | 作業的執行狀態 |
reconciler |
rootsync、reposync | 協調器類型 |
source |
剖析器、差異器、修復工具 | 內部錯誤的來源 |
trigger |
重試、watchUpdate、managementConflict、resync、reimport | 對帳事件的觸發條件 |
name |
對帳人員姓名 | 對帳員姓名 |
component |
剖析、來源、同步、算繪、準備就緒 | 元件名稱 / 目前對帳階段 |
container |
協調器、git-sync | 容器名稱 |
resource |
CPU、記憶體 | 資源類型 |
controller |
applier、remediator | 根或命名空間調解器中的控制器名稱 |
type |
任何 Kubernetes 資源,例如 ClusterRole、Namespace、NetworkPolicy、Role 等。 | Kubernetes API 的種類 |
commit |
---- | 最近一次同步處理的修訂版本雜湊 |
資源標籤
傳送至 Prometheus 和 Cloud Monitoring 的 Config Sync 指標會設定下列指標標籤,以識別來源 Pod:
| 名稱 | 說明 |
|---|---|
k8s.node.name |
代管 Kubernetes Pod 的節點名稱 |
k8s.pod.namespace |
Pod 的命名空間 |
k8s.pod.uid |
Pod 的 UID |
k8s.pod.ip |
Pod 的 IP |
k8s.deployment.name |
擁有 Pod 的 Deployment 名稱 |
從 reconciler Pod 傳送至 Prometheus 和 Cloud Monitoring 的 Config Sync 指標,也會設定下列指標標籤,以識別用於設定協調器的 RootSync 或 RepoSync:
| 名稱 | 說明 |
|---|---|
configsync.sync.kind |
設定此協調器的資源類型:RootSync 或 RepoSync |
configsync.sync.name |
設定這個協調器的 RootSync 或 RepoSync 名稱 |
configsync.sync.namespace |
設定這個調解器的 RootSync 或 RepoSync 的命名空間 |
Cloud Monitoring 資源標籤
Cloud Monitoring 資源標籤用於為儲存空間中的指標建立索引,因此對基數的影響微乎其微,不像指標標籤,基數是重要的效能考量。詳情請參閱「受監控資源類型」。
k8s_container 資源類型會設定下列資源標籤,以識別來源容器:
| 名稱 | 說明 |
|---|---|
container_name |
容器名稱 |
pod_name |
Pod 的名稱 |
namespace_name |
Pod 的命名空間 |
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_observed 指標
pipeline_error_observed 指標可協助您快速找出未同步或包含未調解至所需狀態的資源的 RepoSync 或 RootSync CR。
如要讓 RootSync 或 RepoSync 成功同步,請觀察所有元件 (
rendering、source、sync、readiness) 的指標值是否為 0。
如果最新提交的內容無法通過自動算繪,系統會觀察到元件
rendering的指標值為 1。如果簽出最新提交內容時發生錯誤,或最新提交內容包含無效設定,則系統會觀察到元件
source的指標值為 1。如果資源無法套用至叢集,系統會觀察元件
sync的指標,值為 1。如果套用資源後無法達到所需狀態,系統會觀察元件
readiness的指標,並將值設為 1。舉例來說,系統會將 Deployment 套用至叢集,但無法順利建立對應的 Pod。
後續步驟
- 進一步瞭解如何監控 RootSync 和 RepoSync 物件。
- 瞭解如何使用 Config Sync SLI。