Prometheus 集成

基于 Kubernetes 的 Vertica 与 Prometheus 集成以捕获有关 VerticaDB 操作器的时间序列指标。这些指标会随着时间的推移创建应用程序的详细模型,从而提供有价值的性能和故障排除见解。Prometheus 使用 HTTP 端点公开这些指标,以促进微服务和容器化架构中的内部和外部通信和服务发现。

Prometheus 要求您设置目标 — 您想要监控的指标。每个目标都公开在操作器的 /metrics 端点上,Prometheus 会定期捕获该端点以收集目标数据。操作器支持操作器 SDK 框架,该框架要求授权代理服务器实施基于角色的访问控制 (RBAC) 来访问操作器指标。为了提高灵活性,Vertica 提供以下选项以使用 Prometheus 访问 /metrics 端点:

  • 使用 sidecar 容器作为 RBAC 代理服务器来授权连接。

  • /metrics 端点公开给没有 RBAC 的外部连接。

  • 完全禁用 Prometheus。

Vertica 提供 Helm 图表参数和 YAML 清单来配置每个选项。

Prometheus 操作器集成(可选)

基于 Kubernetes 的 Vertica 与 Prometheus 操作器集成,该操作器提供了可简化目标指标的自定义资源 (CR)。Vertica 支持自动发现 VerticaDB 操作器的 ServiceMonitor CR。

ServiceMonitor CR 在 GitHub 存储库作为发布工件提供。有关 prometheus.createServiceMonitor 参数的详细信息,请参阅 Helm 图表参数

先决条件

使用 RBAC 访问指标

操作器 SDK 框架要求操作器使用授权代理服务器来访问指标。由于操作器仅将指标发送到 localhost,因此 Vertica 使用具有 localhost 访问权限的 sidecar 容器(该容器强制执行 RBAC)来满足这些要求。

RBAC 规则是群集范围的,sidecar 对来自某些客户端的连接进行授权,这些客户端与具有正确 ClusterRole 和 ClusterRoleBindings 的服务帐户关联。Vertica 提供以下示例清单:

有关 ClusterRoles 和 ClusterRoleBindings 的更多详细信息,请参阅 Kubernetes 文档

以下步骤创建 ClusterRole 和 ClusterRoleBindings 对象,这些对象授予对非 Kubernetes 资源(例如 Prometheus)的 /metrics 端点的访问权限。由于 RBAC 规则是群集范围的,因此您必须创建 ClusterRoleBinding 或添加到现有 ClusterRoleBinding:

  1. 创建 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" } }]'
      
  2. 创建 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 操作器