如何将Nuclio函数指标接入Prometheus Operator?
Nuclio指标接入Prometheus Operator配置指南
1. 确认Nuclio metrics端口暴露状态
你已经在ConfigMap里配置了prometheusPull sink,端口为8090,先检查Nuclio组件是否已正确暴露该端口:
- 查看Nuclio控制器Pod的端口配置:
kubectl get pods -n nuclio -l app=nuclio-controller -o jsonpath='{.items[*].spec.containers[*].ports}' - 查看单个Nuclio函数Pod的端口配置(替换
<function-pod-name>为实际Pod名称):kubectl get pod <function-pod-name> -n nuclio -o jsonpath='{.spec.containers[*].ports}'
确保输出结果中包含8090端口的声明。
2. 创建Nuclio metrics服务(无现成服务时)
如果Nuclio控制器或函数没有对应Service暴露metrics端口,需要手动创建:
Nuclio控制器metrics Service
apiVersion: v1 kind: Service metadata: name: nuclio-controller-metrics namespace: nuclio labels: app: nuclio-controller spec: selector: app: nuclio-controller ports: - name: metrics port: 8090 targetPort: 8090
Nuclio函数批量metrics Service
若需统一监控所有Nuclio函数,可创建匹配所有函数的Service:
apiVersion: v1 kind: Service metadata: name: nuclio-functions-metrics namespace: nuclio labels: app: nuclio-function spec: selector: nuclio.io/function: "true" # 匹配Nuclio函数默认标签,可根据实际调整 ports: - name: metrics port: 8090 targetPort: 8090
执行命令应用Service:
kubectl apply -f <service文件名> -n nuclio
3. 创建ServiceMonitor资源(Prometheus Operator发现规则)
Prometheus Operator通过ServiceMonitor CRD识别metrics目标,需在monitoring命名空间创建(或确保Prometheus配置了跨命名空间发现):
Nuclio控制器ServiceMonitor
apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: nuclio-controller-monitor namespace: monitoring labels: release: kube-prometheus-stack # 需与kube-prometheus-stack的release名称一致 spec: namespaceSelector: matchNames: - nuclio selector: matchLabels: app: nuclio-controller # 与控制器Service的标签匹配 endpoints: - port: metrics path: /metrics interval: 30s
Nuclio函数ServiceMonitor
apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: nuclio-functions-monitor namespace: monitoring labels: release: kube-prometheus-stack spec: namespaceSelector: matchNames: - nuclio selector: matchLabels: app: nuclio-function # 与函数Service的标签匹配 endpoints: - port: metrics path: /metrics interval: 30s
执行命令应用ServiceMonitor:
kubectl apply -f <servicemonitor文件名> -n monitoring
4. 验证配置有效性
- 端口转发访问Prometheus UI:
kubectl port-forward svc/kube-prometheus-stack-prometheus 9090:9090 -n monitoring - 在Prometheus UI的「Status」→「Targets」页面,搜索
nuclio,查看对应target是否显示为UP状态。
常见问题排查
- 若目标未出现,检查
ServiceMonitor的release标签是否与kube-prometheus-stack的release名一致(用helm list -n monitoring查看) - 测试Nuclio Pod的metrics端口是否可访问:
若能返回metrics数据,说明问题出在Service或ServiceMonitor配置kubectl port-forward <nuclio-pod-name> 8090:8090 -n nuclio curl http://localhost:8090/metrics - 查看Prometheus日志排查抓取错误:
kubectl logs -n monitoring -l app=prometheus -c prometheus
内容的提问来源于stack exchange,提问作者Mulu
相关产品推荐
相关产品推荐

