この記事では、MQTT ブローカーのパフォーマンスと可用性を分析するために収集されるログとメトリック データのリファレンスを提供します。
メトリックス
メトリック | Display name | ユニット | 集計 | 説明 | Dimensions |
---|---|---|---|---|---|
MQTT.RequestCount | MQTT: RequestCount | Count | Total | MQTT 要求の数。 | OperationType、Protocol、Result、Error |
MQTT.Throughput | MQTT: スループット | Count | 合計 | 名前空間によって発行または配信された合計バイト数。 このメトリックには、成功に関係なく、MQTT クライアントが MQTT ブローカーに送信するすべての MQTT パケットが含まれます。 | Direction |
MQTT.ThrottlingEnforcements | MQTT: スロットリングの適用 | Count | 合計 | 名前空間で要求が調整された回数。 | ThrottleType |
MQTT.SuccessfulPublishedMessages | MQTT: 正常に発行されたメッセージ | Count | Total | 名前空間に正常に発行された MQTT メッセージの数。 | Protocol、QoS |
MQTT.FailedPublishedMessages | MQTT: 失敗した発行済みメッセージ | Count | Total | 名前空間への発行に失敗した MQTT メッセージの数。 | Protocol、QoS、Error |
MQTT.SuccessfulDeliveredMessages | MQTT: 正常に配信されたメッセージ | Count | 合計 | MQTT クライアントからの受信確認に関係なく、名前空間によって配信されたメッセージの数。 この操作に失敗はありません。 | Protocol、QoS |
MQTT.SuccessfulSubscriptionOperations | MQTT: 成功したサブスクリプション操作 | Count | 合計 | 成功したサブスクリプション操作の数 (サブスクライブ、サブスクライブ解除)。 このメトリックは、MQTT ブローカーによって受け入れられるサブスクリプション要求内のトピック フィルターごとにインクリメントされます。 | OperationType、Protocol |
MQTT.FailedSubscriptionOperations | MQTT: 失敗したサブスクリプション操作 | Count | 合計 | 失敗したサブスクリプション操作の数 (サブスクライブ、サブスクライブ解除)。 このメトリックは、MQTT ブローカーによって拒否されるサブスクリプション要求内のトピック フィルターごとにインクリメントされます。 | OperationType、Protocol、Error |
Mqtt.SuccessfulRoutedMessages | MQTT: 正常にルーティングされたメッセージ | Count | 合計 | 名前空間から正常にルーティングされた MQTT メッセージの数。 | |
Mqtt.FailedRoutedMessages | MQTT: 失敗したルーティングメッセージ | Count | 合計 | 名前空間からのルーティングに失敗した MQTT メッセージの数。 | エラー |
MQTT.Connections | MQTT: アクティブな接続 | Count | 合計 | 名前空間内のアクティブな接続の数。 このメトリックの値は、特定の時点の値です。 その時点の直後にアクティブになった接続は、メトリックに反映されない場合があります。 | プロトコル |
Mqtt.DroppedSessions | MQTT: ドロップされたセッション | Count | 合計 | 名前空間でドロップされたセッションの数。 このメトリックの値は、特定の時点の値です。 その時点の直後にドロップされたセッションは、メトリックに反映されない場合があります。 | DropReason |
注意
各サブスクリプション要求によって MQTT.RequestCount メトリックがインクリメントされ、サブスクリプション要求内の各トピック フィルターによってサブスクリプション操作メトリックがインクリメントされます。 たとえば、5 つの異なるトピック フィルターを使用して送信されるサブスクリプション要求を考えてみましょう。 これらのトピック フィルターのうち 3 つは正常に処理されましたが、2 つのトピック フィルターは処理に失敗しました。 次の一覧は、メトリックに対する結果の増分を表しています。
- MQTT.RequestCount:1
- MQTT.SuccessfulSubscriptionOperations:3
- MQTT.FailedSubscriptionOperations:2
メトリック ディメンション
Dimension | 値 |
---|---|
OperationType | 操作の種類。 次の値をご利用いただけます。 - Publish: MQTT クライアントから Event Grid に送信される PUBLISH 要求。 - Deliver: Event Grid から MQTT クライアントに送信される PUBLISH 要求。 - Subscribe: MQTT クライアントによる SUBSCRIBE 要求。 - Unsubscribe: MQTT クライアントによる UNSUBSCRIBE 要求。 - Connect: MQTT クライアントによる CONNECT 要求。 |
Protocol | 操作で使用されるプロトコル。 次の値をご利用いただけます。 - MQTT3: MQTT v3.1.1 - MQTT5: MQTT v5 - MQTT3-WS: MQTT v3.1.1 over WebSocket - MQTT5-WS: MQTT v5 over WebSocket |
結果 | 操作の結果。 次の値をご利用いただけます。 - 成功 - ClientError - ServiceError |
エラー | 操作中に発生したエラー。 MQTT: RequestCount、MQTT: 失敗した発行済みメッセージ数、MQTT: 失敗したサブスクリプション操作数の各メトリックに使用できる値は次のとおりです。 -QuotaExceeded: クライアントが 1 つ以上のスロットリング制限を超えたため、エラーが発生しました - AuthenticationError: 認証上の理由によるエラー。 - AuthorizationError: 認可上の理由によるエラー。 - ClientError: クライアントが不正な要求を送信したか、サポートされていない機能のいずれかを使用したため、エラーが発生しました。 - ServiceError: 予期しないサーバー エラーまたはサーバーの運用上の理由によるエラー。 サポートされている MQTT 機能について詳しくは、こちらをご覧ください。 MQTT: 失敗したルーティング メッセージ数メトリックに使用できる値は次のとおりです。 -AuthenticationError: MQTT ルーティング メッセージの宛先として構成されたカスタム トピックの EventGrid データ送信者ロールが削除されました。 -TopicNotFoundError: すべての MQTT ルーティング メッセージを受信するように構成されているカスタム トピックが削除されました。 -TooManyRequests: MQTT ルーティング メッセージの 1 秒あたりの数が、MQTT ルーティング メッセージの宛先 (名前空間トピックまたはカスタム トピック) の制限を超えています。 - ServiceError: 予期しないサーバー エラーまたはサーバーの運用上の理由によるエラー。 MQTT ブローカーがこれらの各ルーティング エラーを処理する方法について詳しくは、こちらをご覧ください。 |
ThrottleType | 名前空間で超過されたスロットル制限の種類。 次の値をご利用いただけます。 - InboundBandwidthPerNamespace - InboundBandwidthPerConnection - IncomingPublishPacketsPerNamespace - IncomingPublishPacketsPerConnection - OutboundPublishPacketsPerNamespace - OutboundPublishPacketsPerConnection - OutboundBandwidthPerNamespace - OutboundBandwidthPerConnection - SubscribeOperationsPerNamespace - SubscribeOperationsPerConnection - ConnectPacketsPerNamespace 制限の詳細情報。 |
QoS | サービスの品質レベル。 使用可能な値: 0、1。 |
Direction | 操作の方向。 使用できる値は次のとおりです。 - Inbound: Event Grid への受信スループット。 - Outbound: Event Grid からの送信スループット。 |
DropReason | セッションがドロップされた理由。 次の値をご利用いただけます。 - SessionExpiry: 永続セッションの有効期限が切れました。 - TransientSession: 非永続セッションの有効期限が切れました。 - SessionOverflow: クライアントは、キューが最大制限に達するまで、セッションの存続期間中、キューに入れられた QOS1 メッセージを受信するために接続しませんでした。 - AuthorizationError: 何らかの認証理由によるセッションのドロップ。 |
リソース ログ
Azure Event Grid の MQTT ブローカーでは、次のカテゴリの診断ログをキャプチャします。
このセクションでは、これらのログのスキーマと例を示します。
共通プロパティ
次のプロパティは、MQTT ブローカーのすべてのリソース ログに共通です。
プロパティ名 | 種類 | 説明 |
---|---|---|
time |
DateTime |
ログが生成されたときのタイムスタンプ (UTC)。 |
resourceId |
String |
Event Grid 名前空間のリソース 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 (Event Grid のローカル レジストリに登録されているクライアントの場合)、または AAD (認証に Microsoft Entra を使用するクライアントの場合) のいずれかの値に設定されます。 |
authenticationType |
String |
クライアントによって使用される認証の種類。
CertificateThumbprintMatch 、AccessToken 、または CACertificate のいずれかの値に設定します。 |
clientIdentitySource |
String |
クライアントの ID のソース。 Microsoft Entra ID 認証を使う場合は JWT です。 |
authenticationAuthority |
String |
クライアントの ID の権限。
local (Event Grid 名前空間のローカル レジストリ内のクライアントの場合)、AAD (AAD クライアントの場合) のいずれかの値に設定されます。 |
clientIdentity |
String |
クライアントの ID の値。 これは、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": "eastus",
"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"
}
}
]
プロパティとその説明を次に示します。
プロパティ | タイプ | 説明 |
---|---|---|
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": "eastus",
"operationName": "Microsoft.EventGrid/topicspaces/connect",
"category": "SuccessfulMqttConnections",
"resultType": "Succeeded",
"identity": {
"authenticationType": "CertificateThumbprintMatch",
"clientIdentitySource": "UserName",
"authenticationAuthority": "Local",
"clientIdentity": "client1"
},
"properties": {
"sessionName": "client1",
"protocol": "MQTT5"
}
}
]
プロパティとその説明を次に示します。
プロパティ | タイプ | 説明 |
---|---|---|
sessionName |
String |
クライアントによって MQTT CONNECT パケットの clientId フィールドに指定されるセッションの名前。 |
protocol |
String |
クライアントで接続に使用するプロトコル。 使用可能な値は、MQTT3、MQTT3-WS、MQTT5、MQTT5-WS です。 |
MQTT の切断
このログには、Event Grid 名前空間からのすべての MQTT クライアント切断のエントリが含まれます。 このログを使用して、接続の問題を診断できます。
[
{
"time": "2023-11-07T01:29:22.4591610Z",
"resourceId": "/SUBSCRIPTIONS/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/RESOURCEGROUPS/MYRG/PROVIDERS/MICROSOFT.EVENTGRID/NAMESPACE/MYNS",
"location": "eastus",
"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"
}
}
]
プロパティとその説明を次に示します。
プロパティ | タイプ | 説明 |
---|---|---|
sessionName |
String |
クライアントによって MQTT CONNECT パケットの clientId フィールドに指定されるセッションの名前。 |
protocol |
String |
クライアントで接続に使用するプロトコル。 使用可能な値は、MQTT3、MQTT3-WS、MQTT5、MQTT5-WS です。 |
失敗した MQTT の発行済みメッセージ
このログには、Event Grid 名前空間に発行またはこれによって配信できなかったすべての MQTT メッセージのエントリが含まれます。 このログを使用して、発行の問題とメッセージ損失を診断できます。
[
{
"time": "2023-11-07T01:22:48.2811790Z",
"resourceId": "/SUBSCRIPTIONS/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/RESOURCEGROUPS/MYRG/PROVIDERS/MICROSOFT.EVENTGRID/NAMESPACE/MYNS",
"location": "eastus",
"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 を持つ、Event Grid 名前空間に発行またはこれによって配信できなかった 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": "eastus",
"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 |
文字列の配列 | 同じエラーを持つ同じパケット内のトピック名の一覧。 |
次のステップ
次の記事をご覧ください。