Prometheus 集成
基于 Kubernetes 的 Vertica 与 Prometheus 集成以捕获有关 VerticaDB 操作器的时间序列指标。这些指标会随着时间的推移创建应用程序的详细模型,从而提供有价值的性能和故障排除见解。Prometheus 使用 HTTP 端点公开这些指标,以促进微服务和容器化架构中的内部和外部通信和服务发现。
Prometheus 要求您设置目标 — 您想要监控的指标。每个目标都公开在操作器的 /metrics
端点上,Prometheus 会定期捕获该端点以收集目标数据。操作器支持操作器 SDK 框架,该框架要求授权代理服务器实施基于角色的访问控制 (RBAC) 来访问操作器指标。为了提高灵活性,Vertica 提供以下选项以使用 Prometheus 访问 /metrics
端点:
-
使用 sidecar 容器作为 RBAC 代理服务器来授权连接。
-
将
/metrics
端点公开给没有 RBAC 的外部连接。 -
完全禁用 Prometheus。
Vertica 提供 Helm 图表参数和 YAML 清单来配置每个选项。
注意
如果您使用 OperatorHub.io 安装了 VerticaDB 操作器,则可以将 Prometheus 集成与默认 Helm 图表设置一起使用。OperatorHub.io 安装无法配置任何 Helm 图表参数。Prometheus 操作器集成(可选)
基于 Kubernetes 的 Vertica 与 Prometheus 操作器集成,该操作器提供了可简化目标指标的自定义资源 (CR)。Vertica 支持自动发现 VerticaDB 操作器的 ServiceMonitor CR。
ServiceMonitor CR 在 GitHub 存储库中作为发布工件提供。有关 prometheus.createServiceMonitor
参数的详细信息,请参阅 Helm 图表参数。
先决条件
-
安装 kubectl 命令行工具。
使用 RBAC 访问指标
操作器 SDK 框架要求操作器使用授权代理服务器来访问指标。由于操作器仅将指标发送到 localhost,因此 Vertica 使用具有 localhost 访问权限的 sidecar 容器(该容器强制执行 RBAC)来满足这些要求。
RBAC 规则是群集范围的,sidecar 对来自某些客户端的连接进行授权,这些客户端与具有正确 ClusterRole 和 ClusterRoleBindings 的服务帐户关联。Vertica 提供以下示例清单:
-
verticadb-operator-proxy-role:ClusterRole,具有 TokenReviews 和 SubjectAccessReviews 访问权限,因此 sidecar 可以验证连接的权限。
-
verticadb-operator-proxy-rolebinding:ClusterRoleBinding,将用来验证 sidecar 权限的 ClusterRole 与服务帐户相关联。
-
verticadb-operator-metrics-reader:ClusterRole,允许在
/metrics
端点上对非 Kubernetes 资源发出 HTTP GET 请求。
有关 ClusterRoles 和 ClusterRoleBindings 的更多详细信息,请参阅 Kubernetes 文档。
以下步骤创建 ClusterRole 和 ClusterRoleBindings 对象,这些对象授予对非 Kubernetes 资源(例如 Prometheus)的 /metrics
端点的访问权限。由于 RBAC 规则是群集范围的,因此您必须创建 ClusterRoleBinding 或添加到现有 ClusterRoleBinding:
-
创建 ClusterRoleBinding,以将 RBAC sidecar 代理服务器的角色与服务帐户绑定:
-
要创建新的 ClusterRoleBinding:
$ kubectl create clusterrolebinding verticadb-operator-proxy-rolebinding --clusterrole=verticadb-operator-proxy-role --serviceaccount=namespace:verticadb-operator-controller-manager
-
要将服务帐户添加到现有 ClusterRoleBinding:
$ kubectl patch clusterrolebinding verticadb-operator-proxy-rolebinding --type='json' -p='[{"op": "add", "path": "/subjects/-", "value": {"kind": "ServiceAccount", "name": "verticadb-operator-controller-manager","namespace": "namespace" } }]'
-
-
创建 ClusterRoleBinding,以将非 Kubernetes 对象的角色绑定到 RBAC sidecar 代理服务器服务帐户:
-
要创建新的 ClusterRoleBinding:
$ kubectl create clusterrolebinding verticadb-operator-metrics-reader --clusterrole=verticadb-operator-metrics-reader --serviceaccount=namespace:serviceaccount
-
要将服务帐户绑定到现有 ClusterRoleBinding:
$ kubectl patch clusterrolebinding verticadb-operator-metrics-reader --type='json' -p='[{"op": "add", "path": "/subjects/-", "value": {"kind": "ServiceAccount", "name": "serviceaccount","namespace": "namespace" } }]'
-
当您安装 Helm 图表时,会自动创建 ClusterRole 和 ClusterRoleBindings。默认情况下,prometheus.expose 参数设置为 EnableWithProxy,它会创建服务对象并公开操作器的 /metrics
端点。
有关创建 sidecar 容器的详细信息,请参阅创建自定义资源。
服务对象
Vertica 提供名为 verticadb-operator-metrics-service
的服务对象以访问 Prometheus /metrics
端点。VerticaDB 操作器不管理该服务对象。默认情况下,该服务对象使用 ClusterIP 服务类型来支持 RBAC。
使用以下路径连接到端口 8443 处的 /metrics
端点:
https://verticadb-operator-metrics-service.namespace.svc.cluster.local:8443/metrics
在没有 RBAC 的情况下访问指标
您可能有一个不需要对 Prometheus 指标进行特许访问的环境。例如,您可以在 Kubernetes 之外运行 Prometheus。
要允许使用 HTTP 从外部访问 /metrics
端点,请将 prometheus.expose 设置为 EnableWithoutAuth。示例命令如下所示:
$ helm install operator-name --namespace namespace --create-namespace vertica-charts/verticadb-operator \
--set prometheus.expose=EnableWithoutAuth
服务对象
Vertica 提供名为 verticadb-operator-metrics-service
的服务对象以访问 Prometheus /metrics
端点。VerticaDB 操作器不管理该服务对象。默认情况下,该服务对象使用 ClusterIP 服务类型,因此您必须更改 serviceType 以供外部客户端访问。该服务对象的完全限定域名 (FQDN) 如下所示:
verticadb-operator-metrics-service.namespace.svc.cluster.local
使用以下路径连接到端口 8443 处的 /metrics
端点:
http://verticadb-operator-metrics-service.namespace.svc.cluster.local:8443/metrics
禁用 Prometheus
要禁用 Prometheus,请将 prometheus.expose Helm 图表参数设置为 Disable。示例命令如下所示:
$ helm install operator-name --namespace namespace --create-namespace vertica-charts/verticadb-operator \
--set prometheus.expose=Disable
有关 Helm 安装命令的详细信息,请参阅安装 Vertica DB 操作器。