이 문서에서는 MQTT 브로커의 성능 및 가용성을 분석하기 위해 수집된 로그 및 메트릭 데이터에 대한 참조를 제공합니다.
메트릭
메트릭 | 표시 이름 | 단위 | 집계 | 설명 | 차원 |
---|---|---|---|---|---|
MQTT.RequestCount | MQTT: RequestCount | 개수 | 총계 | MQTT 요청 수입니다. | OperationType, Protocol, Result, Error |
MQTT.Throughput | MQTT: 처리량 | Count | 합계 | 네임스페이스에서 게시하거나 전달하는 총 바이트 수입니다. 이 메트릭에는 성공에 관계없이 MQTT 클라이언트가 MQTT 브로커에 보내는 MQTT 패킷이 모두 포함되어 있습니다. | 방향 |
MQTT.ThrottlingEnforcements | MQTT: 제한 적용 | Count | 합계 | 네임스페이스에서 요청이 제한되는 횟수입니다. | ThrottleType |
MQTT.SuccessfulPublishedMessages | MQTT: 성공적으로 게시된 메시지 | 개수 | 총계 | 네임스페이스에 성공적으로 게시된 MQTT 메시지 수입니다. | Protocol, QoS |
MQTT.FailedPublishedMessages | MQTT: 게시하지 못한 메시지 | 개수 | 총계 | 네임스페이스에 게시하지 못한 MQTT 메시지 수입니다. | Protocol, QoS, Error |
MQTT.SuccessfulDeliveredMessages | MQTT: 배달에 성공한 메시지 | 개수 | 합계 | 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개가 성공적으로 처리되었지만 두 개의 토픽 필터를 처리하지 못했습니다. 다음 목록은 메트릭에 대한 결과 증분을 나타냅니다.
- MQTT.RequestCount:1
- MQTT.SuccessfulSubscriptionOperations:3
- MQTT.FailedSubscriptionOperations:2
메트릭 차원
크기 | 값 |
---|---|
OperationType | 작업의 유형입니다. 사용 가능한 값은 다음을 포함합니다. - 게시: MQTT 클라이언트에서 Event Grid로 전송된 요청을 게시합니다. - 배달: Event Grid에서 MQTT 클라이언트로 전송된 요청을 게시합니다. - 구독: MQTT 클라이언트별 요청을 구독합니다. - 구독 취소: MQTT 클라이언트별 요청을 구독 취소합니다. - 연결: MQTT 클라이언트별 요청을 연결합니다. |
프로토콜 | 작업에 사용되는 프로토콜입니다. 사용 가능한 값은 다음을 포함합니다. - 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 기능에 대해 자세히 알아보세요. MQTT: 라우트하지 못한 메시지 메트릭에 사용할 수 있는 값은 다음과 같습니다. -AuthenticationError: MQTT 라우트된 메시지의 대상으로 구성된 사용자 지정 토픽에 대한 EventGrid 데이터 보낸 사람 역할이 삭제되었습니다. -TopicNotFoundError: MQTT 라우트된 메시지를 모두 수신하도록 구성된 사용자 지정 토픽이 삭제되었습니다. -TooManyRequests: 초당 MQTT 라우트된 메시지 수가 MQTT 라우트된 메시지에 대한 대상(네임스페이스 토픽 또는 사용자 지정 토픽)의 제한을 초과합니다. - ServiceError: 예기치 않은 서버 오류 또는 서버의 작동상의 원인으로 인한 오류입니다. MQTT 브로커가 이러한 각 라우팅 오류를 처리하는 방법에 대해 자세히 알아보세요. |
ThrottleType | 네임스페이스에서 초과된 제한의 유형입니다. 사용 가능한 값은 다음을 포함합니다. - InboundBandwidthPerNamespace - InboundBandwidthPerConnection - IncomingPublishPacketsPerNamespace - IncomingPublishPacketsPerConnection - OutboundPublishPacketsPerNamespace - OutboundPublishPacketsPerConnection - OutboundBandwidthPerNamespace - OutboundBandwidthPerConnection - SubscribeOperationsPerNamespace - SubscribeOperationsPerConnection - ConnectPacketsPerNamespace 제한에 대해 자세히 알아보세요. |
Qos | 서비스 품질 수준입니다. 사용 가능한 값은 0, 1입니다. |
방향 | 작업의 방향입니다. 사용 가능한 값은 - 인바운드: Event Grid로 인바운드 처리량입니다. - 아웃바운드: Event Grid에서의 아웃바운드 처리량입니다. |
DropReason | 세션이 삭제된 이유입니다. 사용 가능한 값은 다음을 포함합니다. - SessionExpiry: 영구 세션이 만료되었습니다. - TransientSession: 비영구 세션이 만료되었습니다. - SessionOverflow: 클라이언트가 큐에 대기 중인 QOS1 메시지를 수신하기 위해 큐가 최대 제한에 도달할 때까지 세션 수명 동안 연결되지 않았습니다. - AuthorizationError: 권한 부여로 인해 세션이 삭제됩니다. |
리소스 로그
Azure Event Grid의 MQTT 브로커는 다음 범주에 대한 진단 로그를 캡처합니다.
이 섹션에서는 이러한 로그에 대한 스키마 및 예제를 제공합니다.
일반 속성
다음 속성은 MQTT 브로커의 모든 리소스 로그에 일반적입니다.
Property name | 형식 | 설명 |
---|---|---|
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"
}
}
]
속성 및 해당 설명은 다음과 같습니다.
속성 | Type | 설명 |
---|---|---|
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"
}
}
]
속성 및 해당 설명은 다음과 같습니다.
속성 | Type | 설명 |
---|---|---|
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"
}
}
]
속성 및 해당 설명은 다음과 같습니다.
속성 | Type | 설명 |
---|---|---|
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 테이블의 열과 해당 설명은 다음과 같습니다.
열 이름 | Type | 설명 |
---|---|---|
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 테이블의 열과 해당 설명은 다음과 같습니다.
열 이름 | Type | 설명 |
---|---|---|
sessionName |
String |
MQTT CONNECT 패킷의 clientId 필드에서 클라이언트가 제공하는 세션의 이름입니다. |
protocol |
String |
클라이언트가 게시하는 데 사용하는 프로토콜입니다. 가능한 값은 MQTT3, MQTT3-WS, MQTT5, MQTT5-WS입니다. |
traceId |
Int |
생성된 추적 ID입니다. |
topicFilters |
문자열 배열 | 동일한 패킷 내에서 동일한 오류가 발생한 토픽 이름 목록입니다. |
다음 단계
다음 문서를 참조하세요.