指标¶
Seldon Core 暴露了可被 Prometheus 抓取的指标。核心指标通过服务编排(executor)公开。
指标包括:
预估请求¶
从 ingress、API 网关或者 Ambassador 进入服务编排的流量
seldon_api_executor_server_requests_seconds_(bucket,count,sum)-histogram指标类型seldon_api_executor_server_requests_seconds_summary_(count,sum)-summary指标类型
从组件中进入服务编排的流量,如:模型
seldon_api_executor_client_requests_seconds_(bucket,count,sum)-histogram指标类型seldon_api_executor_client_requests_seconds_summary_(count,sum)-summary指标类型
每个指标都包含以下键名,这些对将从正在运行的 SeldonDeployment 部署自定义资源中获取:
service
deployment_name
predictor_name
predictor_version(来自预测元数据标签)
model_name
model_image
model_version
Prometheus 控制器指标¶
安装¶
我们推荐使用 Prometheus Operator 配置 Prometheus。 kube-prometheus 栈配置可以很容易的通过 Bitnami Helm Charts 安装。
kubectl create namespace seldon-monitoring
helm upgrade --install seldon-monitoring kube-prometheus \
--version 6.9.5 \
--set fullnameOverride=seldon-monitoring \
--namespace seldon-monitoring \
--repo https://charts.bitnami.com/bitnami
kubectl rollout status -n seldon-monitoring statefulsets/prometheus-seldon-monitoring-prometheus
以下 pods 应当出现在 seldon-monitoring 空间:
$ kubectl get pods -n seldon-monitoring
NAME READY STATUS RESTARTS AGE
alertmanager-seldon-monitoring-alertmanager-0 2/2 Running 0 51s
prometheus-kube-state-metrics-d97b6b5ff-n5z7w 1/1 Running 0 52s
prometheus-node-exporter-jmffw 1/1 Running 0 52s
prometheus-seldon-monitoring-prometheus-0 2/2 Running 0 51s
seldon-monitoring-operator-6d558f5696-xhq66 1/1 Running 0 52s
配置¶
按照 PodMonitor 资源将指导 Prometheus 抓取由 Seldon Core 管理和创建 pod 的 metrics 端口。
创建 seldon-podmonitor.yaml 文件
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
name: seldon-podmonitor
namespace: seldon-monitoring
spec:
selector:
matchLabels:
app.kubernetes.io/managed-by: seldon-core
podMetricsEndpoints:
- port: metrics
path: /prometheus
namespaceSelector:
any: true
并应用
kubectl apply -f seldon-podmonitor.yaml
验证¶
假设集群中已经存在运行着的 SeldonDeployment 模型,可以通过访问 Prometheus UI 并验证 Prometheus 指标。
将 Prometheus 暴漏到本地
$ kubectl port-forward -n seldon-monitoring svc/seldon-monitoring-prometheus 9090:9090
现在可以在浏览器访问 http://localhost:9090 进入 Prometheus UI。
开始验证 Status -> Targets 信息。
然后,找到 Graph 节点并查询 seldon_api_executor_client_requests_seconds_count。
你可以看到和下面相似的输出(假设 SeldonDeployments 已经收到预估请求)。
自定义指标¶
Seldon Core 通过 Prometheus 节点在服务编排上暴露基础指标如:请求总数,请求时间百分位数和 指标 文档中描述的每个运行模型的滚动精度。 然而,你也想将组件中的自定义指标暴露添加到 Prometheus。 为了实现以上目的,你可提供一些字段用于组件 API 调用返回元数据对象的方式来实现:
{
"meta": {
"metrics": [
{
"type": "COUNTER",
"key": "mycounter",
"value": 1.0,
"tags": {"mytag": "mytagvalue"}
},
{
"type": "GAUGE",
"key": "mygauge",
"value": 22.0
},
{
"type": "TIMER",
"key": "mytimer",
"value": 1.0
}
]
},
"data": {
"ndarray": [
[
1,
2
]
]
}
}
我们提供三种类型的指标,可在元指标列表中返回。
COUNTER : 计数器:单调地增加值。可被添加到任何存在的指标键。
GAUGE : 仪表值:显示一个级别的绝对值,它将覆盖任何现有值。
TIMER : 定时器:时间值(毫秒单位),它将被聚合到 Prometheus’ HISTOGRAM。
除类型外,每个指标都需要一个键值对。proto buffer 定义如下:
message Metric {
enum MetricType {
COUNTER = 0;
GAUGE = 1;
TIMER = 2;
}
string key = 1;
MetricType type = 2;
float value = 3;
map<string,string> tags = 4;
}
指标节点¶
自定义指标直接由 Python 封装暴露。
为了让 Prometheus 从单个 Pod 抓取更多节点数据,我们使用 metrics 名称和端口来暴露 Prometheus 指标:
ports:
- containerPort: 6000
name: metrics
protocol: TCP
这需要我们使用以下条目
- source_labels: [__meta_kubernetes_pod_container_port_name]
action: keep
regex: metrics(-.*)?
在 Prometheus 配置 中结合以下两点一起使用:
prometheus.io/scrape: "true"
prometheus.io/path: "/prometheus"
注意:我们在配置文件中没有使用 prometheus.io/port 注解。
在 Seldon Core 1.1 自定义指标通过服务编排使用单一节点一块暴露给 Prometheus。
那会,由以下三个注解:
prometheus.io/scrape: "true"
prometheus.io/path: "/prometheus"
prometheus.io/port: "8000"
标签¶
当我们通过 Prometheus 暴露指标时,如果添加了 tags,每个指标返回值必须包含他们,否则 Prometheus 会将指标认定为一个新的时间序列,查看官方文档。
在 Seldon Core 1.1 之前编排器强制相同一组的标签使用 micrometer 库来暴露指标。如果违反此条件,则会发生例外情况。
支持的封装¶
当前以下 Seldon Core 封装提供了自定义指标的实现: