5.13. 使用 Prometheus 配置内置监控
本指南描述了 Operator SDK 使用 Prometheus Operator 提供的内置监控支持,以及使用基于 Go 和 Ansible 的 Operator 作者的详细信息。
5.13.1. Prometheus Operator 支持 复制链接链接已复制到粘贴板!
Prometheus 是一个开源系统监视和警报工具包。Prometheus Operator 会创建、配置和管理在基于 Kubernetes 的集群(如 OpenShift Container Platform)中运行的 Prometheus 集群。
默认情况下,Operator SDK 中包括帮助函数,用于在任何生成的 Go-based Operator 中自动设置指标,以便在部署了 Prometheus Operator 的集群上使用。
5.13.2. 为基于 Go 的 Operator 公开自定义指标 复制链接链接已复制到粘贴板!
作为 Operator 作者,您可以使用 controller-runtime/pkg/metrics 库中的全局 Prometheus registry 发布自定义指标。
先决条件
- 使用 Operator SDK 生成基于 Go 的 Operator
- Prometheus Operator,默认部署在 OpenShift Container Platform 集群中
流程
在 Operator SDK 项目中,取消注释
config/default/kustomization.yaml文件中的以下行:../prometheus
../prometheusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建自定义控制器类,以便从 Operator 发布其他指标。以下示例将
widgets和widgetFailures收集器声明为全局变量,然后将它们注册到控制器的软件包中的init()函数:例 5.18.
controllers/memcached_controller_test_metrics.go文件Copy to Clipboard Copied! Toggle word wrap Toggle overflow 记录这些收集器来自
main控制器类中协调循环的任何部分,这决定了指标的业务逻辑:例 5.19.
controllers/memcached_controller.go文件Copy to Clipboard Copied! Toggle word wrap Toggle overflow 构建和推送 Operator:
make docker-build docker-push IMG=<registry>/<user>/<image_name>:<tag>
$ make docker-build docker-push IMG=<registry>/<user>/<image_name>:<tag>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 部署 Operator:
make deploy IMG=<registry>/<user>/<image_name>:<tag>
$ make deploy IMG=<registry>/<user>/<image_name>:<tag>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建角色和角色绑定定义,以允许 OpenShift Container Platform 集群的 Prometheus 实例提取 Operator 的服务监控。
必须分配角色,以便服务帐户具有提取命名空间指标的权限:
例 5.20.
config/prometheus/role.yaml角色Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 5.21.
config/prometheus/rolebinding.yaml角色绑定Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为部署的 Operator 应用角色和绑定:
oc apply -f config/prometheus/role.yaml
$ oc apply -f config/prometheus/role.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc apply -f config/prometheus/rolebinding.yaml
$ oc apply -f config/prometheus/rolebinding.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为您要提取的命名空间设置标签,为该命名空间启用 OpenShift 集群监控:
oc label namespace <operator_namespace> openshift.io/cluster-monitoring="true"
$ oc label namespace <operator_namespace> openshift.io/cluster-monitoring="true"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
-
查询并查看 OpenShift Container Platform Web 控制台中的指标。您可以使用自定义控制器类中设置的名称,如
widgets_total和widget_failures_total。
5.13.3. 为基于 Ansible 的 Operator 公开自定义指标 复制链接链接已复制到粘贴板!
作为创建基于 Ansible 的 Operator 的 Operator 作者,您可以使用 Operator SDK 的 osdk_metrics 模块来公开自定义 Operator 和 Operand 指标、发出事件和支持日志记录。
先决条件
- 使用 Operator SDK 生成的基于 Ansible 的 Operator
- Prometheus Operator,默认部署在 OpenShift Container Platform 集群中
流程
生成基于 Ansible 的 Operator。这个示例使用
testmetrics.com域:operator-sdk init \ --plugins=ansible \ --domain=testmetrics.com$ operator-sdk init \ --plugins=ansible \ --domain=testmetrics.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
metricsAPI。这个示例使用名为Testmetrics的kind:operator-sdk create api \ --group metrics \ --version v1 \ --kind Testmetrics \ --generate-role$ operator-sdk create api \ --group metrics \ --version v1 \ --kind Testmetrics \ --generate-roleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑
roles/testmetrics/tasks/main.yml文件,并使用osdk_metrics模块为 Operator 项目创建自定义指标:例 5.22.
roles/testmetrics/tasks/main.yml文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在集群上运行 Operator。例如,使用 "run 作为部署" 方法:
构建 Operator 镜像并将其推送到 registry:
make docker-build docker-push IMG=<registry>/<user>/<image_name>:<tag>
$ make docker-build docker-push IMG=<registry>/<user>/<image_name>:<tag>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在集群上安装 Operator:
make install
$ make installCopy to Clipboard Copied! Toggle word wrap Toggle overflow 部署 Operator:
make deploy IMG=<registry>/<user>/<image_name>:<tag>
$ make deploy IMG=<registry>/<user>/<image_name>:<tag>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建
Testmetrics自定义资源(CR):定义 CR spec:
例 5.23.
config/samples/metrics_v1_testmetrics.yaml文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建对象:
oc create -f config/samples/metrics_v1_testmetrics.yaml
$ oc create -f config/samples/metrics_v1_testmetrics.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
获取 pod 详情:
oc get pods
$ oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE ansiblemetrics-controller-manager-<id> 2/2 Running 0 149m testmetrics-sample-memcached-<id> 1/1 Running 0 147m
NAME READY STATUS RESTARTS AGE ansiblemetrics-controller-manager-<id> 2/2 Running 0 149m testmetrics-sample-memcached-<id> 1/1 Running 0 147mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 获取端点详情:
oc get ep
$ oc get epCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME ENDPOINTS AGE ansiblemetrics-controller-manager-metrics-service 10.129.2.70:8443 150m
NAME ENDPOINTS AGE ansiblemetrics-controller-manager-metrics-service 10.129.2.70:8443 150mCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请求自定义指标令牌:
token=`oc create token prometheus-k8s -n openshift-monitoring`
$ token=`oc create token prometheus-k8s -n openshift-monitoring`Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查指标值:
检查
my_counter_metric值:oc exec ansiblemetrics-controller-manager-<id> -- curl -k -H "Authoriza
$ oc exec ansiblemetrics-controller-manager-<id> -- curl -k -H "Authoriza tion: Bearer $token" 'https://10.129.2.70:8443/metrics' | grep my_counterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
HELP my_counter_metric Add 3.14 to the counter TYPE my_counter_metric counter my_counter_metric 2
HELP my_counter_metric Add 3.14 to the counter TYPE my_counter_metric counter my_counter_metric 2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查
my_gauge_metric值:oc exec ansiblemetrics-controller-manager-<id> -- curl -k -H "Authoriza
$ oc exec ansiblemetrics-controller-manager-<id> -- curl -k -H "Authoriza tion: Bearer $token" 'https://10.129.2.70:8443/metrics' | grep gaugeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
HELP my_gauge_metric Create my gauge and set it to 2.
HELP my_gauge_metric Create my gauge and set it to 2.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查
my_histogram_metric和my_summary_metric值:oc exec ansiblemetrics-controller-manager-<id> -- curl -k -H "Authoriza
$ oc exec ansiblemetrics-controller-manager-<id> -- curl -k -H "Authoriza tion: Bearer $token" 'https://10.129.2.70:8443/metrics' | grep ObserveCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
HELP my_histogram_metric Observe my histogram HELP my_summary_metric Observe my summary
HELP my_histogram_metric Observe my histogram HELP my_summary_metric Observe my summaryCopy to Clipboard Copied! Toggle word wrap Toggle overflow