本文提供了对所收集日志和指标数据的引用,用于分析 MQTT 中转站的性能和可用性。
指标
指标 | Display name | 计价单位 | 聚合 | 说明 | 维度 |
---|---|---|---|---|---|
MQTT.RequestCount | MQTT:RequestCount | 计数 | 总计 | MQTT 请求数。 | 操作类型、协议、结果、错误 |
MQTT.Throughput | MQTT:吞吐量 | 计数 | 总计 | 发布到命名空间或由命名空间传递的总字节数。 此指标包括 MQTT 客户端发送到 MQTT 中转站的所有 MQTT 数据包,无论其是否成功。 | Direction |
MQTT.ThrottlingEnforcements | MQTT:限制强制实施 | 计数 | 总计 | 命名空间中任何请求被限制的次数。 | ThrottleType |
MQTT.SuccessfulPublishedMessages | MQTT:成功发布的消息数 | 计数 | 总计 | 成功发布到命名空间的 MQTT 消息数。 | 协议、QoS |
MQTT.FailedPublishedMessages | MQTT:发布失败的消息数 | 计数 | 总计 | 无法发布到命名空间的 MQTT 消息数。 | 协议、QoS、错误 |
MQTT.SuccessfulDeliveredMessages | MQTT:成功传递的消息数 | 计数 | 总计 | 命名空间传递的消息数,与来自 MQTT 客户端的确认无关。 此操作没有失败。 | 协议、QoS |
MQTT.SuccessfulSubscriptionOperations | MQTT:成功的订阅操作数 | 计数 | 总计 | 成功的订阅操作(订阅、取消订阅)数。 对于 MQTT 中转站接受的订阅请求中的每个主题筛选器,此指标都会递增。 | 操作类型、协议 |
MQTT.FailedSubscriptionOperations | MQTT:失败的订阅操作数 | 计数 | 总计 | 失败的订阅操作(订阅、取消订阅)数。 对于 MQTT 中转站拒绝的订阅请求中的每个主题筛选器,此指标都会递增。 | 操作类型、协议、错误 |
Mqtt.SuccessfulRoutedMessages | MQTT:成功路由的消息数 | Count | 总计 | 从命名空间成功路由的 MQTT 消息数。 | |
Mqtt.FailedRoutedMessages | MQTT:路由失败的消息数 | Count | 总计 | 未能从命名空间路由的 MQTT 消息数。 | 错误 |
MQTT.Connections | MQTT:活动连接数 | 计数 | 总计 | 命名空间中的活动连接数。 此指标的值为时间点值。 在该时间点之后立即处于活动状态的连接可能不会反映在这些指标中。 | 协议 |
Mqtt.DroppedSessions | MQTT:已删除的会话数 | Count | 总计 | 命名空间中已删除的会话数。 此指标的值为时间点值。 在该时间点之后立即删除的会话可能不会反映在这些指标中。 | DropReason |
注意
每个订阅请求都会递增 MQTT.RequestCount 指标,而订阅请求中的每个主题筛选器都会递增订阅操作指标。 例如,假设使用五个不同的主题筛选器发送某个订阅请求。 其中三个主题筛选器已成功处理,而两个主题筛选器无法处理。 以下列表显示了指标的最终增量:
- MQTT.RequestCount:1
- MQTT.SuccessfulSubscriptionOperations:3
- MQTT.FailedSubscriptionOperations:2
指标维度
维度 | 值 |
---|---|
OperationType | 操作的类型。 可用的值包括: - Publish:从 MQTT 客户端发送到事件网格的 PUBLISH 请求。 - Deliver:从事件网格发送到 MQTT 客户端的 PUBLISH 请求。 - Subscribe:MQTT 客户端的 SUBSCRIBE 请求。 - Unsubscribe:MQTT 客户端的 UNSUBSCRIBE 请求。 - Connect:MQTT 客户端的 CONNECT 请求。 |
协议 | 操作中使用的协议。 可用的值包括: - MQTT3:MQTT v3.1.1 - MQTT5:MQTT v5 - MQTT3-WS:基于 WebSocket 的 MQTT v3.1.1 - MQTT5-WS:基于 WebSocket 的 MQTT v5 |
结果 | 操作结果。 可用的值包括: - 成功 - ClientError - ServiceError |
错误 | 在操作期间发生错误。 MQTT:RequestCount、MQTT:失败的已发布消息、MQTT:失败的订阅操作指标包括: -QuotaExceeded:客户端超出了一个或多个限制,从而导致失败 - AuthenticationError:因任何身份验证问题而失败。 - AuthorizationError:因任何授权问题而失败。 - ClientError:客户端发送了错误的请求,或使用了某个不受支持的功能,因而导致失败。 - ServiceError:意外的服务器错误或服务器操作原因导致失败。 MQTT:失败的路由消息指标的可用值包括: -AuthenticationError:已删除配置为 MQTT 路由消息的目标的自定义主题的 EventGrid 数据发送者角色。 -TopicNotFoundError:已删除配置为接收所有 MQTT 路由消息的自定义主题。 -TooManyRequests:每秒 MQTT 路由消息数超出了目标(命名空间主题或自定义主题)的 MQTT 路由消息数限额。 - ServiceError:意外的服务器错误或服务器操作原因导致失败。 |
ThrottleType | 命名空间中超出的限制的类型。 可用的值包括: - InboundBandwidthPerNamespace - InboundBandwidthPerConnection - IncomingPublishPacketsPerNamespace - IncomingPublishPacketsPerConnection - OutboundPublishPacketsPerNamespace - OutboundPublishPacketsPerConnection - OutboundBandwidthPerNamespace - OutboundBandwidthPerConnection - SubscribeOperationsPerNamespace - SubscribeOperationsPerConnection - ConnectPacketsPerNamespace。 |
QoS | 服务质量级别。 可用值为:0、1。 |
方向 | 操作的方向。 可用值为: - Inbound:到事件网格的入站吞吐量。 - Outbound:来自事件网格的出站吞吐量。 |
DropReason | 删除会话的原因。 可用的值包括: - SessionExpiry:永久性会话已过期。 - TransientSession:非永久性会话已过期。 - SessionOverflow:客户端在会话的生命周期内未连接来接收已排队的 QOS1 消息,直到队列达到其最大限制为止。 - AuthorizationError:会话因任何授权问题而被删除。 |
资源日志
Azure 事件网格中的 MQTT 代理会捕获以下类别的诊断日志:
本部分提供这些日志的架构和示例。
公共属性
以下属性对于来自 MQTT 代理的所有资源日志是通用的。
属性名称 | 类型 | 描述 |
---|---|---|
time |
DateTime |
生成日志的时间戳 (UTC)。 |
resourceId |
String |
事件网格命名空间的资源 ID。 例如:/SUBSCRIPTIONS/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/RESOURCEGROUPS/MYRG/PROVIDERS/MICROSOFT.EVENTGRID/NAMESPACE/MYNAMESPACE 。 |
location |
String |
命名空间的位置 |
operationName |
String |
操作的名称。 例如 Microsoft.EventGrid/topicspaces/connect 、Microsoft.EventGrid/topicspaces/disconnect 、Microsoft.EventGrid/topicspaces/publish 、Microsoft.EventGrid/topicspaces/subscribe 、Microsoft.EventGrid/topicspaces/unsubscribe 。 |
category |
String |
操作的类别或类型。 例如 FailedMQTTConnections 、SuccessfulMQTTConnections 、MQTTDisconnections 、FailedMQTTPublishedMessages 、FailedMQTTSubscriptionOperations 。 |
resultType |
String |
操作结果。 例如:Failed 、Succeeded 。 |
resultSignature |
String |
失败操作的结果。 例如:QuotaExceeded 、ClientAuthenticationError 、AuthorizationError 。 SuccessfulMQTTConnections 等成功事件不包含此属性。 |
resultDescription |
String |
有关失败操作结果的更多说明。 SuccessfulMQTTConnections 等成功事件不包含此属性。 |
AuthenticationAuthority |
String |
用于对 MQTT 客户端进行身份验证的颁发机构类型。 它设置为以下值之一:对于在事件网格的本地注册表中注册的客户端,为 Local ;对于使用 Microsoft Entra 进行身份验证的客户端,则为 AAD 。 |
authenticationType |
String |
客户端使用的身份验证类型。 它设置为以下值之一:CertificateThumbprintMatch 、AccessToken 或 CACertificate 。 |
clientIdentitySource |
String |
客户端标识的源。 如果使用 Microsoft Entra ID 身份验证,则为 JWT 。 |
authenticationAuthority |
String |
客户端标识的颁发机构。 它设置为以下值之一:对于事件网格命名空间的本地注册表中的客户端,为 local ;对于 AAD 客户端,则为 AAD 。 |
clientIdentity |
String |
客户端标识的值。 它是 Microsoft Entra ID 客户端的本地注册表或对象 ID 的名称。 |
失败的 MQTT 连接
对于按客户端列出的每个失败的 MQTT CONNECT
操作,此日志都包含一个条目。 此日志可用于诊断连接问题。
下面是“失败的 MQTT 连接”日志条目示例。
[
{
"time": "2023-11-06T22:45:02.6829930Z",
"resourceId": "/SUBSCRIPTIONS/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/RESOURCEGROUPS/MYRG/PROVIDERS/MICROSOFT.EVENTGRID/NAMESPACE/MYNS",
"location": "chinanorth",
"operationName": "Microsoft.EventGrid/topicspaces/connect",
"category": "FailedMqttConnections",
"resultType": "Failed",
"resultSignature": "AuthenticationError",
"resultDescription": "Client could not be found",
"identity": {
"authenticationType": "CertificateThumbprintMatch",
"clientIdentitySource": "UserName",
"authenticationAuthority": "Local",
"clientIdentity": "testclient-1"
},
"properties": {
"sessionName": "testclient1",
"protocol": "MQTT5",
"traceId": "pwu5p3uuvzbyzpe4vyygij3it4"
}
}
]
下面是属性及其说明。
properties | 类型 | 描述 |
---|---|---|
sessionName |
String |
客户端在 MQTT CONNECT 数据包的 clientId 字段中提供的会话的名称。 |
protocol |
String |
客户端用于连接的协议。 可能的值包括:MQTT3、MQTT3-WS、MQTT5、MQTT5-WS。 |
traceId |
Int |
生成的跟踪 ID。 |
成功的 MQTT 连接
对于按客户端列出的每个成功的 MQTT CONNECT
操作,此日志都包含一个条目。 此日志可用于审核目的。
[
{
"time": "2023-11-07T01:22:05.2804980Z",
"resourceId": "/SUBSCRIPTIONS/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/RESOURCEGROUPS/MYRG/PROVIDERS/MICROSOFT.EVENTGRID/NAMESPACE/MYNS",
"location": "chinanorth",
"operationName": "Microsoft.EventGrid/topicspaces/connect",
"category": "SuccessfulMqttConnections",
"resultType": "Succeeded",
"identity": {
"authenticationType": "CertificateThumbprintMatch",
"clientIdentitySource": "UserName",
"authenticationAuthority": "Local",
"clientIdentity": "client1"
},
"properties": {
"sessionName": "client1",
"protocol": "MQTT5"
}
}
]
下面是属性及其说明。
properties | 类型 | 描述 |
---|---|---|
sessionName |
String |
客户端在 MQTT CONNECT 数据包的 clientId 字段中提供的会话的名称。 |
protocol |
String |
客户端用于连接的协议。 可能的值包括:MQTT3、MQTT3-WS、MQTT5、MQTT5-WS。 |
MQTT 断开连接
对于 MQTT 客户端与事件网格命名空间的每次连接断开,此日志都包含一个条目。 此日志可用于诊断连接问题。
[
{
"time": "2023-11-07T01:29:22.4591610Z",
"resourceId": "/SUBSCRIPTIONS/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/RESOURCEGROUPS/MYRG/PROVIDERS/MICROSOFT.EVENTGRID/NAMESPACE/MYNS",
"location": "chinanorth",
"operationName": "Microsoft.EventGrid/topicspaces/disconnect",
"category": "MqttDisconnections",
"resultType": "Failed",
"resultSignature": "ClientError",
"resultDescription": "Timed out per negotiated Keep Alive",
"identity": {
"clientIdentity": "client1"
},
"properties": {
"sessionName": "client1",
"protocol": "MQTT5"
}
}
]
下面是属性及其说明。
properties | 类型 | 描述 |
---|---|---|
sessionName |
String |
客户端在 MQTT CONNECT 数据包的 clientId 字段中提供的会话的名称。 |
protocol |
String |
客户端用于连接的协议。 可能的值包括:MQTT3、MQTT3-WS、MQTT5、MQTT5-WS。 |
失败的 MQTT 发布消息
对于每个未能发布到事件网格命名空间或未能由其传递的 MQTT 消息,此日志都包含一个条目。 此日志可用于诊断发布问题和消息丢失情况。
[
{
"time": "2023-11-07T01:22:48.2811790Z",
"resourceId": "/SUBSCRIPTIONS/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/RESOURCEGROUPS/MYRG/PROVIDERS/MICROSOFT.EVENTGRID/NAMESPACE/MYNS",
"location": "chinanorth",
"operationName": "Microsoft.EventGrid/topicspaces/publish",
"category": "FailedMqttPublishedMessages",
"resultType": "Failed",
"resultSignature": "AuthorizationError",
"resultDescription": "Topic name 'testtopic/small4.0' does not match any topicspaces",
"identity": { "clientIdentity": "client1" },
"properties": {
"sessionName": "client1",
"protocol": "MQTT5",
"traceId": "ako65yewjjhzbdp3lxny7557fu",
"qos": 1,
"topicName": "testtopic/small4.0",
"operationCount": 1
}
}
]
下面是 EventGridNamespaceFailedMqttPublishedMessages
Log Analytics 表及其说明对应的列。
列名称 | 类型 | 描述 |
---|---|---|
sessionName |
String |
客户端在 MQTT CONNECT 数据包的 clientId 字段中提供的会话的名称。 |
protocol |
String |
客户端用于发布的协议。 可能的值包括:MQTT3、MQTT3-WS、MQTT5、MQTT5-WS。 |
traceId |
Int |
生成的跟踪 ID。 |
qos |
Int |
客户端用于发布的服务的质量。 可能值为 0 或 1。 |
topicName |
String |
客户端用于发布的 MQTT 主题名称。 |
operationCount |
Int |
未能发布到事件网格命名空间或未能由其传递且具有相同的 resultDescription 的 MQTT 消息计数。 |
失败的 MQTT 订阅操作
对于按 MQTT 客户端列出的每个 MQTT 订阅操作,此日志都包含一个条目。 对于相同订阅/取消订阅数据包中具有相同错误的每个主题筛选器,都会添加一个日志条目。 此日志可用于诊断订阅问题和消息丢失情况。
[
{
"time": "2023-11-07T01:22:39.0339970Z",
"resourceId": "/SUBSCRIPTIONS/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/RESOURCEGROUPS/MYRG/PROVIDERS/MICROSOFT.EVENTGRID/NAMESPACE/MYNS",
"location": "chinanorth",
"operationName": "Microsoft.EventGrid/topicspaces/subscribe",
"category": "FailedMqttSubscriptionOperations",
"resultType": "Failed",
"resultSignature": "AuthorizationError",
"resultDescription": "Topic filter 'testtopic/#' does not match any topicspaces",
"identity": { "clientIdentity": "client1" },
"properties": {
"sessionName": "client1",
"protocol": "MQTT5",
"traceId": "gnz3cgqpozg4tbm5anvsvopafi",
"topicFilters": ["testtopic/#"]
}
}
]
下面是 EventGridNamespaceFailedMqttSubscriptions
Log Analytics 表及其说明对应的列。
列名称 | 类型 | 描述 |
---|---|---|
sessionName |
String |
客户端在 MQTT CONNECT 数据包的 clientId 字段中提供的会话的名称。 |
protocol |
String |
客户端用于发布的协议。 可能的值包括:MQTT3、MQTT3-WS、MQTT5、MQTT5-WS。 |
traceId |
Int |
生成的跟踪 ID。 |
topicFilters |
字符串数组 | 相同数据包中具有相同错误的主题名称的列表。 |
后续步骤
请参阅以下文章: