Anthos Config Management 使用 Prometheus 收集和显示与其流程相关的指标。
您还可以配置 Cloud Monitoring 以从 Prometheus 中拉取自定义指标。然后,您可以在 Prometheus 和 Monitoring 中查看自定义指标。如需了解详情,请参阅使用 Prometheus。
抓取指标
所有 Prometheus 指标均可在端口 8675 抓取。在抓取指标之前,您需要采用下列两种方式中的任意一种为 Prometheus 配置集群。采用以下任一方式:
按照 Prometheus 文档的说明配置集群以抓取指标,或
使用 CoreOS 提供的 Prometheus Operator 以及以下清单,这些清单将每 10 秒抓取所有 Anthos Config Management 指标一次。
创建一个临时目录来保存清单文件。
mkdir acm-monitor cd acm-monitor
使用
curl
命令从 CoreOS 代码库下载 Prometheus 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
使用以下命令应用
kustomized
清单:kubectl apply -k . until kubectl get customresourcedefinitions servicemonitors.monitoring.coreos.com ; \ do date; sleep 1; echo ""; done
第二个命令会进行阻止,直到集群上有可用的 CRD。
为配置 Prometheus 服务器所需的资源创建清单,该服务器将从 Anthos Config Management 中抓取指标。
# acm.yaml apiVersion: v1 kind: ServiceAccount metadata: name: prometheus-acm namespace: monitoring --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRole metadata: name: prometheus-acm 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/v1beta1 kind: ClusterRoleBinding metadata: name: prometheus-acm roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: prometheus-acm subjects: - kind: ServiceAccount name: prometheus-acm namespace: monitoring --- apiVersion: monitoring.coreos.com/v1 kind: Prometheus metadata: name: acm namespace: monitoring labels: prometheus: acm spec: replicas: 2 serviceAccountName: prometheus-acm serviceMonitorSelector: matchLabels: prometheus: config-management podMonitorSelector: matchLabels: prometheus: config-management alerting: alertmanagers: - namespace: default name: alertmanager port: web resources: requests: memory: 400Mi --- apiVersion: v1 kind: Service metadata: name: prometheus-acm namespace: monitoring labels: prometheus: acm spec: type: NodePort ports: - name: web nodePort: 31900 port: 9190 protocol: TCP targetPort: web selector: app: prometheus prometheus: acm --- apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: acm-service namespace: monitoring labels: prometheus: config-management spec: selector: matchLabels: monitored: "true" namespaceSelector: matchNames: - config-management-system endpoints: - port: metrics interval: 10s --- apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: cnrm namespace: monitoring labels: prometheus: config-management spec: endpoints: - interval: 10s port: metrics namespaceSelector: matchNames: - cnrm-system selector: matchLabels: cnrm.cloud.google.com/monitored: "true" cnrm.cloud.google.com/system: "true" --- apiVersion: monitoring.coreos.com/v1 kind: PodMonitor metadata: name: acm-pod namespace: monitoring labels: prometheus: config-management spec: selector: matchLabels: monitored: "true" namespaceSelector: matchNames: - gatekeeper-system podMetricsEndpoints: - port: metrics interval: 10s
使用以下命令应用清单:
kubectl apply -f acm.yaml until kubectl rollout status statefulset/prometheus-acm -n monitoring; \ do sleep 1; done
第二个命令会进行阻止,直到 Pod 开始运行。
您可以通过将 Prometheus 服务器的 Web 端口转发到本地机器来验证安装。
kubectl -n monitoring port-forward svc/prometheus-acm 9190
现在,您可以通过
http://localhost:9190
访问 Prometheus 网页界面。移除临时目录。
cd .. rm -rf acm-monitor
可用指标
Anthos Config Management 会收集以下指标并将其提供给 Prometheus。标签列列出了适用于每个指标的所有标签。没有标签的指标代表一段时间内的一次测量结果,而带有标签的指标代表多次测量结果,每组标签值对应一次测量结果。
如果此表变得不同步,您可以在 Prometheus 界面中按前缀过滤指标,所有指标都以 gkeconfig_
前缀开头。
名称 | 类型 | 标签 | 说明 |
---|---|---|---|
gkeconfig_importer_cycle_duration_seconds_bucket |
直方图 | status | 导入程序尝试将配置导入集群的周期数(按每个周期的持续时间分配到存储分区中) |
gkeconfig_importer_cycle_duration_seconds_count |
直方图 | status | 导入程序尝试将配置导入集群的周期数(忽略持续时间) |
gkeconfig_importer_cycle_duration_seconds_sum |
直方图 | status | 导入程序尝试将配置导入集群的所有周期的持续时间之和 |
gkeconfig_importer_namespace_configs |
仪表盘 | 当前状态下的命名空间配置数 | |
gkeconfig_monitor_errors |
仪表盘 | component | 配置代码库中按发生错误的组件分组的错误数 |
gkeconfig_monitor_configs |
仪表盘 | state | 按配置(集群和命名空间)的同步状态分组的配置数量 |
gkeconfig_monitor_last_import_timestamp |
仪表盘 | 最近执行的导入操作的时间戳 | |
gkeconfig_monitor_last_sync_timestamp |
仪表盘 | 最近执行的同步操作的时间戳 | |
gkeconfig_monitor_sync_latency_seconds_bucket |
直方图 | 执行的导入到同步测量的数量(通过两者之间的延迟时间分配到存储分区中) | |
gkeconfig_monitor_sync_latency_seconds_count |
直方图 | 执行的导入到同步测量的数量(忽略两者之间的延迟时间) | |
gkeconfig_monitor_sync_latency_seconds_sum |
直方图 | 执行的所有导入到同步测量的延迟时间总和 | |
gkeconfig_syncer_api_duration_seconds_bucket |
直方图 | operation、type、status | 同步程序对 API 服务器的调用次数(按每次调用的持续时间分配到存储分区中) |
gkeconfig_syncer_api_duration_seconds_count |
直方图 | operation、type、status | 导入程序对 API 服务器的调用次数(忽略持续时间) |
gkeconfig_syncer_api_duration_seconds_sum |
直方图 | operation、type、status | 同步程序对 API 服务器进行的所有调用的持续时间之和 |
gkeconfig_syncer_controller_restarts_total |
计数器 | source | 命名空间和集群配置控制器的重新启动总数 |
gkeconfig_syncer_operations_total |
计数器 | operation、type、status | 将资源同步到配置所执行的操作总数 |
gkeconfig_syncer_reconcile_duration_seconds_bucket |
直方图 | type、status | 同步程序处理的协调事件数(按持续时间分配到存储分区中) |
gkeconfig_syncer_reconcile_duration_seconds_count |
直方图 | type、status | 同步程序处理的协调事件数(忽略持续时间) |
gkeconfig_syncer_reconcile_duration_seconds_sum |
直方图 | type、status | 同步程序处理的所有协调事件的持续时间之和 |
gkeconfig_syncer_reconcile_event_timestamps |
仪表盘 | type | 同步程序协调事件发生时的时间戳 |
如果在集群上启用了政策控制器,则以下附加指标将可用(所有前缀为 gatekeeper_
):
名称 | 类型 | 标签 | 说明 |
---|---|---|---|
gatekeeper_audit_duration_seconds |
直方图 | 审核周期持续时间分布 | |
gatekeeper_audit_last_run_time |
仪表盘 | 自上次审核运行时以来的 Epoch 时间戳,以秒为单位,以浮点数表示 | |
gatekeeper_constraint_template_ingestion_count |
计数器 | status | 限制条件模板提取操作的总数 |
gatekeeper_constraint_template_ingestion_duration_seconds |
直方图 | status | 限制条件模板提取持续时间分布 |
gatekeeper_constraint_templates |
仪表盘 | status | 当前限制条件模板数量 |
gatekeeper_constraints |
仪表盘 | enforcement_action, status | 当前限制条件数量 |
gatekeeper_request_count |
计数器 | admission_status | 来自 API 服务器的准入请求计数 |
gatekeeper_request_duration_seconds |
直方图 | admission_status | 准入请求持续时间分布 |
gatekeeper_violations |
仪表盘 | enforcement_action | 在上一个审核周期中检测到的审核违规次数 |
gatekeeper_watch_manager_intended_watch_gvk |
仪表盘 | 打算监控多少个唯一的 GroupVersionKinds 政策控制器。这是同步资源和限制条件的结合。目前尚未实现。 | |
gatekeeper_watch_manager_watched_gvk |
仪表盘 | 实际上正在监控多少个唯一的 GroupVersionKinds 政策控制器。这意味着收敛于 gatekeeper_watch_manager_intended_watch_gvk。目前尚未实现。 | |
gatekeeper_sync |
仪表盘 | kind, status | 已复制到 OPA 缓存中的资源数量 |
gatekeeper_sync_duration_seconds |
直方图 | 对象同步持续时间分布 | |
gatekeeper_sync_last_run_time |
仪表盘 | 上次资源同步的时间 |
排查过程示例
下面的示例展示了一些模式,它们使用 Prometheus 指标、对象状态字段和对象注释来检测和诊断与 Anthos Config Management 相关的问题。这些示例显示了如何先从检测问题的基本监控开始,然后逐步优化搜索,从而深入分析并诊断问题的根本原因。
按状态查询配置
monitor
进程提供了概要指标,有助于您全面了解 Anthos Config Management 在集群上的运行情况。您可以查看是否发生了任何错误,甚至还可以设置错误提醒。
gkeconfig_monitor_errors
使用 nomos status
显示错误
除了使用 Prometheus 指标来监控集群上的 Anthos Config Management 状态外,您还可以使用 nomos status
命令在命令行上显示所有集群的错误。
按状态查询导入和同步操作
Anthos Config Management 使用两个步骤将代码库中的配置应用到集群。gkeconfig_monitor_errors
指标按组件进行标记,因此您可以查看发生错误的位置。
gkeconfig_monitor_errors{component="importer"}
gkeconfig_monitor_errors{component="syncer"}
您还可以查看导入程序和同步程序进程自身的指标。
gkeconfig_importer_cycle_duration_seconds_count{status="error"}
gkeconfig_syncer_reconcile_duration_seconds_count{status="error"}
检查配置对象状态
Anthos Config Management 定义两个自定义 Kubernetes 对象:ClusterConfig 和 NamespaceConfig。这些对象定义一个状态字段,可在其中了解上次应用于配置的更改以及发生的任何错误。例如,如果名为 shipping-dev
的命名空间出现错误,您可查看相应的 NamespaceConfig 的状态。
kubectl get namespaceconfig shipping-dev -o yaml
检查对象的 token
注释
您可能希望了解 Anthos Config Management 上次更新代管 Kubernetes 对象的时间。每个代管对象都将进行注释,以显示在上次修改时 Git 提交的哈希值以及包含修改内容的配置的路径。
kubectl get clusterrolebinding namespace-readers
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
annotations:
configmanagement.gke.io/source-path: cluster/namespace-reader-clusterrolebinding.yaml
configmanagement.gke.io/token: bbb6a1e2f3db692b17201da028daff0d38797771
name: namespace-readers
...
如需了解详情,请参阅标签和注释。
后续步骤
- 不妨试试从快速入门开始
- 了解如何查看 Anthos Config Management 日志