日志收集
MLService 支持对 predictor 和 transformer 服务进行日志收集,包括接收到的 request 和返回的 response 消息。开启日志收集后,系统会为 MLService 添加日志发送能力,其根据配置的接收 URL,将日志发送到 URL 指定的服务。
设置 MLService
用户可以为每个 predictor 和 transformer 设置日志收集功能:
- predictor: MLService 的
spec.releases[*].predictor.logger
字段来启用 predictor 的日志收集功能。 - transformer:通过设置 MLService 的
spec.transformer.logger
字段启用 transformer 的日志收集功能。
用户可以通过日志收集的下列字段,来设置日志收集配置:
urls
:url 数组,系统会将收集到的日志发送到 url 对应的服务。mode
:表示对哪些内容进行收集记录。可选值是 all, response, request,默认值是 all。- all:requests 和 response 都会被收集记录。
- response:只记录收集 response。
- request:只记录收集 requests。
接收日志
日志数据通过 HTTP 协议被发送(HTTP POST)到用户提供的 URL。
日志数据格式是 CloudEvent,如下例所示:
Context Attributes,
specversion: 1.0
type: tensorstack.dev.mlservice.response
source: torch-mnist-logger-predict-origin
id: 0009174a-24a8-4603-b098-09c8799950e9
time: 2021-04-10T00:23:26.080736102Z
datacontenttype: application/json
Extensions,
component: predict
inferenceurl: /v1/models/mnist
mlservicename: torch-mnist-logger
namespace: example
traceparent: 00-6d69e2d3917689ee301610780af06de8-be01c3cfdf8e446e-00
Data,
{
"0": 1.0,
"2": 1.3369853835154544e-10,
"6": 7.10219507987428e-14,
"5": 5.859705488843112e-14,
"9": 3.2580891499658536e-15
}
在上述示例中:
type
:表明当前 CloudEvent 数据记录 response 内容。source
:release 名称是 origin(source 命名规则是<mlservice-name>-<component>-<release-name>
)component
:组件是 predictinferenceurl
:URL path 是/v1/models/mnist
mlservicename
:MLService 的名称是 torch-mnist-loggernamespace
:MLService 所在的 namespace 是 exampleData
:MLService 向用户返回的 response 内容是 {“0”: 1.0,“2”: 1.3369…}
在 HTTP Request 中:
- CloudEvent 的 Data 内容存在 Request Body 中
- CloudEvent 的其他内容存在 Request Header 中
可使用 CloudEvent 库来实现接收日志数据的 HTTP Server,具体实现可参考 CloudEvent Sample。
示例
部署日志接收服务
我们在集群内部署 event-display 服务来接受日志,注意:
- event-display 仅简单地将接收到的 CloudEvents 打印出来;
- event-display 作为演示的目的。
event-display.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: event-display
spec:
replicas: 1
selector:
matchLabels:
app: event-display
template:
metadata:
labels:
app: event-display
spec:
containers:
- name: event-display
image: t9kpublic/knative_event_display:1.0.0
resources:
limits:
cpu: 100m
memory: 100Mi
---
kind: Service
apiVersion: v1
metadata:
name: event-display
spec:
selector:
app: event-display
ports:
- protocol: TCP
port: 80
targetPort: 8080
部署命令
kubectl create -f event-display.yaml
部署 MLService
请按照使用方法准备环境,基于部署用于生产环境的模型推理服务示例来部署 MLService logger-example。
首先将 mlservice.yaml 修改为下列内容,注意:
- event-display 和 MLService 需要部署在同一个 namespace/project 中。
- 这个 MLService 仅对 predictor 设置了 logger 服务。
mlservice.yaml
apiVersion: tensorstack.dev/v1beta1
kind: MLService
metadata:
name: logger-example
spec:
default: origin
releases:
- name: origin
predictor:
logger:
mode: all
resources:
limits:
cpu: "1"
memory: 2Gi
requests:
cpu: "0.5"
memory: 1Gi
urls:
- http://event-display
minReplicas: 1
model:
parameters:
"MODEL_PATH": "mnist=model.mar"
runtime: t9k-torchserve
modelUri: pvc://tutorial/tutorial-examples/deployment/mlservice/torch-pvc/
containersResources:
- name: user-container
resources:
limits:
cpu: "500m"
memory: 1Gi
然后按照 README 文档的操作步骤进行操作。
查看日志
查看 event-display 容器的日志,可看到日志中打印的 CloudEvent 记录了预测请求的详细信息:
terminal.log
$ k get pod -l app=event-display
NAME READY STATUS RESTARTS AGE
event-display-7d8d9f97db-lpgg2 1/1 Running 0 14m
$ k logs event-display-7d8d9f97db-lpgg2
Context Attributes,
specversion: 1.0
type: tensorstack.dev.mlservice.request
source: logger-example-predict-origin
id: ff726d6b-7fd8-471e-9ddc-de03b201d882
time: 2024-02-29T08:07:00.849119273Z
Extensions,
component: predict
inferenceurl: /v1/models/mnist:predict
mlservicename: logger-example
namespace: demo
Data,
PNG
IHDWfHIDATxc`X`ˬUvo>C0$ůشi˿_{ ZATI̶_Q%̓*y_:=U9;4ɺpJ^{oG8NIx$!K.w;@@4^0
G$Qp֛q?{4g^B
<`Rr330
ztB?IENDB`
☁️ cloudevents.Event
Context Attributes,
specversion: 1.0
type: tensorstack.dev.mlservice.response
source: logger-example-predict-origin
id: ff726d6b-7fd8-471e-9ddc-de03b201d882
time: 2024-02-29T08:07:01.468872477Z
Extensions,
component: predict
inferenceurl: /v1/models/mnist:predict
mlservicename: logger-example
namespace: demo
Data,
{
"0": 1.0,
"2": 1.3369905182969433e-10,
"6": 7.102208632401436e-14,
"5": 5.859716330864836e-14,
"9": 3.2580891499658536e-15
}
参考
- API 参考:MLService
- CloudEvents
- event display 源码