다음을 통해 공유


연결 문제 해결 - Azure Event Hubs

클라이언트 애플리케이션에서 이벤트 허브에 연결할 수 없는 다양한 이유가 있습니다. 연결 문제는 영구적이거나 일시적일 수 있습니다.

문제가 항상 발생하는 경우(영구적) 이 도움말의 영구 연결 문제 해결 섹션에 언급된 설정 및 기타 옵션을 확인하세요.

  • Connection string
  • 조직의 방화벽 설정
  • IP 방화벽 설정
  • 네트워크 보안 설정(서비스 엔드포인트, 프라이빗 엔드포인트 등) 등

일시적인 문제의 경우 문제 해결에 도움이 될 수 있는 다음 옵션을 사용해 보세요. 자세한 내용은 일시적인 연결 문제 해결을 참조하세요.

  • 최신 버전의 SDK로 업그레이드
  • 명령을 실행하여 드롭된 패킷 확인
  • 네트워크 추적을 얻습니다.

영구 연결 문제 해결

애플리케이션에서 이벤트 허브에 연결할 수 없는 경우 이 섹션의 단계에 따라 문제를 해결합니다.

서비스 중단이 있는지 확인

Azure 서비스 상태 사이트에서 Azure Event Hubs 서비스 중단을 검사합니다.

연결 문자열 확인

사용 중인 연결 문자열이 올바른지 확인합니다. Azure Portal, CLI 또는 PowerShell을 사용하여 연결 문자열을 가져오려면 연결 문자열 가져오기를 참조하세요.

Kafka 클라이언트의 경우 producer.config 또는 consumer.config 파일이 제대로 구성되어 있는지 확인합니다. 자세한 내용은 Event Hubs에서 Kafka를 사용하여 메시지 보내기 및 받기를 참조하세요.

이벤트를 보내고 받는 데 사용할 수 있는 프로토콜은 무엇인가요?

생산자 또는 보낸 사람이 AMQP(Advanced Messaging Queuing Protocol), Kafka 또는 HTTPS 프로토콜을 사용하여 이벤트 허브로 이벤트를 보낼 수 있습니다.

소비자 또는 수신기는 AMQP 또는 Kafka를 사용하여 이벤트 허브에서 이벤트를 받습니다. Event Hubs는 소비자가 이벤트를 수신할 수 있도록 끌어오기 모델만 지원합니다. 이벤트 처리기를 사용하여 이벤트 허브의 이벤트를 처리하는 경우에도 이벤트 프로세서는 내부적으로 끌어오기 모델을 사용하여 이벤트 허브에서 이벤트를 받습니다.

AMQP

AMQP 1.0 프로토콜을 사용하여 Azure Event Hubs에 이벤트를 보내고 받을 수 있습니다. AMQP는 이벤트를 보내고 받는 데 안정적이고 성능이 뛰어나며 안전한 통신을 제공합니다. 고성능 및 실시간 스트리밍에 사용할 수 있으며 대부분의 Azure Event Hubs SDK에서 지원됩니다.

HTTPS/REST API

HTTP POST 요청을 사용하여 Event Hubs에만 이벤트를 보낼 수 있습니다. Event Hubs는 HTTPS를 통해 이벤트 수신을 지원하지 않습니다. 직접 TCP 연결을 사용할 수 없는 경량 클라이언트에 적합합니다.

Apache Kafka

Azure Event Hubs에는 Kafka 생산자 및 소비자를 지원하는 기본 제공 Kafka 엔드포인트가 있습니다. Kafka를 사용하여 빌드된 애플리케이션은 Kafka 프로토콜(버전 1.0 이상)을 사용하여 코드 변경 없이 Event Hubs에서 이벤트를 보내고 받을 수 있습니다.

Azure SDK는 기본 통신 프로토콜을 추상화하고 C#, Java, Python, JavaScript 등의 언어를 사용하여 Event Hubs에서 이벤트를 보내고 받는 간소화된 방법을 제공합니다.

방화벽에서 열어야 하는 포트는 어느 것인가요?

Azure Event Hubs에서 다음 프로토콜을 사용하여 이벤트를 보내고 받을 수 있습니다.

  • AMQP(고급 메시지 큐 프로토콜) 1.0
  • 전송 계층 보안을 사용하는 Hypertext Transfer Protocol 1.1(HTTPS)
  • Apache Kafka

이러한 프로토콜을 사용하여 Azure Event Hubs와 통신하기 위해 열어야 하는 아웃바운드 포트는 다음 표를 참조하세요.

프로토콜 Ports 세부 정보
AMQP 5671 및 5672 AMQP 프로토콜 가이드를 참조하세요.
HTTPS 443 이 포트는 HTTP/REST API 및 AMQP-over-WebSockets에 사용됩니다.
Kafka 9093 Kafka 애플리케이션에서 Event Hubs 사용을 참조하세요.

클라이언트 SDK에서 수행하는 여러 관리 작업 및 Microsoft Entra ID(사용되는 경우)에서의 토큰 획득은 HTTPS를 통해 실행되므로 AMQP가 5671 포트를 통해 사용되는 경우에도 HTTPS 포트가 아웃바운드 통신에 필요합니다.

공식 Azure SDK는 일반적으로 Event Hubs에서 이벤트를 보내고 받는 데 AMQP 프로토콜을 사용합니다. AMQP-over-WebSockets 프로토콜 옵션은 HTTP API와 마찬가지로 443 TCP 포트를 통해 실행되지만, 그 밖의 기능은 일반 AMQP와 동일합니다. 이 옵션은 추가 핸드셰이크 왕복으로 인해 초기 연결 대기 시간이 더 길고, HTTPS 포트 공유에 대한 절충으로 약간 더 많은 오버헤드가 있습니다. 이 모드를 선택하는 경우 443 TCP 포트가 통신에 충분합니다. 다음 옵션을 사용하면 일반 AMQP 또는 AMQP WebSockets 모드를 선택할 수 있습니다.

언어 옵션
.NET EventHubsTransportType.AmqpTcp 또는 EventHubsTransportType.AmqpWebSockets가 있는 EventHubConnectionOptions.TransportType
Java AmqpTransportType.AMQP 또는 AmqpTransportType.AMQP_WEB_SOCKETS가 있는 com.microsoft.azure.eventhubs.EventProcessorClientBuilder.transporttype
Node EventHubConsumerClientOptions에는 webSocketOptions 속성이 있습니다.
Python TransportType.Amqp 또는 TransportType.AmqpOverWebSocket이 있는 EventHubConsumerClient.transport_type

허용해야 하는 IP 주소는 무엇인가요?

Azure를 사용하는 경우 회사 방화벽 또는 프록시의 특정 IP 주소 범위 또는 URL에서 사용 중이거나 사용하려는 모든 Azure 서비스에 액세스하도록 허용해야 하는 경우가 있습니다. Event Hubs에서 사용하는 IP 주소에서 트래픽이 허용되는지 확인합니다. Azure Event Hubs에서 사용하는 IP 주소는 Azure IP 범위 및 서비스 태그 - 퍼블릭 클라우드를 참조하세요.

또한 네임스페이스의 IP 주소가 허용되는지 확인합니다. 연결을 허용하는 적합한 IP 주소를 찾으려면 다음 단계를 수행합니다.

  1. 명령 프롬프트에서 다음 명령을 실행합니다.

    nslookup <YourNamespaceName>.servicebus.windows.net
    
  2. Non-authoritative answer에서 반환된 IP 주소를 적어 둡니다.

이전 클러스터에서 호스트되는 네임스페이스(Cloud Services 기반 - *.cloudapp.net 로 끝나는 CNAME)를 사용하고 네임스페이스가 영역 중복경우 몇 가지 추가 단계를 수행해야 합니다. 네임스페이스가 최신 클러스터에 있는 경우(Virtual Machine Scale Set 기반 - *.cloudapp.azure.com 끝나는 CNAME) 및 영역 중복은 아래 단계를 건너뛸 수 있습니다.

  1. 먼저 네임스페이스에서 nslookup을 실행합니다.

    nslookup <yournamespace>.servicebus.windows.net
    
  2. 신뢰할 수 없는 응답 섹션에서 다음 형식 중 하나로 표시되는 이름을 적어 둡니다.

    <name>-s1.cloudapp.net
    <name>-s2.cloudapp.net
    <name>-s3.cloudapp.net
    
  3. 접미사 s1, s2 및 s3를 포함하는 각 이름에 대해 nslookup을 실행하여 세 개의 가용성 영역에서 실행되는 세 인스턴스의 IP 주소를 모두 가져옵니다.

    참고 항목

    nslookup 명령에서 반환된 IP 주소는 고정 IP 주소가 아닙니다. 그러나 이 주소는 기본 배포가 삭제되거나 다른 클러스터로 이동될 때까지 일정하게 유지됩니다.

내 네임스페이스에 이벤트를 보내거나 받는 클라이언트 IP는 무엇인가요?

먼저 네임스페이스에서 IP 필터링을 사용하도록 설정합니다.

그런 다음, 진단 로그 사용의 지침에 따라 진단 로그를 Event Hubs 가상 네트워크 연결 이벤트에 사용하도록 설정합니다. 연결이 거부된 IP 주소가 표시됩니다.

{
    "SubscriptionId": "0000000-0000-0000-0000-000000000000",
    "NamespaceName": "namespace-name",
    "IPAddress": "1.2.3.4",
    "Action": "Deny Connection",
    "Reason": "IPAddress doesn't belong to a subnet with Service Endpoint enabled.",
    "Count": "65",
    "ResourceId": "/subscriptions/0000000-0000-0000-0000-000000000000/resourcegroups/testrg/providers/microsoft.eventhub/namespaces/namespace-name",
    "Category": "EventHubVNetConnectionEvent"
}

Important

가상 네트워크 로그는 네임스페이스에서 특정 IP 주소(IP 필터 규칙)의 액세스를 허용하는 경우에만 생성됩니다. 이러한 기능을 사용하여 네임스페이스에 대한 액세스를 제한하지 않고 Event Hubs 네임스페이스에 연결하는 클라이언트의 IP 주소를 추적하기 위해 가상 네트워크 로그를 계속 가져오려는 경우 IP 필터링을 사용하도록 설정하고 총 주소 지정 가능한 IPv4 범위(0.0.0.0/1 - 128.0.0.0/1) 및 IPv6 범위(::/1 - 8000::/1)를 추가하여 해결합니다.

참고 항목

현재 개별 메시지 또는 이벤트의 원본 IP는 확인할 수 없습니다.

네트워크 보안 그룹에서 Event Hubs 서비스 태그가 허용되는지 확인합니다.

애플리케이션이 서브넷 내에서 실행 중이고 연결된 네트워크 보안 그룹이 있는 경우 인터넷 아웃바운드 트래픽이 허용되는지 또는 Event Hubs 서비스 태그(EventHub)가 허용되는지 확인합니다. 가상 네트워크 서비스 태그를 참조하고 EventHub를 검색합니다.

애플리케이션이 가상 네트워크의 특정 서브넷에서 실행되어야 하는지 확인

네임스페이스에 대한 액세스 권한이 있는 가상 네트워크 서브넷에서 애플리케이션이 실행되고 있는지 확인합니다. 그렇지 않은 경우 네임스페이스에 대한 액세스 권한이 있는 서브넷에서 애플리케이션을 실행하거나 애플리케이션이 실행 중인 시스템의 IP 주소를 IP 방화벽에 추가합니다.

이벤트 허브 네임스페이스에 대한 가상 네트워크 서비스 엔드포인트를 만들 때 네임스페이스는 서비스 엔드포인트에 바인딩된 서브넷의 트래픽만 허용합니다. 이 동작에는 예외가 있습니다. IP 방화벽의 특정 IP 주소를 추가하여 이벤트 허브의 퍼블릭 엔드포인트에 액세스할 수 있습니다. 자세한 내용은 네트워크 서비스 엔드포인트를 참조하세요.

네임스페이스에 대한 IP 방화벽 설정을 확인합니다.

애플리케이션이 실행되는 컴퓨터의 공용 IP 주소가 IP 방화벽에 의해 차단되지 않았는지 확인합니다.

기본적으로 요청에 유효한 인증 및 권한 부여가 제공되는 한 Event Hubs 네임스페이스는 인터넷에서 액세스할 수 있습니다. IP 방화벽을 사용하면 CIDR(Classless Inter-Domain Routing) 표기법으로 IPv4 또는 IPv6 주소 또는 주소 범위 세트로만 제한할 수 있습니다.

IP 방화벽 규칙은 Event Hubs 네임스페이스 수준에 적용됩니다. 따라서 해당 규칙은 지원되는 모든 프로토콜을 사용하는 클라이언트의 모든 연결에 적용됩니다. Event Hubs 네임스페이스에서 허용된 IP 규칙과 일치하지 않는 IP 주소의 연결 시도는 권한이 없는 것으로 거부됩니다. 응답은 IP 규칙을 언급하지 않습니다. IP 필터 규칙은 순서대로 적용되며 IP 주소와 일치하는 첫 번째 규칙이 수락 또는 거부 작업을 결정합니다.

자세한 내용은 Azure Event Hubs 네임스페이스에 대한 IP 방화벽 규칙 구성을 참조하세요. IP 필터링, 가상 네트워크 또는 인증서 체인 문제가 있는지 확인하려면 네트워크 관련 문제 해결을 참조하세요.

프라이빗 엔드포인트만 사용하여 네임스페이스에 액세스할 수 있는지 확인합니다.

Event Hubs 네임스페이스가 프라이빗 엔드포인트를 통해서만 액세스할 수 있도록 구성된 경우 클라이언트 애플리케이션이 프라이빗 엔드포인트를 통해 네임스페이스에 액세스하고 있는지 확인합니다.

Azure Private Link 서비스를 사용하면 가상 네트워크의 프라이빗 엔드포인트를 통해 Azure Event Hubs에 액세스할 수 있습니다. 프라이빗 엔드포인트는 Azure Private Link가 제공하는, 서비스에 비공개로 안전하게 연결하는 네트워크 인터페이스입니다. 프라이빗 엔드포인트는 가상 네트워크의 개인 IP 주소를 사용하여 서비스를 가상 네트워크에 효과적으로 제공합니다. 서비스에 대한 모든 트래픽은 프라이빗 엔드포인트를 통해 라우팅할 수 있으므로 게이트웨이, NAT 디바이스, ExpressRoute 또는 VPN 연결 또는 공용 IP 주소가 필요하지 않습니다. 가상 네트워크와 서비스 간의 트래픽은 Microsoft 백본 네트워크를 통해 이동하여 공용 인터넷에서 노출을 제거합니다. Azure 리소스의 인스턴스에 연결하여 액세스 제어에서 가장 높은 수준의 세분성을 제공할 수 있습니다.

자세한 정보는 프라이빗 엔드포인트 구성을 참조하세요. 프라이빗 엔드포인트가 사용되는지 확인하려면 프라이빗 엔드포인트 연결이 작동하는지 확인 섹션을 참조하세요.

Event Hubs의 네트워크 관련 문제를 해결하려면 다음 단계를 수행합니다.

https://<yournamespacename>.servicebus.windows.net/으로 이동하거나 wget합니다. IP 필터링, 가상 네트워크 또는 인증서 체인 문제가 있는지 여부를 확인하는 데 도움이 됩니다(Java SDK를 사용하는 경우 가장 일반적임).

성공 메시지의 예:

<feed xmlns="http://www.w3.org/2005/Atom"><title type="text">Publicly Listed Services</title><subtitle type="text">This is the list of publicly-listed services currently available.</subtitle><id>uuid:27fcd1e2-3a99-44b1-8f1e-3e92b52f0171;id=30</id><updated>2019-12-27T13:11:47Z</updated><generator>Service Bus 1.1</generator></feed>

실패 오류 메시지의 예:

<Error>
    <Code>400</Code>
    <Detail>
        Bad Request. To know more visit https://aka.ms/sbResourceMgrExceptions. . TrackingId:b786d4d1-cbaf-47a8-a3d1-be689cda2a98_G22, SystemTracker:NoSystemTracker, Timestamp:2019-12-27T13:12:40
    </Detail>
</Error>

일시적인 연결 문제 해결

일시적인 연결 문제가 발생하는 경우 문제 해결 팁에 대한 다음 섹션을 참조하세요.

최신 버전의 클라이언트 SDK 사용

일부 일시적인 연결 문제는 현재 사용하는 버전 이후의 SDK에서 수정되었을 수 있습니다. 애플리케이션에서 최신 버전의 클라이언트 SDK를 사용하고 있는지 확인합니다. SDK는 새로운/업데이트된 기능 및 버그 수정으로 지속적으로 개선되므로 항상 최신 패키지를 사용하여 테스트합니다. 수정된 문제 및 추가된/업데이트된 기능에 대한 릴리스 정보를 확인합니다.

클라이언트 SDK에 대한 자세한 내용은 Azure Event Hubs-클라이언트 SDK 문서를 참조하세요.

명령을 실행하여 드롭된 패킷을 확인합니다

일시적인 연결 문제가 있는 경우 다음 명령을 실행하여 드롭된 패킷이 있는지 확인합니다. 이 명령은 1초마다 서비스와 25개의 서로 다른 TCP 연결을 구축하려고 시도합니다. 그 후 성공/실패 횟수를 확인하고 TCP 연결 대기 시간을 확인할 수도 있습니다. psping 도구를 여기에서 다운로드할 수 있습니다.

.\psping.exe -n 25 -i 1 -q <yournamespacename>.servicebus.windows.net:5671 -nobanner     

tnc, ping 등과 같은 다른 도구를 사용하는 경우 동등한 명령을 사용할 수 있습니다.

이전 단계가 도움이 되지 않는 경우 네트워크 추적을 가져와서 Wireshark와 같은 도구를 사용하여 분석합니다. 필요한 경우 Microsoft 지원에 문의하세요.

서비스 업그레이드/다시 시작

백 엔드 서비스 업그레이드 및 다시 시작으로 인해 일시적인 연결 문제가 발생할 수 있습니다. 문제가 발생하면 다음과 같은 증상이 나타날 수 있습니다.

  • 들어오는 메시지/요청이 끊길 수 있습니다.
  • 로그 파일에 오류 메시지가 포함될 수 있습니다.
  • 몇 초 동안 애플리케이션과 서비스의 연결이 끊어질 수 있습니다.
  • 요청이 일시적으로 제한될 수 있습니다.

애플리케이션 코드에서 SDK를 활용하는 경우 다시 시도 정책은 이미 기본 제공되어 활성 상태입니다. 애플리케이션/워크플로에 큰 영향 없이 애플리케이션이 다시 연결됩니다. 이러한 일시적인 오류를 포착하고 백오프한 다음, 호출을 다시 시도하면 사용자의 코드가 이러한 일시적인 문제에 복원력이 있음을 확인할 수 있습니다.

다음 단계

다음 문서를 참조하세요.