监视 Azure 事件网格的 MQTT 中转站功能的数据参考

本文提供了对所收集日志和指标数据的引用,用于分析 MQTT 中转站的性能和可用性。

Metrics

指标 显示名称 单位 集合体 Description 尺寸
MQTT.RequestCount MQTT:RequestCount 计数 Total MQTT 请求数。 操作类型、协议、结果、错误
MQTT.Throughput MQTT:吞吐量 计数 Total 发布到命名空间或由命名空间传递的总字节数。 此指标包括 MQTT 客户端发送到 MQTT 中转站的所有 MQTT 数据包,无论其是否成功。 方向
MQTT.ThrottlingEnforcements MQTT:限制强制实施 计数 Total 命名空间中任何请求被限制的次数。 ThrottleType
MQTT.SuccessfulPublishedMessages MQTT:成功发布的消息数 计数 Total 成功发布到命名空间的 MQTT 消息数。 协议、QoS
MQTT.FailedPublishedMessages MQTT:发布失败的消息数 计数 Total 无法发布到命名空间的 MQTT 消息数。 协议、QoS、错误
MQTT.SuccessfulDeliveredMessages MQTT:成功传递的消息数 计数 Total 命名空间传递的消息数,与来自 MQTT 客户端的确认无关。 此操作没有失败。 协议、QoS
MQTT.SuccessfulSubscriptionOperations MQTT:成功的订阅操作数 计数 Total 成功的订阅操作(订阅、取消订阅)数。 对于 MQTT 中转站接受的订阅请求中的每个主题筛选器,此指标都会递增。 操作类型、协议
MQTT.FailedSubscriptionOperations MQTT:失败的订阅操作数 计数 Total 失败的订阅操作(订阅、取消订阅)数。 对于 MQTT 中转站拒绝的订阅请求中的每个主题筛选器,此指标都会递增。 操作类型、协议、错误
Mqtt.SuccessfulRoutedMessages MQTT:成功路由的消息数 计数 Total 从命名空间成功路由的 MQTT 消息数。
Mqtt.FailedRoutedMessages MQTT:路由失败的消息数 计数 Total 未能从命名空间路由的 MQTT 消息数。 错误
MQTT.Connections MQTT:活动连接数 计数 Total 命名空间中的活动连接数。 此指标的值为时间点值。 在该时间点之后立即处于活动状态的连接可能不会反映在这些指标中。 协议
Mqtt.DroppedSessions MQTT:已删除的会话数 计数 Total 命名空间中已删除的会话数。 此指标的值为时间点值。 在该时间点之后立即删除的会话可能不会反映在这些指标中。 DropReason
Mqtt.SuccessfulConnectLatencyInMilliseconds MQTT:成功的连接延迟 毫秒 Total 观察到的时间命名空间接收 MQTT CONNECT 数据包的时间以及向客户端发送相应 CONNACK 响应的时间(以毫秒为单位)。 此指标包括成功和失败的连接尝试。 协议、结果、错误
Mqtt.SuccessfulPublishLatencyInMilliseconds MQTT:成功发布延迟 毫秒 Total 观察到的时间命名空间在 QoS 1 处接收 MQTT PUBLISH 数据包,以及向客户端发送相应 PUBACK 确认的时间(以毫秒为单位)。 此指标中不包含 QoS 0 消息。 协议、QoS、结果、错误

注释

每个订阅请求都会递增 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 命名空间中超出的限制的类型。 可用的值包括:
- 每个命名空间的入站带宽
- 每个连接的入站带宽 (InboundBandwidthPerConnection)
- 每个命名空间的传入发布数据包
- 每个连接的传入发布数据包
- OutboundPublishPacketsPerNamespace
- 每连接出站发布数据包数量
- OutboundBandwidthPerNamespace(每命名空间的出站带宽)
- 每连接的出站带宽
- SubscribeOperationsPerNamespace (每命名空间的订阅操作)
- 每连接订阅操作数量
- ConnectPacketsPerNamespace

详细了解限制
QoS 服务质量级别。 可用值为:0、1。
方向 操作的方向。 可用值为:

- Inbound:到事件网格的入站吞吐量。
- Outbound:来自事件网格的出站吞吐量。
DropReason 删除会话的原因。 可用的值包括:

- SessionExpiry:永久性会话已过期。
- TransientSession:非永久性会话已过期。
- SessionOverflow:客户端在会话的生命周期内未连接来接收已排队的 QOS1 消息,直到队列达到其最大限制为止。
- AuthorizationError:会话因任何授权问题而被删除。

资源日志

Azure 事件网格中的 MQTT 代理会捕获以下类别的诊断日志:

本部分提供这些日志的架构和示例。

公共属性

MQTT 中转站的资源日志通常具有以下属性。

属性名称 类型 Description
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/connectMicrosoft.EventGrid/topicspaces/disconnectMicrosoft.EventGrid/topicspaces/publishMicrosoft.EventGrid/topicspaces/subscribeMicrosoft.EventGrid/topicspaces/unsubscribe
category String 操作的类别或类型。 例如 FailedMQTTConnectionsSuccessfulMQTTConnectionsMQTTDisconnectionsFailedMQTTPublishedMessagesFailedMQTTSubscriptionOperations
resultType String 操作结果。 例如: FailedSucceeded
resultSignature String 失败操作的结果。 例如:QuotaExceededClientAuthenticationErrorAuthorizationErrorSuccessfulMQTTConnections 等成功事件不包含此属性。
resultDescription String 有关失败作结果的说明。 SuccessfulMQTTConnections 等成功事件不包含此属性。
authenticationAuthority String 用于对 MQTT 客户端进行身份验证的颁发机构类型。 它设置为以下值之一: Local 对于在事件网格的本地注册表中注册的客户端,或者 AAD 对于使用 Microsoft Entra ID 进行身份验证的客户端。
authenticationType String 客户端使用的身份验证类型。 它设置为以下值之一:CertificateThumbprintMatchAccessTokenCACertificate
clientIdentitySource String 客户端标识的源。 如果使用 Microsoft Entra ID 身份验证,则为 JWT
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"
    }
  }
]

下面是属性及其说明。

资产 类型 Description
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" 
    }
  }
]

下面是属性及其说明。

资产 类型 Description
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" 
    }
  }
]

下面是属性及其说明。

资产 类型 Description
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 表及其说明对应的列。

列名称 类型 Description
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 表及其说明对应的列。

列名称 类型 Description
sessionName String 客户端在 MQTT CONNECT 数据包的 clientId 字段中提供的会话的名称。
protocol String 客户端用于发布的协议。 可能的值包括:MQTT3、MQTT3-WS、MQTT5、MQTT5-WS。
traceId Int 生成的跟踪 ID。
topicFilters 字符串数组 相同数据包中具有相同错误的主题名称的列表。

后续步骤

请参阅以下文章: