다음을 통해 공유


Azure Event Grid의 MQTT 브로커 기능에 대한 데이터 참조 모니터링(미리 보기)

이 문서에서는 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 문자열 배열 동일한 패킷 내에서 동일한 오류가 발생한 토픽 이름 목록입니다.

다음 단계

다음 문서를 참조하세요.