用于发现和诊断的 RESTful API
用于发现和诊断的 MATLAB® Production Server™ RESTful API 由以下 API 组成:
提供有关服务器上部署的 MATLAB 函数的信息的发现服务
健康检查 API,可让您了解服务器是否可以处理请求
服务器度量服务,返回有关客户端请求、服务器执行这些请求所花费的时间和内存以及可选的自定义度量的信息
健康检查和发现服务以 JSON 格式返回响应。度量服务以 Prometheus 度量格式返回数据。
RESTful API 的特点
用于发现和诊断的 MATLAB Production Server RESTful API 使用 HTTP 请求-响应模型与 MATLAB Production Server 进行通信。该模型包括请求方法、响应码、消息头、消息体。用于发现和诊断的 RESTful API 具有以下特点:
HTTP GET 方法是客户端和服务器之间通信的主要模式。
唯一的统一资源标识符 (URI) 标识服务器创建的资源。
由于对服务器的请求使用 GET 方法,因此请求没有消息正文,您不必在请求中设置
Content-Type
标头。响应的消息正文包含特定于请求的信息,例如有关部署到服务器的函数、服务器健康状态或服务器度量的信息。
发现服务
使用发现服务了解您部署到服务器的 MATLAB 函数。发现服务以 JSON 对象的形式返回有关已部署的 MATLAB 函数的信息。该对象是一个多级嵌套结构,在高层次上显示发现模式版本和已部署的存档列表。每个存档都包含有关已部署的 MATLAB 函数及其函数签名的信息。
要使用发现服务,您必须通过设置 main_config
服务器配置文件中的 --enable-discovery
属性在服务器上启用发现服务。
为了在使用发现服务时获取有用的信息,您必须在创建可部署存档时包含一个 JSON 文件,其中包含要部署的 MATLAB 函数的函数签名。有关如何创建可部署存档的信息,请参阅针对 MATLAB Production Server 创建可部署存档。有关创建包含函数签名的 JSON 文件的信息,请参阅 JSON 中的 MATLAB 函数签名。
使用GET Discovery Information调用发现服务。
来自服务器的响应是一个 JSON 对象。
JSON 响应对象
JSON 响应对象包含发现模式的版本号和已部署存档的列表。响应对象包含以下字段:
键 | 值 |
---|---|
discoverySchemaVersion | JSON 字符串,包含发现架构的版本号,格式为 <major#>.<minor#>.<patch#>,其中每个数字都是非负整数 示例值: |
archives | 包含所有已部署存档列表的 JSON 对象 |
存档 JSON 对象
archives
对象包含所有已部署存档的列表。此列表中的每个对象都是一个 JSON 对象,其键是已部署存档的名称,例如 <Name of the CTF archive>
,其值是一个具有以下字段的 JSON 对象:
键 | 值 |
---|---|
archiveSchemaVersion | 表示存档架构版本号的 JSON 字符串 示例: |
archiveUuid | 表示存档唯一标识符的 JSON 字符串 |
matlabRuntimeVersion | 表示 MATLAB Runtime 版本的 JSON 字符串 示例: |
functions | 包含已部署存档中的函数列表的 JSON 对象 |
typedefs | JSON 对象,包含用作已部署函数的输入或输出参量的元胞数组或结构体列表 |
函数 JSON 对象
functions
对象包含嵌套的 JSON 对象列表,其中每个嵌套对象对应已部署存档中的一个 MATLAB 函数。
每个函数对象都以部署的函数名称作为其键,例如 <MATLAB_function_name1>
,并以 JSON 对象作为其值。JSON 对象包含一个 signatures
键,其值是一个 JSON 对象数组,其中包含有关 MATLAB 函数签名的信息。
signatures
数组中的每个对象包含以下字段:
键 | 值 |
---|---|
help | 输入参数名称 示例: |
inputs | 包含输入参量信息的 JSON 对象数组 |
outputs | 包含有关输出参量的信息的 JSON 对象数组 |
inputs
数组中的每个对象包含以下字段:
键 | 值 |
---|---|
name | 输入参数名称 示例: |
mwtype | MATLAB 数据类型 示例: |
mwsize | 数据大小 示例: |
help | 输入参量描述 示例: |
outputs
对象中的每个对象包含以下字段:
键 | 值 |
---|---|
name | 输出参数名称 示例: |
mwtype | MATLAB 数据类型 示例: |
mwsize | 数据大小 示例: |
help | 输出参数说明 示例: |
typedefs JSON 对象
仅当部署的函数包含元胞数组或结构体作为输入或输出参量时,响应才包含 typedefs
对象。
如果部署的函数包含元胞数组作为输入或输出参量,则 typedefs
对象包含嵌套对象,其键是元胞数组的名称,例如 <homogeneous_cell_name>
,相应的值包含一个包含有关元胞数组信息的对象。
<cell_array_name>
对象中的每个对象包含以下字段:
键 | 值 |
---|---|
help | 包含元胞数组描述的 JSON 字符串 示例: |
type | cell |
elements | 描述元胞数组每个元素的 JSON 对象数组 |
elements
中的每个对象包含以下字段:
键 | 值 |
---|---|
name | 元胞元素名称 示例: |
type | 元素的数据类型 示例: |
size | 数组大小 示例: |
help | 元胞元素描述 示例: |
如果部署的函数包含结构体数组作为输入或输出参量,则 typedefs
对象包含嵌套对象,其键是结构体的名称,例如 <struct_name>
,相应的值包含一个具有有关该结构体信息的对象。
<struct_name>
对象中的每个对象包含以下字段:
键 | 值 |
---|---|
help | 包含结构体描述的 JSON 字符串 示例: |
type | struct |
fields | 描述结构体中每个元素的 JSON 对象数组 |
fields
中的每个对象包含以下字段:
名称 | 描述 |
---|---|
name |
示例: |
type | 字段值的数据类型 示例: |
size |
示例: |
help |
示例: |
度量服务
使用度量服务以 Prometheus® 度量格式检索服务器度量。度量服务返回有关客户端应用程序发送到服务器的请求以及服务器执行请求所需的时间和内存的信息。您可以在使用 Kubernetes® 和微服务时使用这些度量来监控服务器。要调用度量服务,请使用GET Metrics。
要使用度量服务,您必须通过设置 main_config
服务器配置文件中的 --enable-metrics
属性来在服务器上启用度量服务。
来自服务器的成功响应由 Prometheus 计数器和计量度量类型中的几个服务器度量组成。有关 Prometheus 度量格式的更多信息,请参阅 Prometheus 属量类型。
# TYPE matlabprodserver_up_time_seconds counter matlabprodserver_up_time_seconds 68140.5 # TYPE matlabprodserver_queue_time_seconds gauge matlabprodserver_queue_time_seconds 0 # TYPE matlabprodserver_cpu_time_seconds counter matlabprodserver_cpu_time_seconds 18.2188 # TYPE matlabprodserver_memory_working_set_bytes gauge matlabprodserver_memory_working_set_bytes 1.57426e+08 # TYPE matlabprodserver_requests_accepted_total counter matlabprodserver_requests_accepted_total 0 # TYPE matlabprodserver_requests_in_queue gauge matlabprodserver_requests_in_queue 0 # TYPE matlabprodserver_requests_processing gauge matlabprodserver_requests_processing 0 # TYPE matlabprodserver_requests_succeeded_total counter matlabprodserver_requests_succeeded_total 0 # TYPE matlabprodserver_requests_failed_total counter matlabprodserver_requests_failed_total 0 # TYPE matlabprodserver_requests_canceled_total counter matlabprodserver_requests_canceled_total 0
错误响应 403 Metrics Disabled
表示服务器上未启用度量服务。
自定义度量
您可以通过添加特定于您的应用程序或请求处理的自定义度量来检测已部署的 MATLAB 代码。在部署的 MATLAB 代码中,您可以使用函数 prodserver.metrics.incrementCounter
(MATLAB Compiler SDK) 和 prodserver.metrics.setGauge
(MATLAB Compiler SDK) 创建自定义 Prometheus 度量。这些函数分别创建 Prometheus 计数器和计量度量类型的度量。
当客户端调用已部署的 MATLAB 函数时,服务器会收集自定义度量。除了默认的服务器度量之外,度量服务的输出还包括自定义度量和创建这些度量的可部署存档的名称。
例如,在您部署到服务器的 MATLAB 函数中包含以下函数会创建名为 test_function_execution_count
和 test_timer_seconds
的自定义度量。
prodserver.metrics.incrementCounter("test_function_execution_count",1); prodserver.metrics.setGauge("test_timer_seconds",0.421147);
在客户端调用已部署的函数后查询度量 API 时,您会看到以下输出:
# TYPE matlabprodserver_up_time_seconds counter matlabprodserver_up_time_seconds 16705.3 # TYPE matlabprodserver_queue_time_seconds gauge matlabprodserver_queue_time_seconds 0 # TYPE matlabprodserver_cpu_time_seconds counter matlabprodserver_cpu_time_seconds 29.1406 # TYPE matlabprodserver_memory_working_set_bytes gauge matlabprodserver_memory_working_set_bytes 5.17153e+08 # TYPE matlabprodserver_requests_accepted_total counter matlabprodserver_requests_accepted_total 7 # TYPE matlabprodserver_requests_in_queue gauge matlabprodserver_requests_in_queue 0 # TYPE matlabprodserver_requests_processing gauge matlabprodserver_requests_processing 0 # TYPE matlabprodserver_requests_succeeded_total counter matlabprodserver_requests_succeeded_total 7 # TYPE matlabprodserver_requests_failed_total counter matlabprodserver_requests_failed_total 0 # TYPE matlabprodserver_requests_canceled_total counter matlabprodserver_requests_canceled_total 0 # TYPE test_function_execution_count counter test_function_execution_count{archive="test_metrics_2"} 1 # TYPE test_timer_seconds gauge test_timer_seconds{archive="test_metrics"} 0.421147
test_function_execution_count
和 test_timer_seconds
自定义度量,以及生成度量的可部署存档的名称 test_metrics
。有关详细示例,请参阅创建自定义 Prometheus 度量。
另请参阅
mps-status
| license-grace-period
| prodserver.metrics.setGauge
(MATLAB Compiler SDK) | prodserver.metrics.incrementCounter
(MATLAB Compiler SDK)