本节介绍了 NSX Advanced Load Balancer 与 Prometheus 的集成,以及如何对 Prometheus 抓取请求进行身份验证。
Prometheus 是一个开源系统监控和警示工具包,于 2016 年加入了云原生计算基金会 (CNCF)。与其他常见的监控解决方案不同,Prometheus 衡量指标收集使用 HTTP 的提取方法。有关 Prometheus 的详细信息,请参见 Prometheus 主页。
Prometheus API 规范
NSX Advanced Load Balancer 控制器 提供了第一类 REST API,用于为以下项提取衡量指标(Prometheus 可以载入的格式的数据):
控制器集群
虚拟服务
服务引擎
池
用于获取 Prometheus 衡量指标的 GET API
用于获取 Prometheus 衡量指标的 GET API 如下:
GET /api/analytics/prometheus-metrics/{entity_type}/?{query_params}
在这里,entity_type 是控制器、虚拟服务、服务引擎或池。
有效的查询参数如下:
- entity_id
-
根据实体类型,它可以是控制器节点 ID、池 UUID、服务引擎 UUID、虚拟服务 UUID 的逗号分隔列表。
- entity_name
-
根据 entity_type,entity_name 是有效池、虚拟服务或服务引擎对象名称的逗号分隔列表。
- metric_id
-
以逗号分隔的有效衡量指标 ID 列表默认为所有可能的衡量指标 ID,除非实时参数为 true,此时将返回衡量指标的子集。使用 API GET/api/analytics/metric_id 查找有效的衡量指标 ID。此处提供了完整的衡量指标集。
- tenant
-
以逗号分隔的租户名称列表,默认设置为 admin。
- description
-
在每个衡量指标之前附加一行描述作为注释。默认情况下,此参数设置为 false。
- realtime
-
以 5 秒平均值检索实体衡量指标,需要在对象上启用实时衡量指标。默认情况下,此参数设置为 false。
将此 API 与 Prometheus 结合使用
Prometheus 使用利用 HTTP 进行衡量指标收集的提取方法。用户提供 HTTP 端点以从中提取数据以及其他参数,如抓取时间间隔、其他查询参数、端口、授权详细信息等。
Prometheus 提供了两种授权 HTTP 抓取请求的方法:
基本授权
持有者令牌/持有者令牌文件
从控制器公开为 API 的 Prometheus 端点需要身份验证,这与所有其他现有控制器 API 类似。NSX Advanced Load Balancer 提供了两种对控制器的 Prometheus 抓取请求进行身份验证的方法:
为控制器 API 设置基本身份验证:
可以将从客户端到 NSX Advanced Load Balancer 控制器 的 API 调用设置为使用基本身份验证作为控制器 API 的身份验证机制。要了解如何在控制器上启用基本身份验证,请参见《VMware NSX Advanced Load Balancer 配置指南》中的 HTTP API 查询基本身份验证主题。
使用 scrape_config 下的 basic_auth 参数为
prometheus.yml
文件中的 prometheus 抓取请求设置基本身份验证。下面显示了一个使用启用了basic_auth
的控制器设置的prometheus.yml
作业配置示例。job_name: 'avi_vs' scrape_interval: 60s metrics_path: '/api/analytics/prometheus-metrics/virtualservice' params: entity_name: ['prod-vs1,prod-vs2'] tenant: ['admin,tenant1'] scheme: 'https' tls_config: insecure_skip_verify: true basic_auth: username: '[username]' password: '[password]' static_configs: - targets: ['[avi_controller_cluster]']
注:Prometheus 允许用户在 tls_config 参数下传递 TLS 配置的 CA 文件路径、客户端证书和密钥文件。在示例配置中,已使用
insecure_skip_verify
跳过证书检查。
使用 avi-api-proxy:
avi-api-proxy 是一个基于 NSX Advanced Load Balancer 的 SDK 构建的 Docker 化代理容器,它负责处理 NSX Advanced Load Balancer 控制器 的 API 服务器的身份验证和会话管理。对 avi-api-proxy 的所有 HTTP REST API 调用(GET、POST、PUT、DELETE)都将使用有效的授权标头和 Cookie 转发到控制器 API 服务器。控制器的响应将返回到请求客户端应用程序,在本例中为 Prometheus 设置。
下面显示了一个使用
avi-api-proxy
的prometheus.yml
作业配置示例。- job_name: 'avi_vs' scrape_interval: 60s metrics_path: '/api/analytics/prometheus-metrics/virtualservice' scheme: 'http' params: entity_name: ['prod-vs1,prod-vs2'] tenant: ['admin,tenant1'] static_configs: - targets: ['127.0.0.1:8080']
avi-api-proxy
启动并运行后,不会向 Prometheus 配置文件提供 API 身份验证详细信息(请参阅使用avi-api-proxy
的prometheus.yml
作业配置示例)。NSX Advanced Load Balancer 控制器 API 服务器的身份验证完全由avi-api-proxy
管理。注:此处指定的抓取请求目标是运行
avi-api-proxy
的地址和端口。在提供的示例中,avi-api-proxy
在与 Prometheus 设置相同的网络命名空间上和端口8080
上运行,因此目标为127.0.0.1:8080
。
有关更多信息,请参见 avi-api-proxy Docker 容器。
容器需要 NSX Advanced Load Balancer 控制器 集群地址、用户名和密码才能启动。
使用参数筛选衡量指标
可使用以下任一方法在 prometheus 配置 yaml 中添加 API 端点的查询参数:
metrics_pathfield:例如,可以使用查询参数指定 metrics_path,如下所示:
/api/analytics/prometheus-metrics/pool/?tenant=admin,default&metric_id=l4_server.avg_bandwidth,l4_server.avg_connections_dropped
params key:以键值 yaml 格式提供的查询参数的更具可读性的替代方法。
要最大限度缩短 API 的响应时间,建议使用提供的筛选器。如果未提供参数,API 将获取属于管理员租户的所有实体对象的数据,其中包含所有衡量指标 ID,不包含描述字符串。
下面显示了一个 Prometheus 作业配置示例,说明如何使用查询参数。以下作业配置提取管理员和默认租户命名空间中所有池对象的 l4_server.avg_bandwidth
和 l4_server.avg_connections_dropped
衡量指标,衡量指标数据前面有一个衡量指标描述行。
- job_name: 'avi_pool' scrape_interval: 60s metrics_path: '/api/analytics/prometheus-metrics/pool' scheme: 'http' params: tenant: ['admin,default'] metric_id: ['l4_server.avg_bandwidth,l4_server.avg_connections_dropped'] description: 'true' static_configs: - targets: ['127.0.0.1:8080']
此外,要获取管理员和默认租户中特定池对象的衡量指标,请使用 entity_name 或 entity_id 参数,如下所示:
params: entity_name: ['vs1-pool1,vs1-pool2,vs2-pool1'] tenant: ['admin,default'] metric_id: ['l4_server.avg_bandwidth,l4_server.avg_connections_dropped'] description: 'true'
NSX Advanced Load Balancer 提供了一组与虚拟服务、池和 SE 对象相关的全面衡量指标。当此类对象数量很大时,NSX Advanced Load Balancer 控制器 可能需要一些时间才能计算分析数据并返回响应。设置较低的 scrape_interval 值可能会导致 API 超时。在这种情况下,请使用筛选器参数获取相关数据,并在 Prometheus 配置 yaml 中将 scrape_interval 值设置为最小值 60 秒。
代理的优势
将系统设置更改为允许基本身份验证后,将启用所有控制器 API 上的基本身份验证。在某些情况下,这可能不是预期行为。应用程序通过标准 HTTP REST 协议与代理通信,与 NSX Advanced Load Balancer 控制器 提供的协议相似。代理与 NSX Advanced Load Balancer 的 GO SDK 集成,以提供基于 Cookie 的身份验证和会话管理。代理是使用 NSX Advanced Load Balancer 控制器 凭据和运行代理的任何应用程序(最好在同一网络命名空间中)实例化的,并且应该能够通过 avi-api-proxy
与 NSX Advanced Load Balancer 控制器 进行通信。
代理具有以下优势:
会话管理 - 代理使用 NSX Advanced Load Balancer 的 GO SDK 来管理会话 Cookie、设置身份验证标头、刷新令牌,以及重用 TLS 连接以减少 TLS 握手。
重试请求 - 如果出现服务器错误,SDK 会尝试重试失败的请求。
易于使用 - 无需更改系统设置。
avi-api-proxy
与应用程序(在本例中为 Prometheus)之间的连接是一个打开的连接。因此,建议在与应用程序相同的网络命名空间中运行 avi-api-proxy
,以便通过 localhost 进行通信。