F5 NGINX 的NGINX Ingress Controller 与 Prometheus 操作员ServiceMonitor
CRD 相结合,使得使用 Helm 从 NGINX Ingress Controller 部署收集指标变得更轻松、更快速。 NGINX Ingress Controller helm chart 现在支持立即利用您现有的 Prometheus 和 prometheus-operator 基础架构的能力,允许您部署 NIC 并利用Prometheus ServiceMonitor
获取开箱即用的指标。 本文将引导您了解ServiceMonitor
是什么、如何安装它以及如何使用 NGINX Ingress Controller helm chart 来定义这些特定设置。
Prometheus ServiceMonitor 自定义资源定义 (CRD) 允许您以声明方式定义如何监控一组动态服务。 使用 Kubernetes 标签选择器定义监控的服务。 这使得组织可以引入管理如何公开指标的约定。 按照这些约定,新的服务会被自动发现,并且 Prometheus 会开始收集指标,而无需重新配置系统。 ServiceMonitor
是 Prometheus Operator 的一部分。 这些资源描述和管理Prometheus要抓取的监控目标。 Prometheus 资源使用ServiceMonitor Selector
字段连接到ServiceMonitor
。 Prometheus 可以轻松识别已被标记为抓取的目标。 这使您可以更好地控制并灵活地利用 Kubernetes 集群中的ServiceMonitor
资源来监控 NGINX Ingress Controller 等解决方案。 为了让事情变得更简单,并为 NGINX Ingress Controller 提供开箱即用的指标,我们最近在我们的 Helm Chart 中添加了使用Prometheus ServiceMonitor 的
功能。 这样,在部署 NGINX Ingress Controller 后,就可以很容易地启用 Prometheus 的指标并开始抓取。 要使用此功能,我们需要添加第二个专门为指标收集而创建的服务, ServiceMonitor
将“附加”到该服务。 这将告诉 Prometheus 操作员应该监控什么服务(使用元数据中的标签),以便它知道要抓取什么和在哪里抓取。 作为部署或 helm 文件的一部分,NGINX Ingress Controller 服务的示例如下:
api版本:v1
种类: 服务
元数据:
名称:nginx-ingress-servicemonitor
标签:
应用程序:nginx-ingress-servicemonitor
规格:
端口:
- 名称:prometheus
协议: TCP
端口: 9113
目标端口: 9113
选择器:
应用程序:nginx-ingress
以上将成为部署的一部分。 标签 app: nginx-ingress-servicemonitor
“连接”到serviceMonitor
以进行 Prometheus 指标抓取。 下面是一个示例serviceMonitor
,它将链接到上面名为nginx-ingress-servicemonitor 的
服务:
api版本:monitoring.coreos.com/v1
种类: ServiceMonitor
元数据:
名称:nginx-ingress-servicemonitor
标签:
应用程序:nginx-ingress-servicemonitor
规格:
选择器:
匹配标签:
应用程序:nginx-ingress-servicemonitor
端点:
-端口:prometheus
需要创建一个 Prometheus 资源,该资源配置为查找serviceMonitor
资源,以便 Prometheus 快速轻松地知道要抓取哪些端点的指标。 在下面的示例中,该资源告诉 Prometheus 根据规范要监控哪些项目。 下面,我们正在监控spec.serviceMonitorSelector.matchLabels:
。 我们可以看到 Prometheus 正在任意命名空间中寻找与app.nginx-ingress-servicemonitor
匹配的标签。 这与 NGINX Ingress Controller helm charts 和 Helm 将部署的serviceMonitor
资源匹配。
api版本:monitoring.coreos.com/v1
种类: Prometheus
元数据:
名称:prometheus
标签:
prometheus:prometheus
规格:
副本: 1
serviceAccountName:prometheus
serviceMonitorNamespaceSelector:{}
serviceMonitorSelector:
matchLabels:
app:nginx-ingress-servicemonitor
资源:
请求:
内存: 500英里
下面是连接各个部分的图表: 图 1:服务-监控对象关系
我们将使用prometheus-community/kube-prometheus-stack
来安装完整的部署。 这将安装 prometheus、prometheus-operator 和 Grafana。 我们还将指定将其安装在监控命名空间中以进行隔离。 以下是我们使用 helm 安装的方法: helm install metrics01 prometheus-community/kube-prometheus-stack -n surveillance --create-namespace
一旦 Prometheus 和 Prometheus CRD 安装到集群中,我们就可以创建我们的 Prometheus 资源。 通过提前部署,我们可以用我们将在 Helm Chart 中使用的标签来“预先确定”我们的 Prometheus 设置。 通过这种方法,我们可以自动让 Prometheus 开始寻找 NGINX Ingress Controller 并抓取指标。 我们的 Prometheus 资源将在安装 NGINX Ingress Controller 之前部署。 这将允许prometheus-operator
在部署后自动拾取并抓取我们的 NGINX Ingress 控制器,快速提供指标。
api版本:monitoring.coreos.com/v1
种类: Prometheus
元数据:
名称:prometheus
命名空间:默认
标签:
prometheus:监控
规格:
副本: 1
serviceAccountName:prometheus
serviceMonitorNamespaceSelector:{}
serviceMonitorSelector:
matchLabels:
app:nginx-ingress-servicemonitor
资源:
请求:
内存: 500英里
我们上面的例子是一个基本的例子。 关键部分是我们指定的spec.serviceMonitorSelector.matchLabels
值。 这个值就是我们使用 Helm Chart 部署 NGINX Ingress 控制器时要使用的。 我们希望提供开箱即用的 Prometheus 指标。 为此,我们将使用 NGINX Ingress Controller helm chart。
values.yaml
更改我们可以查看 Helm Chart 的values.yaml
文件。 我们要重点关注 Prometheus 部分,因为它包含启用 Prometheus、创建所需服务和创建serviceMonitor
资源所需的部分。 在 Prometheus 部分下,我们应该看到几个设置: prometheus.service prometheus.serviceMonitor
我们将启用上述两个设置,以便在使用 helm chart 时生成所需的服务和 serviceMonitor。 下面是我们启用服务、启用serviceMonitor
并在serviceMonitor
部分中定义标签的具体部分:
`servicemonitor` 支持最近已添加到 NGINX Ingress 控制器 helm chart 中。
prometheus:
## 以 Prometheus 格式公开 NGINX 或 NGINX Plus 指标。
create: true
## 配置端口以抓取指标。
port: 9113
secret: ""
## 配置使用的 HTTP 方案。
scheme: http
service:
## 需要 prometheus.create=true
create: true
serviceMonitor:
create: true
labels: { app: nginx-ingress-servicemonitor }
从上面分解出值:
prometheus:
## 以 Prometheus 格式公开 NGINX 或 NGINX Plus 指标。
create: true
告诉 Helm 您想要启用 NIC Prometheus 端点。 如果需要,您还可以定义端口、方案和机密。 通过将prometheus.service.create
的值设置为 true,Helm 将自动创建 NIC ServiceMonitor 服务。
service:
## 创建 ClusterIP 服务以在内部公开 Prometheus 指标
## 需要 prometheus.create=true
create: true
最后,我们需要创建serviceMonitor
。 将其设置为 true 并添加正确的标签将创建并添加与我们的 Prometheus 资源匹配的标签。
serviceMonitor:
## 创建 serviceMonitor 以公开 kubernetes pod 的统计信息。
create:true
## 要附加到 serviceMonitor 对象的 Kubernetes 对象标签。
labels:{app:nginx-ingress-servicemonitor}
标签链接回服务的名称。labels: { app: nginx-ingress-servicemointor }
总结。 启用 Prometheus,这将公开 NIC 的 Prometheus 导出器功能。定义一个服务对象,这是 Prometheus ServiceMonitor 发现 NIC Prometheus 导出器端点的方式。 定义一个 serviceMonitor 对象。 这告诉 Prometheus ServiceMonitor 监控这个事物。
helm
安装 NGINX Ingress Controller。修改完values.yaml
后,我们就可以继续安装 NGINX Ingress 控制器。helm install nic01 -n nginx-ingress --create-namespace -f values.yaml。
部署 NGINX Ingress Controller 后,我们可以打开 Prometheus 仪表板并导航到状态菜单。 从那里我们可以导航到目标和服务发现视图。 一旦 Prometheus 找到我们的新 ServiceMonitor 资源,它将开始抓取端点并收集指标,这些指标会立即被 Prometheus 仪表板获取。
图 2: Prometheus 服务发现
图 3: Prometheus 目标
图4: Prometheus NGINX 查询
我们可以看到,使用 helm 和 Prometheus 等原生 Kubernetes 工具,NGINX Ingress Controller 可以使在部署开始时收集指标变得更加容易,提供“开箱即用的指标”。 以下是安装prometheus-operator 的参考文档: https://prometheus-operator.dev/ https://github.com/prometheus-operator/prometheus-operator
“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”